it-swarm-ko.com

파일의 변경 사항을 모니터링하는 셸 명령

유닉스에는 파일을 모니터링하고 파일에 쓰여지는 변경 사항을 보는 데 사용할 수있는 명령이 있다는 것을 알고 있습니다. 이것은 특히 로그 파일을 확인하는 데 매우 유용했습니다.

그것이 무엇인지 알고 있습니까?

167
Sebastian Hoitz

당신은 의미합니까

tail -f logfile.log

?

( 꼬리 맨 페이지 )

220
Jon Skeet

Jon Skeet의 답변에 따라 아마도 꼬리를 의미했을 것입니다.

또 다른 유용한 방법은 watch ; 주기적으로 명령을 실행하고 출력을 전체 화면으로 볼 수 있습니다. 예를 들면 다음과 같습니다.

 watch -n 10 -d ls -l /var/adm/messages

10 초마다 ls -l /var/adm/messages 명령을 실행하고 후속 실행 간의 출력 차이를 강조 표시합니다. (예를 들어, 로그 파일이 얼마나 빨리 커지는 지 보는 데 유용합니다).

128
Murali Suriar

inotifywait from inotify-tools 는 파일 (또는 디렉토리의 파일)이 변경 될 때마다 명령을 실행하려는 경우에 유용합니다. 예를 들면 다음과 같습니다.

inotifywait -r -m -e modify /var/log | 
   while read path _ file; do 
       echo $path$file modified
   done
42
richvdh

less +FG를 선호합니다1 로그 파일에서 특정 오류나 ID를 검색해야하므로 tail -f 이상입니다. 검색해야 할 경우 ^C를 입력하여 파일 추적을 중지하고 ?를 입력하여 뒤로 검색을 시작하십시오.

키 바인딩은 vi에서와 거의 동일합니다. + 옵션을 사용하여 시작시 모든 명령을 초기화 할 수 있습니다.

+cmd   Causes  the  specified  cmd  to be executed each time a new file is
       examined.  For example, +G causes less to  initially  display  each
       file starting at the end rather than the beginning.

정말 긴 로그의 경우 줄 번호 매기기를 해제하는 -n 옵션을 사용하는 것이 편리합니다. 맨 페이지에서 :

-n or --line-numbers
          Suppresses line numbers.  The default (to use line numbers)  may
          cause  less  to run more slowly in some cases, especially with a
          very large input file.  Suppressing line  numbers  with  the  -n
          option  will  avoid this problem.  Using line numbers means: the
          line number will be displayed in the verbose Prompt and in the =
          command,  and the v command will pass the current line number to
          the editor (see also  the  discussion  of  LESSEDIT  in  PROMPTS
          below).

주석에서 이것을 지적하기 위해 rgmarcha 로 모자 끝.

37
Jon Ericson

테일은 훌륭합니다 ... 파일에서 더 적게 시작할 수 있습니다. Shift+F. 이것은 꼬리 역할을 덜합니다.

21
trent

LaTeX 파일을 편집하고 있으며 중간에 변경 사항이 있는지 모니터하고 싶습니다. 나에게 유용한 다음과 같은 작은 쉘 스크립트를 채웠다. 다른 사람에게도 도움이되기를 바랍니다.

#!/bin/bash
FILE="$1"
CMD="$2"
LAST=`ls -l "$FILE"`
while true; do
  sleep 1
  NEW=`ls -l "$FILE"`
  if [ "$NEW" != "$LAST" ]; then
    "$CMD" "$FILE"
    LAST="$NEW"
  fi
done

watch.sh로 저장하고 chmod u+x watch.sh를 수행하십시오. 그런 다음 다음과 같이 실행합니다.

./watch.sh file.tex pdflatex

실제 수정이 발생한 경우에만 명령을 실행하려면 `md5sum "$FILE"` 대신 `ls -l "$FILE"`를 사용할 수 있습니다.

16
oliphaunt

tailf 명령을 가장 쉽게 사용할 수 있습니다

tailf logfile.log
8
reegan vijay

커널 inotify 서브 시스템에 연결되는 inotifywatch/inotifywait를 사용할 수도 있습니다. 이 방법으로 "열기", "닫기"또는 "액세스"와 같은 것을 볼 수도 있습니다.

그러나 단순히 stdout에 추가 된 줄을 얻으려면 꼬리에 동의합니다.

6
Martin

Tail은 유닉스 도구로 어디서나 사용할 수있는 표준이며 전통적입니다. 좀 더 복잡한 도구는 multitail 이며 여러 파일을 동시에 모니터링하고 구문 강조를 수행합니다.

3
hlovdal

꼬리를 추가하는 것 외에도 파일을 검색하려면 "F"명령을 적게 사용합니다.

Tail을 사용할 때 파일이 롤오버되거나 편집으로 바뀌면 추가 인수가 필요하다는 것을 명심하십시오 (vim의 기본 모드 : w).

tail -f는 tail이 파일 디스크립터를 저장하고 따르게합니다. 파일이 교체되면 설명자가 변경됩니다. 파일 디스크립터를 따르는 것의 장점은 파일 이름이 바뀌더라도 여전히 파일을 따라야한다는 것입니다.

tail --follow =는 이름이 바뀐 파일을 정기적으로 다시 열어 이름이 바뀐 파일이 교체되었는지 확인합니다.

--retry는 로그 파일에 꼬리를 붙이고 싶지만 파일이 아직 생성되지 않은 경우 유용한 또 다른 옵션입니다.

tail -F는 --follow = --retry에 대한 바로 가기입니다.

3
deinspanjer

Tailf를 잊어라, diff는 원하는 명령이다. 다음은 두 파일 사이에서 또는 하나의 파일에서 실시간으로 (또는 가까운) 차이가 발생하는 것을 관찰하는 좋은 방법입니다.

이러한 방법을 사용하여 기록을 유지하기 위해 파일에 변경 사항을 작성하는 등 원하는 방식으로 동작을 수정할 수 있습니다. 시계 간격 또는 아래 명령에 대한 다른 옵션으로 놀아보십시오.

파일이 1 개 있으며 파일이 변경 될 때보고 싶습니다.

그래서 여기에 무엇을해야합니까?

  1. 파일을 복사

    cp file file2
    
  2. 차이점을 찾기 위해 bash 스크립트를 작성하고 file2를 업데이트하십시오.

    touch check-differences.sh
    nano check-differences.sh
    chmod 755 check-differences.sh
    
  3. 다음은 스크립트에 대한 기본 아이디어입니다. 원하는 경우 파일에 쓰십시오

    #!/bin/bash
    diff file file2
    cp file file2
    
  4. 다음으로 watch를 사용하여 화면의 차이점을 볼 수 있습니다

    watch ./check-differences
    

기본적으로 2 초마다 업데이트됩니다. 따라서 돌아가서 읽어야하는 경우 diff의 출력을 스크립트의 파일에 씁니다.

또는 출력을 볼 필요가없는 경우 cron를 사용하여 정기적으로 스크립트를 실행하십시오.

2
Mezmer

동안 tail -f somefile.txt 새 데이터로 계속 스크롤, I 때로는 선호 less +G somefile.txt 파일에서 최신 데이터 패치를 확인하십시오.

1
phantomastray