파일을 "찾고 추적"하는 방법은 무엇입니까?

파일을 "찾고 추적"하는 방법은 무엇입니까?

파일을 순차적으로 다운로드 중입니다 wget.

unpacking을 사용하기 시작하면 cat myfile.tar.bz2 | tar -xj, 어느 쪽이 더 빠른지에 따라 올바르게 압축이 풀릴 수도 있고 "예기치 않은 EOF"로 인해 실패할 수도 있습니다.

파일을 "cat and follow"하는 방법, 즉 파일 내용을 stdout으로 출력하지만 EOF에서 종료하지 않고 파일 구독을 유지하고 데이터의 새 부분을 계속 출력하고 파일이 닫힐 때만 작성기를 종료하는 방법 N초 후에도 다시 열리지 않았습니다.


스크립트를 만들었어요고양이와 팔로우@arielCo 기반답변tail또한 파일이 더 이상 쓰기 위해 열려 있지 않으면 종료됩니다.

답변1

tail +1f file

wgetLibreOffice 소스 tarball을 다운로드할 때 Ubuntu에서 테스트했습니다.

tail +1f libreoffice-4.2.5.2.tar.xz | tar -tvJf -

또한 Android 휴대폰의 Solaris 10, RHEL3, AIX 5 및 Busybox 1.22.1( tail +1 -f fileBusybox와 함께 사용) 에서도 작동합니다.

답변2

문제는 cat파일이 아직 첨부되고 있다는 사실을 모르는 것입니다. 파일의 (현재) 끝을 발견 하면 cat종료됩니다 .

wget이를 방지하려면 파이프(또는 FIFO)에 써야 합니다.

wget -O - http://... | tar -xjf -

답변3

도착하다읽고 따라하기시작부터 중단까지의 파일:

tail -fn +1 file

이를 시연하려면 다음을 시도해 보십시오(Bash용 GNU Coreutils 가정).

(while true; do printf . >> /tmp/file; sleep 1; done)&
tail -fn +1 /tmp/file  # (Ctrl-C to interrupt, of course, or otherwise kill it.)
kill %  # Kills the while-loop.

(참고: +1f다른 사람들이 언급한 내용은 적어도 GNU tail명령에서는 파일 이름으로 해석됩니다.)

위의 내용은 단일 파일에 적용됩니다. 여러 파일을 연결하면 첫 번째 파일에 매달리지 않고는 모든 파일을 결정적으로 따르지 않습니다. 도착하다'고양이와 팔로우', 마지막 파일 이후에만 사용할 수 있습니다.프로세스 교체. 또 다른 데모는 다음과 같습니다.

printf file1 > /tmp/file1; printf file2 > /tmp/file2
(while true; do printf . | tee -a /tmp/file{1,2} > /dev/null; sleep 1; done)&
cat /tmp/file1 <(tail -fn +1 /tmp/file2)  # (Interrupt or kill it.)
kill %  # Kills the while-loop.

답변4

그리고 less +F[내가 제일 좋아하는]

less표시된 대로 GNU 버전 487을 사용하여 Linux Ubuntu 18.04에서 테스트되었습니다 less --version.

다음을 사용할 수도 있습니다 less.

less -N +F path/to/some/growing/log_file.log

팔로우하고 싶을 수도 있습니다이름다음 옵션을 추가하여 파일 설명자를 바꿉니다 --follow-name.

# [My favorite command overall]
less -N --follow-name +F path/to/some/growing/log_file.log

log_file.loglog_file.log.1예를 들어 , 이는 로깅을 시작하기 위해 새 로그 파일로 회전할 때 회전 로그 시스템이 파일 이름을 바꾸는 경우에도 라는 파일을 추적하는 데 유용합니다 . WITHOUT --follow_name은 이제 동결되어 더 이상 커지지 않는 less파일을 계속 추적하는 반면, WITH , 는 이름 변경을 확인하고 자동으로 새 파일을 열고 추적을 시작합니다.log_file.log.1--follow-namelesslog_file.log이봐.

줄 번호를 표시합니다 -N. 기호를 연 후 +즉시 명령이 실행되도록 합니다 less. +F명령을 사용하면 파일 끝을 지속적으로 읽고 로드(예: "follow")할 수 있으며, 이는 증가하는 로그 파일의 증가를 확인하는 데 특히 유용합니다. 켜져 있는 동안 F(예: Shift+ ) 를 누르는 F것은 +를 누르는 것과 같습니다.lessCtrlEnd

less실행 중에 이 연속 로딩 효과를 중단하고 중지하려면 Ctrl+를 누르세요 C. 이제 정상적으로 사용할 수 있으며 less필요에 따라 위아래로 스크롤하여 데이터를 볼 수 있습니다. 그런 다음 q정상적으로 종료를 누르십시오. 또는 F( + ) 를 입력하여 Shift파일을 계속 따라갈 수 있습니다 F.

참고: less파일 끝으로만 이동하고 추가된 새 콘텐츠를 계속 로드("따르기")하지 않으려면 G( Shift+ if is 이미 실행 중임) 대신 ( + Gin if is 이미 실행 중임) 명령을 사용하십시오.lesslessFShiftFless

less -N +G path/to/some/growing/log_file.log

[ tail -fBusyBox에 대한 최상의 옵션]

tail일반 Linux 시스템에서 사용하는 경우아니요BusyBox 구현이 포함된 임베디드 Linux 시스템에서는 위의 옵션과 동일한 작업을 수행하기 위해 ' 옵션을 tail사용할 수 있습니다 .tail--follow=nameless--follow-name

다음은 그림과 같이 BusyBox v1.31.1을 사용하여 테스트되었습니다 busybox --help.

busybox를 실행하는 임베디드 Linux 시스템에서는 이 less +F옵션을 사용할 수 없으므로 이러한 시스템의 경우 다음을 사용하십시오 tail -f.

# Just show new contents as they come into the file
tail -f path/to/some/growing/log_file.log

# Also print the entire file first, starting at the first line (`+1`), before
# following and loading new contents continually
tail +1 -f path/to/some/growing/log_file.log

그다지 편리하지는 않지만 less여전히 잘 작동합니다. Ctrl+를 누르면 C출력이 종료됩니다. 그런 다음 출력을 "일시 중지"하고 더 자세히 살펴봐야 하는 경우 터미널에서 위로 스크롤하여 이전 줄을 볼 수 있습니다. 파일 보기를 "계속"하려면 Up Arrow키를 이전 명령을 호출하면 tail -f동일한 명령을 쉽게 다시 실행할 수 있습니다.

BusyBox의 다른 유용한 옵션 -s SECONDS-F. 전임자:

# only check and load new contents at the end of the file every 2 seconds
tail -f -s 2 path/to/some/growing/log_file.log

전체 도움말 메뉴는 다음과 같습니다.

# tail --help
BusyBox v1.31.1 (2021-11-20 02:33:23 UTC) multi-call binary.

Usage: tail [OPTIONS] [FILE]...

Print last 10 lines of each FILE (or stdin) to stdout.
With more than one FILE, precede each with a filename header.

    -f      Print data as file grows
    -c [+]N[kbm]    Print last N bytes
    -n N[kbm]   Print last N lines
    -n +N[kbm]  Start on Nth line and print the rest
    -q      Never print headers
    -s SECONDS  Wait SECONDS between reads with -f
    -v      Always print headers
    -F      Same as -f, but keep retrying

N may be suffixed by k (x1024), b (x512), or m (x1024^2).

watch[BusyBox에서도 작동]을 사용하세요 .

이것은 또 다른 옵션입니다. 이것은 BusyBox에서도 잘 작동합니다.

# Continually view the last 20 messages of the log file every 1 second
watch -n 1 'tail -n 20 path/to/some/growing/log_file.log'

인용하다

  1. 나는 less +F이것을 처음 배웠습니다."less"를 켜고 끝까지 스크롤하십시오.
  2. 나는 less +G이것을 처음 배웠습니다."less"를 켜고 끝까지 스크롤하십시오.
  3. less 옵션에 대해 어디서 배웠나요 --follow-name?https://unix.stackexchange.com/a/196349/114401

관련 정보