본문 바로가기

linux

inotifywait

inotifywait란? filesystem에서 발생하는 이벤트 감지나 로깅을 위한 명령어
즉, 특정 파일이나 디렉토리를 감시해서 요리조리 활용할 수 있는 로깅을 남겨주는 아주 유익한 명령어 ! 

설치

# sudo yum install inotify-tools


메뉴얼

기본 동작

기본 동작은 아래와 같이 inotfiywait 명령어와 함께 이벤트를 감지할 directory path를 설정한다

# inotifywait /home/ &
Setting up watches.
Watches established.

위 명령어는 event 발생 시 까지 계속 실행되는 명령어이기 때문에, background 실행을 위해 '&'을 붙인다.

 

현재 상태에서 아래와같이 /home/경로에 새로운 파일을 만들면 아래와 같이 CREATE log가 생기는것을 확인할 수 있다.

# touch asd
/home/ CREATE asd
# fg
bash: fg: job has terminated
[2]+ Done inotifywait /home/

-m flag

그리고 나서 background에서 실행중이던 inotifywait 명령어는 done이 되는데, 한번의 이벤트 발생 후 바로 프로세스가 종료되었다. 

프로세스를 계속 유지하기 위해 -m flag를 붙여서 다시 실행한다.

# inotifywait /home/ -m &
[2] 147
# ls
/home/ OPEN,ISDIR
/home/ CLOSE_NOWRITE,CLOSE,ISDIR
asd
# cat asd
/home/ OPEN asd
/home/ CLOSE_NOWRITE,CLOSE asd
# cp asd asd_2
/home/ OPEN asd
/home/ CREATE asd_2
/home/ OPEN asd_2
/home/ CLOSE_WRITE,CLOSE asd_2
/home/ CLOSE_NOWRITE,CLOSE asd
# rm asd_2
/home/ DELETE asd_2

이후 위와같이 해당 directory에서 filesystem 관련 여러 명령어를 수행하면 다양한 로그를 확인할 수 있다.

더욱 다양한 log에 대해서는 inotifywait -h 명령어로 확인할 수 있다.

-e flag

또한 아래와 같이 특정 이벤트만 감지할 수 있도록 설정 가능하다.

# inotifywait /home/ -m -e create
# ls
# rm asd
# touch asd
/home/ CREATE asd

create log만 감지하도록 설정하니 asd file을 생성했을 때만 감지한다.

pipeline

pipeline을 이용하면 더욱 다양한 동작을 할 수 있는데, 특정 이벤트 발생시 이후에 어떻게 처리할것인지에 대한 동작 역시 설정 가능하다.

# inotifywait -m -e create asd /home/ | while read events ; do rm /home/asd; done &
# ls
# touch asd
# ls

위와같이 '|'(pipeline)이후에 read events로 반복문이 생기고 home/asd를 제거하도록 설정하니 touch asd 명령어로 asd file을 생성해도 곧바로 삭제 되는것을 확인할 수 있다.

 

반응형