기능과 같은 "업데이트 파일"이 적음


9

로 5 분마다 덮어 쓰는 파일을보고 싶습니다 less. less이전 파일 디스크립터를 계속 표시하지 않고 새 파일 디스크립터를 따르 려면 어떻게 해야합니까? watch "cat file"파일이 너무 길어서 하나의 터미널 창에 맞지 ​​않기 때문에 그렇게하지 않습니다.


2
"팔로우"는 파일 끝을 따르는 것을 의미합니다. 파일을 덮어 쓰고 다시 여는 데 관심이 있음을 분명히 할 수 있습니다.
chutz

나는 tail -fman 페이지에 정의되어있는 파일 설명자를 따르는 것을 의미했습니다 . 그럼에도 불구하고 나는 나의 질문을 명확히했다.
d135-1r43

다음을 less --follow-name참조하십시오 unix.stackexchange.com/a/74287/112522
djsutho

답변:


10

에서 파일을 보면서 F명령 ( Shift+F)을 실행하여이 효과를 얻을 수 있습니다 less. 팔로우를 중단하고 페이징으로 다시 전환하려면Ctrl+C

파일은 5 분마다 만 변경되므로 tail -f, 더 긴 절전 시간을 사용 하고 지정할 수도 있습니다 -s(기본값은 1 초). 예를 들어

tail -f -s 60 myfile

myfile60 초마다 출력을 확인 합니다.

편집 : 잘못된 질문으로 인해 위의 답변이 만족스럽지 않았습니다. 두 번째 시도는 다음과 같습니다.

less5 분마다 같은 파일을 다시 열려면 다음을 시도하십시오.

while true; do ( sh -c 'sleep 600 && kill $PPID' & less myfile ); done

이것은 5 분 후에 부모 프로세스를 강제 종료하도록 지시 한 다른 쉘 프로세스를 배경으로하는 서브 쉘을 생성합니다. 그런 다음로 파일을 엽니 다 less. 백그라운드 쉘 명령이 상위 서브 쉘을 종료하면 "less"명령을 포함하여 모든 하위 쉘이 종료됩니다. 그런 다음 루프는 프로세스를 다시 시작합니다.

내가 이것을 아는 유일한 방법은 원래 쉘이있는 터미널을 죽이는 것이다. 만약 그것이 받아 들일 수 없다면, "killfile"트릭을 사용할 수있다 :

touch killfile
while [ -f killfile]; do stuff; done

일을 중지하려면 stuff, rm다른 쉘에서 killfile을.


이것은 내 경우에만 부분적으로 유용합니다. 감시 된 파일은 맨 위에 업데이트 된 정보가 매우 큽니다. "스크롤"로그 파일이 아닙니다. Shift + F는 즉시 파일 끝으로 스크롤됩니다.
d135-1r43

명확히하려면 질문을 편집해야합니다. 나는 이것에 대한 답변을 편집했다.
bonsaiviking

watch -n 1 less <filename>
axel22

1

에서 비슷한 것을 할 수 있습니다 vim.

서버 세션을 시작하십시오 vim.

vim -R --servername refresh_session

그런 다음 다른 콘솔에서 파일의 업데이트를 모니터링하고 파일이 업데이트되는 즉시 vim 세션에 파일을 다시로드하도록 지시합니다.

inotifywait -e close_write -m your_log_file | while read filename events; do
    vim --servername refresh_session --remote $filename
done

몇 가지 문제가 있습니다.

  • 이 기능으로 vim컴파일되지 않은 경우 물론 작동 하지 않습니다 clientserver.
  • inoifywait파일이 삭제되면 작동이 중지됩니다. 파일이 덮어 쓰기를 바랍니다. 물론 그 문제를 해결할 수도 있습니다.

보다 less비슷한 경험 을 원한다면 less매크로를 사용 하여 less키 바인딩 을 가져올 수 있습니다 vim.

/usr/share/vim/vim73/macros/less.sh --servername refresh_session

0

나는 프로그램 ( "pager")과 같이 오래되었지만 매우 "적은"것을 발견했다. 파일을 새로 고치는 "R"명령이 있습니다.

"lv" 라는 이름으로 다음을 사용하여 Ubuntu에 설치할 수 있습니다.

sudo apt install lv

그러나 자동 새로 고침 기능이없는 것 같습니다.


-1

다음 명령을 시도해보십시오 : tail -f file


-1

꼬리는 당신의 친구입니다. "tail -f filename"은 새로운 줄이 나타날 때 나타납니다.

또는 파일 중간에서 변경된 사항을 찾고 있다면 몇 분마다 스크립트를 실행하여 파일을 임시 위치에 복사하고 diff를 수행하십시오.


원래 게시물에서도 "새 파일"이 있다는 것이 분명했습니다. 따라서 파일 디스크립터는 변경되었지만 tail -f여전히 이전 디스크립터를 읽습니다.
Alastair Irvine

나는 그것이 공평하다고 생각하지 않습니다. 명확하게하기 위해, 우리는 편집되지 않은 원본 게시물을 살펴볼 필요가 있습니다. 왜냐하면 당신이 나의 답변 날짜를 보면 그것은 내가 대답했던 질문이기 때문입니다. 편집되지 않은 질문에서 내 대답은 완벽하게 이해됩니다. serverfault.com/posts/445899/revisions
David W

개정판을 확인했습니다. 키워드 "새 파일".
Alastair Irvine
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.