在Linux中,使用该命令tailf,如何拖动文件夹和子文件夹中的多个日志文件?
我试图找到一个在远程主机上拖尾文件的好方法.这是在Linux机器的内部网络上.要求是:
必须表现良好(没有额外的过程,或继续输出)
不能要求某人的宠物Perl模块.
可以通过Perl调用.
如果可能,在远程计算机上不需要自定义构建的脚本或实用程序(常规的linux实用程序很好)
我尝试过的解决方案通常都属于这种类型
ssh remotemachine -f <some command>
Run Code Online (Sandbox Code Playgroud)
"一些命令"已经:
tail -f logfile
Run Code Online (Sandbox Code Playgroud)
基本尾部不起作用,因为远程进程在本地ssh进程终止后继续将输出写入终端.
$socket = IO:Socket::INET->new(...);
$pid = fork();
if(!$pid)
{
exec("ssh $host -f '<script which connects to socket and writes>'");
exit;
}
$client = $socket->accept;
while(<$client>)
{
print $_;
}
Run Code Online (Sandbox Code Playgroud)
这样做效果更好,因为在本地进程退出后没有输出到屏幕但远程进程没有发现它的套接字已关闭并且它无限期地存在.
如何tail在Bash shell下使用最后一个非空行?
例如,my_file.txt看起来像这样:
你好
hola
bonjour
(空行)
(空行)
显然,如果我这样做,tail -n 1 my_file.txt我会得到一个空行.就我而言,我想得到bonjour.我怎么做?
我想显示我的日志文件的最后10行,从最后一行开始 - 就像普通的日志阅读器一样.我认为这将是tail命令的变体,但我无法在任何地方找到它.
我有以下内容.
tail -f成功消息的命令检查日志文件.即使我在代码中有0出口,我也无法结束这个tail -f过程.
哪个不让我的脚本完成.在Bash中有没有其他方法可以做到这一点?
代码如下所示.
function startServer() {
touch logfile
startJavaprocess > logfile &
tail -f logfile | while read line
do
if echo $line | grep -q 'Started'; then
echo 'Server Started'
exit 0
fi
done
}
Run Code Online (Sandbox Code Playgroud) 使用典型的Apache访问日志,您可以运行:
tail -f access_log | grep "127.0.0.1"
Run Code Online (Sandbox Code Playgroud)
这只会显示指定IP地址的日志(因为它们已创建).
但是,为什么grep在第二次管道时会失败,以进一步限制结果?
例如,".css"的简单排除:
tail -f access_log | grep "127.0.0.1" | grep -v ".css"
Run Code Online (Sandbox Code Playgroud)
不会显示任何输出.
对于某些关键字的出现,观察不断增长的文件尾端的pythonic方法是什么?
在shell中我可能会说:
tail -f "$file" | grep "$string" | while read hit; do
#stuff
done
Run Code Online (Sandbox Code Playgroud) 我有一个日志文件trace.log.在这里面,我需要到grep为包含在字符串中的内容<tag>和</tag>.这对字符串有多组,我只需要在最后一组(换句话说,来自tail日志文件)之间返回内容.
额外信用:只有当内容包含"testString"时,我才能返回两个字符串中包含的内容?
谢谢你的期待.
编辑:搜索参数和包含在不同的行上,大约有100行内容将它们分开.内容就是我追求的......
我想在文件上做一个尾部-F,直到匹配一个模式.我找到了一种使用awk的方法,但恕我直言,我的命令并不是很干净.问题是我需要在一行中完成,因为有一些限制.
tail -n +0 -F /tmp/foo | \
awk -W interactive '{if ($1 == "EOF") exit; print} END {system("echo EOF >> /tmp/foo")}'
Run Code Online (Sandbox Code Playgroud)
尾部将阻塞,直到EOF出现在文件中.它工作得很好.END块是强制性的,因为awk的"退出"不会立即退出.在退出之前使awk评估END块.END块在读取调用时挂起(因为尾部),所以我需要做的最后一件事就是在文件中写入另一行来强制尾部退出.
有人知道更好的方法吗?