创建后如何直接访问临时文件?

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_*'进行读取:没有这样的文件或目录

有什么技巧可以在创建此类文件后立即访问该文件以显示其内容吗?

Ser*_*nyy 5

在检查我不信任的特定应用程序的行为时,我遇到了这个问题。应用程序将创建并随后删除其临时文件。 kenorb 的解决方案很好,但是使用cat可能会导致竞争条件(即文件可能在cat工作时被删除,因此仅检索部分数据)。

通过创建到文件本身的硬链接可以降低竞争条件的可能性。greping 和创建硬链接可以通过 结合起来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 createflag ,我们只对将立即创建的临时文件感兴趣,并且输出格式为我们提供了创建的临时文件的完整路径。忽略通过 的前两行输出NR>2。对于每个报告的文件,都会在表单中创建一个硬链接/tmp/hardlink_to_<original filename>