tail -f 和 -F 的用法
2010-08-16 16:03:18
-f 是--follow[=HOW]的缩写, 可以一直读文件末尾的字符并打印出来. "[=HOW]"有两个写法,一个"=descriptor",另一个是"=name", 默认使用的是"descriptor", 如果你跟踪的文件被移动或者改名后, 你还想继续tail它, 你可以使用这个选项. 举个例子: 首先启动下面进程 while [ "true" ] ; do date >> test.log; sleep 1 ; done; 然后在开一个新的进程,我是新开了一个终端, 起名叫 bash-2 tail -f test.log 你会看到屏幕不断有内容被打印出来. 这时候中断第一个进程Ctrl-C, mv test.log test.log1; while [ "true" ] ; do date >> test.log1; sleep 1 ; done; 继续观察bash-2, 发现屏幕在输出test.log2的内容. descriptor 虽然是默认的参数,但是一定是最有用的,比如在tail 一个log文件的时候,这个文件很可能是按照日期或者大小滚动, 文件滚动之后这个tail -f命令,就失效了. 我在之前写的一个脚本里面就遇到了这个问题, 这个时候可以使用-F 命令 -F 是--follow=name --retry的缩写, --follow=name是按照文件名跟踪文件, 可以定期去重新打开文件检查文件是否被其它程序删除并重新建立. --retry这个参数, 保证文件重新建立后,可以继续被跟踪. 还是上面的例子, 在bash-1中输入, while [ "true" ] ; do date >> test.log; sleep 1 ; done; bash-2中, tail -F test.log bash-3中, rm test.log; 然后看bash-2, 屏幕上依然在继续输出test.log的内容. 如果是在使用-f 时候,那bash-2应该就停止显示log了.