Permissions
監視 /tmp 以創建文件並防止刪除文件?
我有一個二進製文件,可以在其中創建一些文件
/tmp/*some folder*
並執行它們。這個相同的二進製文件在執行它們後立即刪除這些文件。有沒有辦法攔截這些文件?我不能將文件夾設為只讀,因為二進製文件需要寫權限。我只需要一種方法來在執行文件時復製文件或阻止原始二進製文件刪除它們。
您可以在腳本中使用來自inotify-tools
inotifywait
的命令來創建在. 例如,將所有創建的文件硬連結到:/tmp/some_folder``/tmp/some_folder``/tmp/some_folder_bak
#!/bin/sh ORIG_DIR=/tmp/some_folder CLONE_DIR=/tmp/some_folder_bak mkdir -p $CLONE_DIR inotifywait -mr --format='%w%f' -e create $ORIG_DIR | while read file; do echo $file DIR=`dirname "$file"` mkdir -p "${CLONE_DIR}/${DIR#$ORIG_DIR/}" cp -rl "$file" "${CLONE_DIR}/${file#$ORIG_DIR/}" done
由於它們是硬連結,因此應在程序修改它們時更新它們,但在程序刪除它們時不應刪除它們。您可以正常刪除硬連結複製。
請注意,這種方法遠非原子方法,因此您需要依靠此腳本來創建硬連結,然後程序才能刪除新創建的文件。
如果要將所有更改複製到
/tmp
,可以使用更分佈式的腳本版本:#!/bin/sh TMP_DIR=/tmp CLONE_DIR=/tmp/clone mkdir -p $CLONE_DIR wait_dir() { inotifywait -mr --format='%w%f' -e create "$1" 2>/dev/null | while read file; do echo $file DIR=`dirname "$file"` mkdir -p "${CLONE_DIR}/${DIR#$TMP_DIR/}" cp -rl "$file" "${CLONE_DIR}/${file#$TMP_DIR/}" done } trap "trap - TERM && kill -- -$$" INT TERM EXIT inotifywait -m --format='%w%f' -e create "$TMP_DIR" | while read file; do if ! [ -d "$file" ]; then continue fi echo "setting up wait for $file" wait_dir "$file" & done
chattr +a /tmp/*some folder*
將文件夾設置為僅附加。可以創建和寫入文件,但不能刪除文件。完成後使用chattr -a /tmp/*some folder*
。