监视 /tmp 以创建文件并防止删除文件?

dra*_*tis 9 filesystems permissions file-copy tmp inotify

我有一个二进制文件,可以在其中创建一些文件/tmp/*some folder*并运行它们。这个相同的二进制文件在运行后立即删除这些文件。有没有办法拦截这些文件?

我无法将该文件夹设为只读,因为二进制文件需要写入权限。我只需要一种方法来在执行文件时复制文件或阻止原始二进制文件删除它们。

don*_*l24 10

chattr +a /tmp/*some folder*将文件夹设置为仅附加。可以创建和写入文件,但不能删除文件。使用chattr -a /tmp/*some folder*时,即可大功告成。

  • 如果将“intofywait”脚本与“chattr”结合起来,您将获得一个非常紧凑的解决方案,而不会出现一堆硬链接。 (2认同)

Mat*_*ath 8

您可以在脚本中使用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
Run Code Online (Sandbox Code Playgroud)

由于它们是硬链接,因此在程序修改它们时应该更新它们,但在程序删除它们时不会删除它们。您可以正常删除硬链接克隆。

请注意,这种方法远不及原子性,因此在程序删除新创建的文件之前,您需要依靠此脚本来创建硬链接。

如果要将所有更改克隆到/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
Run Code Online (Sandbox Code Playgroud)