题 Shell命令用于监视文件中的更改 - 它再次调用了什么?


我知道在Unix上有一个命令我可以用它来监视一个文件并查看写入它的更改。这对于检查日志文件尤其有用。

你知道它叫什么吗?


139
2018-04-30 21:00






答案:


你的意思是

tail -f logfile.log

尾页的手册页


188
2018-04-30 21:01



是的,这是实时的。 - Adam Gibbins
旁注:如果您的发行版提供了tailf命令,请优先使用tail -f。 tailf更有效,因为如果没有写入,它不需要访问被监视的文件(如果你通过atime更新挂载文件系统,则轮询访问会很烦人。) - Mihai Limbăşan
在 超级用户我找到了答案 建议 尾巴-F 代替 -F 也是 - Rafa
tail -F 将遵循文件名而不是文件对象,这在日志文件轮换的情况下尤其有用。 - Amir Ali Akbari
几年后更新: tailf 现已弃用 tail -f 是安全的。 (用你的系统确认这个 man tailf。)参见文档: man7.org/linux/man-pages/man1/tailf.1.html - exp1orer


根据Jon Skeet的回答,你可能意味着尾巴。

另一个有用的是 ;它允许您定期运行命令并查看输出全屏。例如:

观看-n 10 -d ls -l / var / adm / messages

将运行该命令 ls -l /var/adm/messages 每隔10秒,突出显示后续运行之间输出的差异。 (例如,用于观察日志文件增长的速度)。


114
2018-04-30 21:07





我更喜欢使用 less +FG1 过度 tail -f 因为我发现自己需要在日志文件中搜索特定的错误或ID。如果我需要搜索某些内容,请输入 ^C 停止关注文件和 ? 开始向后搜索。

键绑定几乎与in中相同 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).

帽子尖端 rgmarcha 在评论中指出这一点。


33
2018-04-30 23:44



记得设置一个 alias 使用您想要的选项,因此您不必每次都输入它们。 - Michael Hampton♦
实际上,在大多数情况下,您通常应该优先选择shell函数而不是别名。 - tripleee


inotifywait 从 inotify工具 如果要在每次文件(或目录中的任何文件)更改时运行命令,这将非常有用。例如:

inotifywait -r -m -e modify /var/log | 
   while read path _ file; do 
       echo $path$file modified
   done

27
2018-06-02 12:13





尾巴是伟大的...也可以少用于文件的开始,即较少的文件,然后按F.这样做的尾巴较少。


19
2018-04-30 21:04



少+ F myfile也会成功 - rgmarcha


我正在编辑一个LaTeX文件,并希望监视它,以便在中间某处进行更改。我掀起了以下对我有用的小shell脚本。我希望它也会派给其他人派上用场。

#!/bin/bash
FILE="$1"
CMD="$2"
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"`


12
2017-10-10 09:32



查看目录及其内容而不是单个文件: NEW=`tree -sDct . -I 'ignore_pattern|another_pattern'` - Andy


你可以使用 tailf  命令它是最容易的

tailf logfile.log

7
2017-10-15 13:26





你也可以使用inotifywatch / inotifywait挂钩到内核的inotify子系统。这样您还可以观看“打开”,“关闭”或“访问”等内容。

但是,如果你只是想在stdout上获得追加线,我同意尾巴。


5
2018-04-30 22:40