![如果文件发生更改,终端将停止将其输出写入文件](https://linux22.com/image/1091850/%E5%A6%82%E6%9E%9C%E6%96%87%E4%BB%B6%E5%8F%91%E7%94%9F%E6%9B%B4%E6%94%B9%EF%BC%8C%E7%BB%88%E7%AB%AF%E5%B0%86%E5%81%9C%E6%AD%A2%E5%B0%86%E5%85%B6%E8%BE%93%E5%87%BA%E5%86%99%E5%85%A5%E6%96%87%E4%BB%B6.png)
我有一个正在运行的进程,它是使用
./process | tee -a output.txt
由于这是一个相当漫长的过程,输出文件很大,每次打开检查时,我都必须等待它加载,然后必须向下滚动到底部,这很不方便。因此,我决定将当前内容移动到备份文件中,output_bak.txt
并将当前内容留空,output.txt
以便它只包含新输出。不幸的是,这没有奏效。该过程不再写入output.txt
。
我的问题是如何让进程继续写入output.txt
?
预先感谢您的帮助!
更新:我所说的“移动内容”实际上是将文件的内容复制到另一个文件中,然后删除当前文件中的内容。更准确地说,我所做的是:打开output.txt
,按Ctrl + A复制内容,然后按Ctrl + V进入output_bak.txt
,然后返回output.txt
并按Ctrl + A,然后删除并保存。
答案1
不能。打开文件时,进程会获取文件句柄。文件句柄不会改变即使文件被移动或删除。因此,该过程将写入您移动到的同一文件句柄output_bak.txt
。您必须关闭文件并重新打开它。
您可以使用 unix 实用程序(例如)tail
来查看文件末尾。tail -n 20 output.txt
将输出最后 20 行output.txt
。
Tail 还可以提供实时视图。tail -f output.txt
将以连续流的形式显示写入文件的内容,直到您使用Ctrl+中断它c。
顺便说一下,这就是 logrotate 的工作原理。移动文件,创建一个新的空文件,然后重新启动写入日志文件的过程。