ken*_*orb 3 linux command-line tmp files
我有一个通过 SSH 连接到远程主机的脚本,创建临时文件并执行以下命令:
调用系统(mysql --database=information_schema --host=localhost < /tmp/drush_1JAjtt)
每次它创建不同的文件(模式:)drush_xxxxxx
。
我已经尝试在远程手动运行几次:
tail -f /tmp/drush_*
Run Code Online (Sandbox Code Playgroud)
但我的连接速度太慢,大多数时候我都会遇到错误:
tail:无法打开`/tmp/drush_*'进行读取:没有这样的文件或目录
有什么技巧可以在创建此类文件后立即访问该文件以显示其内容吗?
在检查我不信任的特定应用程序的行为时,我遇到了这个问题。应用程序将创建并随后删除其临时文件。 kenorb 的解决方案很好,但是使用cat
可能会导致竞争条件(即文件可能在cat
工作时被删除,因此仅检索部分数据)。
通过创建到文件本身的硬链接可以降低竞争条件的可能性。grep
ing 和创建硬链接可以通过 结合起来awk
。因此,我想出了以下内容;
inotifywait -e create -m --format "%w/%f" /tmp/suspicious_dir/ 2>&1 |
awk 'NR>2{n=split($0,a,"/");system("ln "$0" /tmp/hardlink_to_"a[n]);}'
Run Code Online (Sandbox Code Playgroud)
由于我们使用的是-e create
flag ,我们只对将立即创建的临时文件感兴趣,并且输出格式为我们提供了创建的临时文件的完整路径。忽略通过 的前两行输出NR>2
。对于每个报告的文件,都会在表单中创建一个硬链接/tmp/hardlink_to_<original filename>