繁体   English   中英

unix 中的 tail -f 和 tailf 有什么区别?

What is difference between tail -f and tailf in unix?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我尝试显示文本文件的尾部。 如果文件很小,则没有区别。 但是,如果文件太大(~5 gB), tailf不会响应。 另一方面, tail -f工作正常。 它们之间有什么区别?

2 个回复

我遇到了同样的问题。 日志文件大约为 47GB。 tailf只是等待几乎无限。 但是tail -f在几秒钟内开始打印输出。

我通过使用strace命令检查底层系统调用进行了更深入的strace 给出的结果如下:

# strace tailf /var/log/messages

(truncated)
stat("/var/log/messages", {st_mode=S_IFREG|0600, st_size=47432599401, ...}) = 0
open("/var/log/messages", O_RDONLY)     = 3
fstat(3, {st_mode=S_IFREG|0600, st_size=47432600425, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f7dba2d1000
read(3, "Nov  1 03:23:01 hostnameXXXX"..., 4096) = 4096
read(3, "0.31.148.12)\nNov  1 03:54:33 del"..., 4096) = 4096
read(3, "io.c(600) [receiver=3.0.6]\nNov  "..., 4096) = 4096
(truncated)

如您所见, tailf试图在生成输出到屏幕之前从头开始读取(缓冲)所有行。

检查下面的tail -f的输出,这里是使用系统调用lseek (C/C++)直接跳转到文件末尾并从那里开始读取:

# strace tail -f /var/log/messages

(truncated)
open("/var/log/messages", O_RDONLY)     = 3
fstat(3, {st_mode=S_IFREG|0600, st_size=47294167448, ...}) = 0
lseek(3, 0, SEEK_CUR)                   = 0
lseek(3, 0, SEEK_END)                   = 47294170917
lseek(3, 47294169088, SEEK_SET)         = 47294169088
(truncated)

从手册页:

   tailf  will print out the last 10 lines of a file and then wait for the
   file to grow.  It is similar to tail -f but does not  access  the  file
   when  it  is not growing.  This has the side effect of not updating the
   access time for the file, so a filesystem flush does not occur periodi-
   cally when no log activity is happening.

http://linuxcommand.org/man_pages/tailf1.html

如果它不直接访问文件,它会在处理非常大的文件时遇到一些困难,具体取决于您的机器设置。

1 UNIX中的日期+%F和日期'+%F'有什么区别[关闭]

我想知道UNIX中的日期+%F和日期'+%F'之间的区别。 两者的结果相同。 当我在shell程序中使用后一个时,我没有得到预期的输出,而第一个时,我却得到了预期的输出。 例如: 问题是当我在for循环内使用它时 错误:第7行:寻找匹配的“”时出现意外的EOF第10行:语法 ...

2 尾调用和尾递归有什么区别?

我知道尾递归是一种特殊情况,其中函数对自身进行尾调用。 但我不明白尾调用和尾递归有何不同。 在实现 TCO(尾调用优化)的“适当尾递归”语言中,如 Scheme,这意味着尾调用和尾递归不消耗堆栈或其他资源。 在编译器无法优化尾递归的语言中,程序可能会耗尽堆栈并崩溃。 我认为,在“适当的尾递归”语言中 ...

3 f和F有什么区别

在以下代码中,const使用两种不同的方式定义。 F和f之间有什么区别吗? 修订版1:如果两者相同,为什么允许两种情况? ...

2010-05-30 12:38:27 2 2068   c#/ .net
4 F [A]和A有什么区别?

对于像Scala和Haskell这样的语言,您可以使用类型构造函数构造类型。 区分所有这些部分的正确词汇是什么? A是一种类型。 F[A]也是一种类型。 是否存在区分两者的语言? 什么是A ? 什么是F[A] ? 什么是F ? ...

5 从管道读取值时,c和bash中的tail -f和cat有什么区别

我正在学习c程序。 而且我有一个如下所示的程序。 在testpipe.c中 我使用以下命令在bash中创建了一个管道 然后执行 该程序将运行并写入管道/ tmp / test 现在在另一个终端 如果我输入 我没有找到任何结果 但是我试着做 能够连续得到结果结果 两者之间有 ...

2020-08-01 19:55:30 0 96   c/ bash
6 (Unix)尾巴-f到节日

我正在尝试将文件末尾的流(通过tail -f)发送到Festival,这是一个文本到语音程序。 tail -f ./文件名| 节--tts为此很好。 这是我的问题:我想更改从tail -f发出的流,以便音乐节可以更好地对其进行合成,并避免在整个时间戳记中使用它。 我知道sed和gre ...

8 尾递归和Seq库之间的F#性能差异

我在F#中有这个代码,它找到了最小的正数,它可以被1到20之间的所有数字整除。它需要10秒才能完成。 所以,我认为我可以使它更优雅,因为我更喜欢更少的代码并写下以下内容。 花了10分钟! 我无法解释巨大的差异,因为序列是懒惰的。 为了调查,我写了一个命令式循环。 花了 ...

9 unix中的“$ a”和$ a有什么区别[重复]

这个问题在这里已有答案: 何时在shell变量周围包装引号? 5个答案 例如: 上面提到的脚本给出了三角形的答案,而没有双引号,它在diff行上一个接一个地落下。 ...

10 F#:[0;有什么区别? 1; 2; 3; 4; 5]和[0,1,2,3,4,5]?

我知道如何制作清单: 我正在进行在线练习,如果n = 5 ,则涉及打印如下所示的内容。 代替 从Web上查看,逗号分隔的输出似乎是转换为字符串的列表。 所以,我的问题是[0, 1, 2, 3, 4, 5]代表什么,以及实际发生了什么,从用分号分隔的列表转换为用逗号分 ...

2016-10-27 16:12:23 1 103   list/ f#
暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM