파일의 변경 사항을 모니터링하는 셸 명령-다시 호출이란 무엇입니까?


159

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

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

답변:


213

당신은 의미합니까

tail -f logfile.log

?

( 꼬리 설명서 페이지 )


6
예, 실시간입니다.
Adam Gibbins

18
참고 : 배포에서 tailf 명령을 제공하는 경우 tail -f보다 우선적으로 사용하십시오. tailf는 기록되지 않은 경우 감시 된 파일에 액세스 할 필요가 없기 때문에보다 효율적입니다 (한 번 업데이트하여 파일 시스템을 마운트하면 폴 액세스가 성가시다).
Mihai Limbăşan

10
에서 슈퍼 유저 내가 대답을 발견 추천 꼬리 -F 대신 -f를
라파

17
tail -F파일 개체가 아닌 파일 이름을 따르므로 로그 파일 회전의 경우 특히 유용합니다.
Amir Ali Akbari

2
몇 년 후 업데이트 : tailf이제 더 이상 사용되지 않으며 tail -f안전합니다. (시스템에서이를 확인 man tailf하십시오.) 설명서를 참조하십시오 : man7.org/linux/man-pages/man1/tailf.1.html
exp1orer

124

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

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

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

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


38

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

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

그냥 참고 path변수 이름에 대한 가장 큰 선택이 아니다. 에 zsh환경 변수는 대소 문자를 구분하지 않는 것 같습니다. 나에게는 설정 path원인 PATH도 설정되며, 기본적으로 문제를 해결할 때까지 아무것도 실행되지 않습니다. On bash으로 설정 path하면 영향을 미치지 않습니다 PATH.
Thanatos

36

특정 오류 또는 ID에 대한 로그 파일을 검색해야하기 때문에 less +FG1 이상을 선호합니다 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에 대한 모자 팁 .


alias원하는 옵션 으로 설정해야합니다 . 매번 입력하지 않아도됩니다.
Michael Hampton

실제로 대부분의 경우 별칭보다 셸 함수를 선호해야합니다.
tripleee 08

21

꼬리가 중대하다 ... 이하도 덜 파일에 즉 덜 myfile을 누릅니다 시작 사용할 수있는 Shift+를 F. 이것은 꼬리 역할을 덜합니다.


5
less + F myfile도 그것을 만들 것입니다
rgmarcha

16

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"`.


1
단일 파일 대신 디렉토리와 내용을 보려면 :NEW=`tree -sDct . -I 'ignore_pattern|another_pattern'`
Andy


6

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

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


3

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


3

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

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

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

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

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

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


2

tailf를 잊어라, diff는 원하는 명령이다. 다음은 두 파일 사이에서 또는 한 파일에 쓰여지는 파일 사이의 차이를 실시간으로 확인하는 좋은 방법입니다.

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

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

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

  1. 파일을 복사

cp file file2

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

touch check-differences.sh

nano check-differences.sh

chmod 755 check-differences.sh

  1. 다음은 스크립트에 대한 기본 아이디어입니다. 원하는 경우 파일에 쓰십시오

#!/bin/bash

diff file file2

cp file file2

  1. 다음으로 watch를 사용하여 화면의 차이점을 볼 수 있습니다

watch ./check-differences

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

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


1

하지만 tail -f somefile.txt새로운 데이터로 계속 스크롤, 나는 때때로 선호하는 less +G somefile.txt파일의 최신 데이터의 패치를보고뿐만 아니라.


4
나는 그것이 7 년 전부터이 답변에 모두 포함되어 있다고 생각합니다 .
kasperd
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.