[Script] History 스크립트로 배우는 스크립트
본문 바로가기
IT 이야기/Script

[Script] History 스크립트로 배우는 스크립트

by 찬찬이 아빠 2020. 5. 4.
반응형

history 내역을 남기는 스크립트로 스크립트에 대해서 배워봅시다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
function hisory_to_syslog {
 
# 커맨드로 클리어 불가능
declare cmd                        
 
    # 현재 로그인한 사용자 ID 저장
    who='whoami'
 
    # 마지막 명령어 저장    
    cmd=$(history | tail -l)
 
    # 현재 사용중인 터미널의 이름 저장
    TTY='tty'
 
    # 터미널 로그인 번호 저장(로그인 순서대로 번호 부여)
    HISNAME='basename $TTY'
 
# 로그인한 터미널 저장
login_tty=`who | grep pts/${HISTNAME} | awk '{print $2}'
 
# 날짜와 시간 저장    
con_time=`who | grep pts/${HISNAME} | awk '{print $3, $4}'`
 
# cut -f : 지정한 필드만 출력, cud -d : 기본 필드 구분자는 탭이지만 이를 사용하지 않고, 지정하는 필드 구분자를 사용
# IP 주소저장, who 명령어 결과 뒤에서 2번째 다음 (자르고 뒤에) 자르고 출력
ip='who | grep pts/${HISNAME} | cut -f 2 -d \ (|cut -f 1 -d \)'
 
# -n : 존재할 경우, -x : 일치하지 않을 경우
if [ -"${cmd}" ] ; then
 
    # 로그인한 터미널이 존재하면
    if [ -"${login_tty}" ]; then
 
        # 마지막 cmd와 old_cmd가 동일하지 않을 경우
        if ["$cmd" != "$cmd_old" ]; then
 
            # local6.debug 파일에 로그 기록(각 라인마다 배시쉘, 프로세스 ID, 로그인 사용자, IP, PID,  터미널 이름, 접속 날짜, 시간, 작업 위치, 명령어)
            # $$ : 현재 ID
            logger -p logcal6.debug -t bash --- USER=[$who]: IP=[$ip]: PID=[$$]: TTY=[$login_tty]: CONN_TIME=[$con_time]: PWD=[$PWD]: CMD=[$cmd ]
        fi
 
        # 버퍼에 cmd 현재값 저장
        cmd_old=$cmd
    fi
fi
}
 
# history르르 DEBUG 모드로 수행
trap history_to_syslog DEBUG || EXIT
 
# history로 저장되는 명려어 수
HISTSIZE=10000                                
 
# history 파일에 실제적으로 저장되는 명령어 수
HISTFILESIZE=1000000                        
 
# history 날짜, 시간 포맷 설정(2020-05-04 18:11:12)
HISTTIMEFORMAT="%F %T "                        
 
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTFILESIZE HISTTIMEFORMAT INPUTRC
 
# HISTFILE을 읽기 전용으로 다룸  
declare -r HISTFILE
cs
반응형

댓글