尾巴 – 没有尾巴?

Solaris中是否有读取文件的命令,以及尾随尾巴的方式? 我需要从头阅读文件,它是一个二进制文件。

有关Solaris和Linux的信息,将不胜感激。

tail -9999f将做一些你想要的东西。 如果您的文件较大,请添加更多9s。

问题:

  1. 二进制文件不能有换行符。 tail -f会在打印任何东西之前等待换行符。
  2. Solaris上的tail版本(您没有提及哪个 Solaris,但可能并不重要),可能不支持该选项。 它可能支持tail -n 9999 -f 。 您可能需要获取GNU版本的尾部。
  3. 由于文件不断增长,在查找文件有多大以及启动尾部处理之间存在竞争状态。 如果您不要求获取足够的行数,则可能会错过文件的开头。
  4. tail不知道什么时候你真的写完文件,所以你的gzip过程永远不会结束。 我不确定当ctrl-c结束tail进程时会发生什么情况,但很可能gzip会自行清理并删除正在处理的文件。

我的build议是开始你的原始程序,并输出到gzip像这样:

 ./my_program | gunzip > new_file.txt 

这样,如果my_program变慢,gunzip会等待,但是当my_program结束时指示文件的真正结束时,gunzip仍然会结束。

您可能需要重写程序以写入STDOUT,而不是直接写入文件。

编辑:

查看手册页后 ,可以解决上述三个问题。 使用-c <bytes>选项而不是-n <lines>减轻问题1.使用-n +0-c +0减轻问题3.使用--pid=<PID>将使原始程序以<PID>运行)终止,从而缓解问题4。

在linux中,你可以使用tail -f -n +0 /path/filename来查看它。 而-n通常是指文件末尾要打印的行数,当传递+<n>它从文件开头的第n行开始。

tail --help

 -n, --lines=K output the last K lines, instead of the last 10; or use -n +K to output lines starting with the Kth