答案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
为了证明这一点,请尝试以下操作(假设使用 GNU Coreutils 进行 Bash):
(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
其他人提到的被解释为文件名,至少在 GNUtail
命令中是这样。)
以上适用于单个文件。多个文件的串联将无法确定地遵循所有文件,而不挂在第一个文件上。到 '猫并跟随',仅在最后一个文件之后,可以使用流程替代。这是另一个演示:
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
[我的最爱]
在使用 GNU 版本 487 的 Linux Ubuntu 18.04 上进行测试less
,如 所示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
将继续跟踪该文件log_file.log.1
,该文件现在已冻结并且不再增长,而WITH --follow-name
, less
, 将看到名称更改并自动打开并开始跟踪新log_file.log
文件。看这里。
显示-N
行号。导致在打开符号后+
立即less
运行命令。+
该F
命令使其不断读取并加载(即:“跟随”)文件末尾,这对于查看不断增长的日志文件的增长特别有用。打开时按F
(即:Shift+ F)与按+相同。less
CtrlEnd
less
要在运行时中断并停止这种持续加载效果,请按Ctrl+ C。现在您可以像平常一样使用less
,上下滚动以根据需要查看数据。然后q像平常一样按退出。或者,您可以通过键入F
( Shift+ )继续关注该文件F。
注意:要仅打开less
并跳转到文件末尾,但不连续加载(“跟随”)添加的新内容,请使用命令G
( Shift+ Gin less
if less
is already running) 而不是F
( Shift+ Fif less
is already running ):
less -N +G path/to/some/growing/log_file.log
与tail -f
[BusyBox 上的最佳选项]
请注意,如果tail
在常规 Linux 机器上使用,不是具有 BusyBox 实现的嵌入式 Linux 计算机tail
,您可以使用tail
's--follow=name
选项执行与上述less
's选项相同的操作。--follow-name
以下是用BusyBox v1.31.1测试的,如图所示busybox --help
。
该less +F
选项在运行 busybox 的嵌入式 Linux 系统上不可用,因此对于这些系统,请改用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