如何减少文件名而不是索引节点号?

如何减少文件名而不是索引节点号?

我有一个软件,可以在重新启动时轮换其日志文件。然而,在开发过程中,我经常重新启动它,所以我想随时监控最新的日志文件。

如果我less正常启动less program.log并按Shift+f到尾部,则当日志文件轮换时,我将继续监视旧日志文件。我认为这是因为索引节点号保持不变并且less有一个指向该索引节点的打开文件句柄。

是否可以监视当前调用的任何日志文件的最新活动program.log

具体来说,我正在开发 Sun 操作系统,因此适用于 Sun 操作系统的解决方案将是理想的选择。

答案1

less --follow-name如果您的版本less支持,请使用它。
该选项是在版本 416 中引入的。

Shift+F然后在 内执行正常的跟随命令less

答案2

less选项--follow-name只是解决方案的一部分;
要替换tail -F,需要另一个参数:

less --follow-name +F file.log

单独的选项less --follow-name file.log实际上并不会在文件更新后开始。您需要按 进入跟随模式ShiftF
(退出导航模式ControlC。)

而不是遵循文件,--follow-name 改变行为的更少。它使 follow内部的
命令键基于文件名,而不是文件描述符。 ShiftFless

此外,没有以less跟随模式启动的正常选项。
但你可以使用命令行给出执行的按键启动后,通过在它们前面加上前缀+.
将修饰符选项与 , 结合使用+Fless实际上会以(修改后的)跟随模式启动。

单独使用+F相当于 plain tail -f

less +F file.log

答案3

我刚刚在 U&L Q&A 中找到了答案,标题为:如何进行tail -f日志轮换文件?

使用tail

(如果可以选择在您的系统上安装 GNU tail)

tail -F program.log

来自尾部手册页:

   -f,      --follow[={name|descriptor}]
            output appended data as the file grows; -f, 
            --follow, and --follow=descriptor are equivalent

   -F       same as --follow=name --retry

   --retry  keep  trying  to  open  a  file even when it is or becomes
            inaccessible; useful when following by name, i.e., with
            --follow=name

关键是--retry开关。这告诉tail命令继续重试按名称跟踪文件。该-F开关同时执行 a-f和 a操作--retry

使用less

正如@StephaneChazela 在评论中指出的那样,以下内容将不起作用。

tail -F program.log | less

您唯一的其他选择是直接使用 less ,假设它直接支持--follow-name开关和less文件,tail完全放弃使用。

less --follow-name program.log

相关内容