您知道它叫什么吗?
#1 楼
您是说tail -f logfile.log
吗?
(尾巴的手册页)
#2 楼
根据乔恩·斯基特(Jon Skeet)的回答,您可能是说尾巴。它允许您定期运行命令并查看全屏输出。例如:watch -n 10 -d ls -l /var/adm/messages
将每10秒运行一次
ls -l /var/adm/messages
命令,并突出显示后续运行之间的输出差异。 (例如,用于观察日志文件的增长速度。)#3 楼
如果要在每次更改文件(或目录中的任何文件)时运行命令,那么inotify-tools的inotifywait
很有用。例如:inotifywait -r -m -e modify /var/log |
while read path _ file; do
echo $path$file modified
done
评论
请注意,路径不是变量名的最佳选择。在zsh上,环境var似乎不区分大小写。对我来说,设置路径会使PATH也被设置,这基本上意味着在您修复该问题之前,将不会执行任何操作。在bash上,设置路径对PATH无效。
–Thanatos
19年6月17日在6:53
@Thanatos Zsh变量区分大小写,但是在Zsh本身设置的变量中,Zsh将* PATH变量“绑定”到同名但小写的数组。绑定变量始终由标量和数组(例如PATH和path)组成,修改其中的一个会修改另一个。一个关键功能是,数组版本会在标量版本(:)中的分隔符上自动拆分。自己打印“ $ PATH \ n $ path”。 zshparam(1)手册页中“外壳使用的参数”部分的第二段提供了更多详细信息。
–零骑士
20 Mar 10 '20在7:27
还要注意的是,Zsh使用了很多绑定的变量,而不仅仅是PATH和path。它们都在我之前的评论的部分中列出,包括但不限于:FPATH / fpath,CDPATH / cdpath,MANPATH / manpath,FIGNORE / fignore等。
–零骑士
20 Mar 10 '20 at 7:33
#4 楼
我更喜欢使用less +FG
1而不是tail -f
,因为我发现自己需要在日志文件中搜索特定的错误或ID。如果需要搜索,请键入^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).
1。给rgmarcha的提示在注释中指出。
评论
请记住为别名设置所需的选项,这样就不必每次都键入它们。
–迈克尔·汉普顿
2015年12月15日的1:48
实际上,在大多数情况下,通常应优先使用Shell函数而不是别名。
–tripleee
17-10-3在8:03
我想知道为什么+ FG而不是+ F?
–陆even
20年6月11日在15:11
#5 楼
尾巴很棒...也可以使用更少的开头来减少文件的开头,即更少的myfile然后按Shift + F。这少了作为尾巴。评论
更少的+ F myfile也可以做到
–rgmarcha
09年6月4日在16:06
#6 楼
我正在编辑LaTeX文件,并希望监视它的中间位置是否有更改。我整理了以下对我有用的小shell脚本。我希望它也对其他人有用。#!/bin/bash
FILE=""
CMD=""
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"`
。评论
查看目录及其内容,而不是单个文件:NEW =`tree -sDct。 -我'ignore_pattern | another_pattern'`
–安迪
2013年12月19日下午14:34
#7 楼
您可以使用tailf命令最简单的命令tailf logfile.log
#8 楼
您还可以使用inotifywatch / inotifywait钩入内核inotify子系统。这样,您还可以监视“打开”,“关闭”或“访问”之类的内容。但是,如果您只是想将附加行添加到stdout,则我同意尾巴。
#9 楼
尾巴是标准的,传统的,随处可见的unix工具。一个更复杂的工具是multitail,它可以同时监视多个文件并突出显示语法。#10 楼
如果除了尾部之外还希望在文件周围进行搜索,请使用“ F”命令少用。使用tail时,请记住如果文件可能会翻转或被编辑替换(vim:w的默认模式)。
tail -f将导致tail存储文件描述符并遵循它。如果文件被替换,描述符将被更改。遵循文件描述符的好处是,如果文件被重命名,您仍然会遵循它。
---olol =将通过定期重新打开命名文件的尾部来查看它是否跟踪已被替换。
-重试是另一个有用的选项,如果您想要尾部日志文件但尚未创建该文件。
tail -F是一个--follow = --retry的快捷方式。
#11 楼
忘了tailf,diff是您想要的命令。这是一个很好的技巧,可以观察2个文件之间或正在写入的一个文件之间的实时(或关闭)差异。
您可以使用这些方法以所需的任何方式修改行为,例如将更改写入文件以进行记录。在以下命令的监视间隔或其他选项中进行操作。
您有1个文件,并且要对其进行更改时要监视它:
所以这是什么要做的事情:
复制文件
cp file file2
编写bash脚本以查找差异,并更新file2
touch check-differences.sh
nano check-differences.sh
chmod 755 check-differences.sh
这是脚本的基本概念。如果需要,可以将其写入文件
#!/bin/bash
diff file file2
cp file file2
下一个可以要么使用watch
watch ./check-differences
观看屏幕上的差异,默认情况下,此间隔每2秒更新一次。因此,如果需要返回并阅读它们,然后将diff的输出写入脚本中的文件。
#12 楼
虽然tail -f somefile.txt
不断滚动显示新数据,但有时我还是更喜欢less +G somefile.txt
来查看文件中的最新数据。评论
我认为这已经涵盖了7年前的所有答案。
–卡巴斯德
16-11-25在21:47
#13 楼
我用它来执行文件更改时的某些功能:sudo apt-get install inotify-hookable
inotify-hookable -w ./my_dir_to_monitor -c "mkdir blabla"
评论
是的,这是实时的。
–亚当·吉本斯(Adam Gibbins)
09年4月30日在21:06
旁注:如果您的发行版提供了tailf命令,请优先使用tail -f。 tailf效率更高,因为如果未将其写入,则不需要访问受监视的文件(如果您在及时更新的情况下挂载了文件系统,则轮询访问会很烦人。)
– MihaiLimbăşan
09年5月2日在19:49
在超级用户处,我也找到了建议使用尾部-F而不是-f的答案
–拉法
2012-04-18 11:17
tail -F将跟随文件名而不是文件对象,这在日志文件轮换的情况下特别有用。
–阿米尔·阿里·阿克巴里(Amir Ali Akbari)
13年20月20日在7:19
几年后更新:不推荐使用tailf,并且tail -f是安全的。 (使用man tailf在系统上进行确认。)请参见文档:man7.org/linux/man-pages/man1/tailf.1.html
–exp1orer
17年8月1日在17:40