手机版

PHP实现linux命令尾f-f

时间:2021-09-17 来源:互联网 编辑:宝哥软件园 浏览:

tail命令开始从指定点将文件写入标准输出。使用tail命令的-f选项,您可以轻松检查不断变化的日志文件。tail -f文件名将在屏幕上显示文件名中的最后一个内容,不仅可以刷新它,还可以让您看到最新的文件内容。

1.命令格式;

尾部[必需参数][选定参数][文件]。

2.命令功能:

用于显示指定文件末尾的内容。如果没有指定文件,它将作为输入信息进行处理。查看常见日志文件。

3.命令参数:

-f循环读数。

-q不显示处理信息。

-v显示详细的处理信息。

由-c数字显示的字节数。

-n行显示行数。

- pid=Pid与-f组合,表示在工艺ID和pid模具后结束。

-q -q,- quiet,- silent从不输出给出文件名的头。

-s -s,- sleep-interval=S=s结合-f,意思是在每个重复的间隔睡眠S秒。

今天突然想起有人问我一个问题,关于如何通过PHP在linux中实现命令tail -f。在这里,我将分析实现。

想想还是挺简单的。通过循环检查文件,查看文件大小是否有任何变化。如果有任何更改,输出文件的更改部分。当然里面会有很多细节。下面详细分析一下。

如果初始文件太大或更改太多。

这时很多输出内容可能会难以辨认,所以我在这里设置了一个8192的阈值。当内容长度超过这个阈值时,只输出最后的8192字节,不会出现大规模刷新造成的不清晰问题。

如何检测文件大小的变化?

这个问题是这个节目的核心。是否成功取决于这一部分。

我在这里的实现如下:

打开文件句柄$fp。这里注意,这里的文件句柄在整个过程中只需要打开一次,关闭一次,所以应该放在循环之外。初始化当前文件大小文件_大小和文件_大小_新都是0。在循环中更新file_size_new的文件大小。这里需要注意的是,函数clearstatcache()和clearstatcache必须在php中获取文件大小之前运行,否则获取文件大小可能会有偏差。

计算add _ size=file _ size _ new-file _ size,看看文件大小是否有变化。如果有任何更改,将文件指针移动到指定位置,然后输出新添加的内容,并将file _ size值更新为new_file_size。usleep(50000),睡眠1/20秒。

代码实现

#!/usr/bin/env php?phpif(2!=count($argv)){fwrite(STDERR,'调用格式错误!使用格式。/tail filename '。PHP _ EOL);返回1;} $ file _ name=$ argv[1];定义(' MAX_SHOW ',8192);$ file _ size=0;$ file _ size _ new=0;$ add _ size=0;$ ignore _ size=0;$fp=fopen($file_name,' r ');while(1){ clearstatcache();$ file _ size _ new=file size($ file _ name);$ add _ size=$ file _ size _ new-$ file _ size;if($ add _ size 0){ if($ add _ size MAX _ SHOW){ $ ignore _ size=$ add _ size-MAX _ SHOW;$ add _ size=MAX _ SHOWfseek($fp,$ file _ size $ ignore _ size);} fwrite(STDUT,fread($fp,$ add _ size));$ file _ size=$ file _ size _ new} us LEEP(50000);} fc lose($ FP);代码实现了#!/usr/bin/env php告诉可执行文件,可执行文件php是在系统PATH中找到的,具有移植性好的优点。

这是结果

下面介绍如何在Linux下实现突出关键词的tail -f功能。

公司一哥们在邮件列表里贴的一个小提示很有意思,属于程序员的“怪癖技能”一类,值得记录。如果你在linux下工作,用tail -f f跟踪日志文件的输出应该是很常见的,但是有时候你更关心一些敏感词,希望在动态跟踪的同时突出这些词,比如日志中的ERROR关键字。然后,一种思路是再次打包你的尾部输出,这符合linux流水线处理的思想。以突出显示的日志中的错误为例,您可以这样做:

外壳代码

tail -f xxx.log | perl -pe的/(ERROR)/\ e[1;3100万美元1 \ e[0m/g],其中xxx.log是您要跟踪的文件。这里假设perl存在于您的Linux的路径中。perl在这里做的是通过命令行动态替换ERROR字符串。在替换过程中,主要使用Linux的console_codes的语法结构。(有关控制台代码的详细信息,您可以通过man控制台代码了解。)这里,\e主要解释转移。如果您手头有一个服务器日志,请尝试上面的命令查看是否所有ERROR都标记为红色。利用这个原理,你可以根据你需要的颜色突出你感兴趣的输出。具体的颜色描述可以在man console_codes中找到。另外,less本身支持一个类似tail -f的操作,即在用less打开一个文件后,按住SHIFT F键,就可以直接进入跟随模式。似乎和tail -f f的效果是一致的,利用这一点,想要达到突出tail -f的效果,可以分为以下3个步骤:

在lessxxx.log中搜索想要在/${key_work}中突出显示的关键词(如果当前文件中不存在也没关系)SHIFT F并进入跟随模式。

版权声明:PHP实现linux命令尾f-f是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。