Linux
創建後如何直接訪問臨時文件?
我有通過 SSH 連接到遠端主機的腳本,創建臨時文件並執行以下命令:
呼叫系統(mysql –database=information_schema –host=localhost < /tmp/drush_1JAjtt)
每次它創建不同的文件(模式:)
drush_xxxxxx
。我試過幾次在遙控器上手動執行:
tail -f /tmp/drush_*
但是我的連接太慢了,而且大多數時候我都遇到了錯誤:
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]);}'
由於我們使用
-e create
flag ,我們只對將立即創建的臨時文件感興趣,輸出格式為我們提供了創建臨時文件的完整路徑。通過 忽略前兩行輸出NR>2
。對於每個報告的文件,都會在表單中創建一個硬連結/tmp/hardlink_to_<original filename>
您可以設置一個使用
inotify
(inotify-tools
onDebian
) 的腳本,並讓它掃描特定目錄中文件的任何更改。然後過濾掉文件名並將cat
其放入日誌文件。