Linux

創建後如何直接訪問臨時文件?

  • September 10, 2018

我有通過 SSH 連接到遠端主機的腳本,創建臨時文件並執行以下命令:

呼叫系統(mysql –database=information_schema –host=localhost < /tmp/drush_1JAjtt)

每次它創建不同的文件(模式:)drush_xxxxxx

我試過幾次在遙控器上手動執行:

tail -f /tmp/drush_*

但是我的連接太慢了,而且大多數時候我都遇到了錯誤:

tail: 無法打開 `/tmp/drush_*’ 進行閱讀: 沒有這樣的文件或目錄

在創建此類文件以顯示其內容後,是否有任何技巧可以直接訪問它?

在檢查我不信任的特定應用程序的行為時,我遇到了這個問題。該應用程序將創建並稍後刪除其臨時文件。 kenorb 的解決方案很好,但是使用cat會導致競爭條件(即文件可能在cat工作時被刪除,因此僅檢索部分數據)。

可以通過創建指向文件本身的硬連結來降低競爭條件的可能性。greping 和創建硬連結可以通過awk. 因此,我想出的是以下內容;

inotifywait -e create -m --format "%w/%f" /tmp/suspicious_dir/ 2&gt;&1 | 
awk 'NR&gt;2{n=split($0,a,"/");system("ln "$0" /tmp/hardlink_to_"a[n]);}'

由於我們使用-e createflag ,我們只對將立即創建的臨時文件感興趣,輸出格式為我們提供了創建臨時文件的完整路徑。通過 忽略前兩行輸出NR&gt;2。對於每個報告的文件,都會在表單中創建一個硬連結/tmp/hardlink_to_&lt;original filename&gt;

您可以設置一個使用inotify( inotify-toolson Debian) 的腳本,並讓它掃描特定目錄中文件的任何更改。然後過濾掉文件名並將cat其放入日誌文件。

引用自:https://unix.stackexchange.com/questions/164699