파일을 순차적으로 다운로드 중입니다 wget
.
unpacking을 사용하기 시작하면 cat myfile.tar.bz2 | tar -xj
, 어느 쪽이 더 빠른지에 따라 올바르게 압축이 풀릴 수도 있고 "예기치 않은 EOF"로 인해 실패할 수도 있습니다.
파일을 "cat and follow"하는 방법, 즉 파일 내용을 stdout으로 출력하지만 EOF에서 종료하지 않고 파일 구독을 유지하고 데이터의 새 부분을 계속 출력하고 파일이 닫힐 때만 작성기를 종료하는 방법 N초 후에도 다시 열리지 않았습니다.
스크립트를 만들었어요고양이와 팔로우@arielCo 기반답변tail
또한 파일이 더 이상 쓰기 위해 열려 있지 않으면 종료됩니다.
답변1
tail +1f file
wget
LibreOffice 소스 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 file
Busybox와 함께 사용) 에서도 작동합니다.
답변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.log
log_file.log.1
예를 들어 , 이는 로깅을 시작하기 위해 새 로그 파일로 회전할 때 회전 로그 시스템이 파일 이름을 바꾸는 경우에도 라는 파일을 추적하는 데 유용합니다 . WITHOUT --follow_name
은 이제 동결되어 더 이상 커지지 않는 less
파일을 계속 추적하는 반면, WITH , 는 이름 변경을 확인하고 자동으로 새 파일을 열고 추적을 시작합니다.log_file.log.1
--follow-name
less
log_file.log
이봐.
줄 번호를 표시합니다 -N
. 기호를 연 후 +
즉시 명령이 실행되도록 합니다 less
. +
이 F
명령을 사용하면 파일 끝을 지속적으로 읽고 로드(예: "follow")할 수 있으며, 이는 증가하는 로그 파일의 증가를 확인하는 데 특히 유용합니다. 켜져 있는 동안 F
(예: Shift+ ) 를 누르는 F것은 +를 누르는 것과 같습니다.less
CtrlEnd
less
실행 중에 이 연속 로딩 효과를 중단하고 중지하려면 Ctrl+를 누르세요 C. 이제 정상적으로 사용할 수 있으며 less
필요에 따라 위아래로 스크롤하여 데이터를 볼 수 있습니다. 그런 다음 q정상적으로 종료를 누르십시오. 또는 F
( + ) 를 입력하여 Shift파일을 계속 따라갈 수 있습니다 F.
참고: less
파일 끝으로만 이동하고 추가된 새 콘텐츠를 계속 로드("따르기")하지 않으려면 G
( Shift+ if is 이미 실행 중임) 대신 ( + Gin if is 이미 실행 중임) 명령을 사용하십시오.less
less
F
ShiftFless
less -N +G path/to/some/growing/log_file.log
[ tail -f
BusyBox에 대한 최상의 옵션]
tail
일반 Linux 시스템에서 사용하는 경우아니요BusyBox 구현이 포함된 임베디드 Linux 시스템에서는 위의 옵션과 동일한 작업을 수행하기 위해 ' 옵션을 tail
사용할 수 있습니다 .tail
--follow=name
less
--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'
인용하다
- 나는
less +F
이것을 처음 배웠습니다."less"를 켜고 끝까지 스크롤하십시오. - 나는
less +G
이것을 처음 배웠습니다."less"를 켜고 끝까지 스크롤하십시오. - less 옵션에 대해 어디서 배웠나요
--follow-name
?https://unix.stackexchange.com/a/196349/114401