반응형
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 [ -n "${cmd}" ] ; then # 로그인한 터미널이 존재하면 if [ -n "${login_tty}" ]; then # 마지막 cmd와 old_cmd가 동일하지 않을 경우 if ["$cmd" != "$cmd_old" ]; then # local6.debug 파일에 로그 기록(각 라인마다 배시쉘, 프로세스 ID, 로그인 사용자, IP, PID, 터미널 이름, 접속 날짜, 시간, 작업 위치, 명령어) # $$ : 현재 ID logger -p logcal6.debug -t bash -i -- 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 |
반응형
'IT 이야기 > Script' 카테고리의 다른 글
CUBRID 스크립트로 배우는 스크립트 (0) | 2020.05.28 |
---|---|
JBoss EAP 스크립트로 배우는 스크립트 (0) | 2020.05.28 |
Apache 스크립트로 배우는 스크립트 (0) | 2020.03.11 |
댓글