我有一个软件可以在它重新启动时轮换它的日志文件。但是,在开发过程中,我经常重启,所以我想随时监控最新的日志文件。
如果我less正常启动less program.log并按Shift+f到尾部,当日志文件轮换时,我继续监视旧日志文件。我认为这是因为 inode 编号保持不变并且less具有该 inode 的打开文件句柄。
是否可以监视当前调用的任何日志文件的最新活动program.log?
具体来说,我在 Sun OS 上工作,所以在那里工作的解决方案将是理想的。
我需要在跟踪新更改之前显示整个文件,而不仅仅是最后 10 行(是的,我知道它在概念上不是尾部)。换句话说,cat -f如果它曾经存在的话,类似的东西会做。尾巴的男人不给我任何想法。我现在看到的唯一选择是以某种方式组合cat 除了最后 10 行和tail -f输出之外的所有内容。
请问有什么提示吗?
令人惊讶的是为什么现在tail -f不工作而早些时候是。
我有以下命令来运行备份。
ubuntu@ubuntu:~$ sudo tar -cvf /media/ubuntu/My*Linux/ub*data/zebra.tar /media/ubuntu/home > z1 2> z2 && echo "pass" || echo "fail"
Run Code Online (Sandbox Code Playgroud)
要查看输出和错误,有这 2 个文件z1和z2.
现在我想在终端上从文件 z1 中查看命令的输出:
ubuntu@ubuntu:~$ tail -f z1
Run Code Online (Sandbox Code Playgroud)
但此命令未显示随时间追加的数据。
我正在使用 USB 笔式驱动器实时安装 Ubuntu 14.04.1。这可能是原因吗?
所以这是家庭作业,但我不会问具体的家庭作业问题。
我需要使用 head 和 tail 从一个文件中获取不同的行集。所以像第 6-11 行和第 19-24 行一样,将它们都保存到另一个文件中。我知道我可以使用 append 来做到这一点,例如
head -11 file|tail -6 > file1; head -24 file| tail -6 >> file1.
Run Code Online (Sandbox Code Playgroud)
但我认为我们不应该这样做。
有没有一种特定的方法可以组合 head 和 tail 命令然后保存到文件中?
我正在运行一个 SSH 服务器,并且我想删除这个用户。我无法删除此用户,因为他当前正在运行一些我需要先杀死的进程。
这是我当前使用的管道,用于查找我当前使用的用户的所有进程 ID:
ps -u user | awk '{print $1;}'
Run Code Online (Sandbox Code Playgroud)
输出如下所示:
PID
2121
2122
2124
2125
2369
2370
Run Code Online (Sandbox Code Playgroud)
我想通过管道kill -9来杀死所有进程,这样我就可以像这样删除这个愚蠢的用户:
ps -u user | awk '{print $1;}' | sudo xargs kill -9
Run Code Online (Sandbox Code Playgroud)
但这不起作用,因为PID标题:
kill: failed to parse argument: 'PID'
Run Code Online (Sandbox Code Playgroud)
我认为必须有一个简单的 Unix 命令来删除第一行输入。
我知道我可以使用tail它,但我不想计算输入包含多少行来确定我想要显示多少行。
我正在寻找类似head或tail但反转的东西(而不是仅显示流的第一/最后部分,它显示除流的开始/结束之外的所有内容)。
我设法通过简单地| grep [[:digit:]]在我的awk命令之后添加来解决这个问题,但我仍在寻找一种方法来删除文件的第一行,因为我认为在其他情况下会非常有用。
我想监视一个大日志文件(接近 1 GB)是否有错误。我希望这接近实时(几秒钟延迟很好)。我的计划是使用tail -f | grep. 在长时间运行时使用这种方法是否有任何性能问题,比如从零字节到 1 GB?是否有任何用于此类监控的标准做法。请注意,我想使用 Solaris 10 上可用的标准 unix 命令来执行此操作。
如果可能的话,我的文件甚至会翻转,我还有一个问题需要解决:)。使用tail -F( --follow=name) 对我来说不是一个选项,因为-F在我想要运行它的服务器中不支持。我的计划是使用一个脚本来启动这个尾部并轮询以查找文件是否被翻转。如果是,则杀死尾部并重新启动它。有什么更好的方法吗?
是否可以从头开始跟踪二进制文件,la tail -f?
这在某些情况下很有用,例如,如果我scp将文件发送到远程服务器,同时我想将其提供给另一个进程(是的,我知道我可以使用ssh+cat技巧)。
就我从 FM 上读到的而言,tail是在考虑文本文件的情况下编写的。
是否有使用标准 posix 工具进行此类操作的简单方法?
有时我在一个新的 (ubuntu) 盒子上工作,我输入git并收到警报:
The program 'git' is currently not installed. You can install it by typing:
apt-get install git-core
Run Code Online (Sandbox Code Playgroud)
如果发生这种情况,我知道我可以通过执行以下操作来获取最后一行:
!! 2>&1 | tail -n 1
Run Code Online (Sandbox Code Playgroud)
但是我怎样才能apt-get install git-core最容易地执行那个 ( )的结果呢?
我意识到我可以做到
`!! 2>&1 | tail -n 1`
Run Code Online (Sandbox Code Playgroud)
但是还有一种方法可以实际管道输出并运行它吗?这似乎不起作用:
!! 2>&1 | tail -n 1 | sh
Run Code Online (Sandbox Code Playgroud)
这2>&1部分也有点麻烦,所以我很好奇是否有更简单的方法来实现这一点。
编辑
以某种方式将其保存到变量中,然后执行该变量也是可以接受的:
!! 2>&1 | tail -n 1 | (store as $mycmd)
$mycmd
Run Code Online (Sandbox Code Playgroud)
但我不确定我是否知道通过管道stdout输入变量的方法,至少不知道变量位于命令的右侧。
我通常在 GNU Screen 或 中tmux,这并没有给我很好的滚动功能。有没有替代方法可以tail -f让我快速向上滚动?
类似的工具most是 toless和more。
这个问题是相关的,但远非具体。我真的在寻找可以让我滚动的东西。
我有一些在文件中生成日志的服务logs.log。
我还有一些与此服务交互的其他命令。让我们说它是一些foo.sh。
我需要的是logs.log在foo.sh运行期间准确地剪切和保存日志。换句话说,当它与我的交互时,我需要那部分服务的日志foo.sh(所以我不关心foo.sh的日志)。
我希望这个命令可以解决问题,但它会在foo.sh已经完成后继续读取文件:
> foo.sh | tail -f logs.log > foo_part.log
Run Code Online (Sandbox Code Playgroud)
有什么好方法来执行这个技巧吗?