You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写监控指定文件的Bash脚本实现删除警告确认

如何用Bash脚本监控文件并拦截删除操作?

嘿,这个需求我之前折腾过!其实不用自己从零写检测逻辑,Linux下的inotify-tools工具刚好能完美解决——它专门用来监听文件系统的各类事件,包括删除尝试。下面我给你一步步拆解实现方法和实用技巧:

第一步:先安装依赖工具

首先得确保系统上装了inotify-tools,不同发行版的安装命令如下:

  • Debian/Ubuntu系:
    sudo apt update && sudo apt install inotify-tools
    
  • RHEL/CentOS系:
    sudo yum install inotify-tools
    

第二步:编写可运行的监控脚本

直接给你一个能落地的脚本,我会逐行解释关键部分:

#!/bin/bash

# 检查用户是否传入了目标文件参数
if [ $# -ne 1 ]; then
    echo "用法: $0 <待监控的文件路径>"
    exit 1
fi

TARGET_FILE="$1"

# 先确认目标文件存在,避免白忙活
if [ ! -f "$TARGET_FILE" ]; then
    echo "错误: 文件 $TARGET_FILE 不存在!"
    exit 1
fi

# 脚本启动时先创建带时间戳的备份,防止删除后无法恢复
BACKUP_PATH="/tmp/$(basename "$TARGET_FILE")_$(date +%Y%m%d%H%M%S)_backup"
cp "$TARGET_FILE" "$BACKUP_PATH"
echo "已创建文件备份: $BACKUP_PATH"

# 持续循环监控文件事件
while true; do
    # 监听两个关键事件:
    # DELETE_SELF: 文件自身被删除(比如被mv或者rm掉)
    # DELETE: 父目录中该文件被删除(直接用rm命令时触发)
    inotifywait -e DELETE_SELF -e DELETE "$TARGET_FILE" 2>/dev/null

    # 弹出确认对话框,优先用图形化工具,没有的话用终端交互
    if command -v zenity &>/dev/null; then
        zenity --question --text="⚠️ 警告!有人尝试删除文件:\n$TARGET_FILE\n是否确认删除?" --width=450
        CONFIRM_RESULT=$?
    else
        read -p "⚠️ 警告!有人尝试删除文件 $TARGET_FILE,是否确认删除?(y/N) " USER_INPUT
        case "$USER_INPUT" in
            [Yy]* ) CONFIRM_RESULT=0;;
            * ) CONFIRM_RESULT=1;;
        esac
    fi

    # 根据用户选择处理
    if [ $CONFIRM_RESULT -ne 0 ]; then
        # 用户取消删除,从备份恢复文件
        cp "$BACKUP_PATH" "$TARGET_FILE"
        echo "✅ 删除已取消,文件已从备份恢复"
    else
        # 用户确认删除,清理备份并退出监控
        rm "$BACKUP_PATH"
        echo "ℹ️ 用户确认删除,监控已停止"
        exit 0
    fi
done

关键技巧和注意事项

  • 事件监听逻辑:inotifywait是阻塞式的,每次捕获到指定事件后才会继续执行,所以用while true循环实现持续监控
  • 备份策略:脚本启动时就创建带时间戳的备份,避免恢复时覆盖最新内容;如果需要实时备份,可以在脚本里加定时备份的逻辑
  • 交互兼容性:同时支持图形化(zenity)和终端交互,适配不同使用场景
  • 后台运行:如果需要长期监控,可以把脚本后台执行,比如:
    nohup ./file_monitor.sh /path/to/your/file &
    
  • 权限问题:脚本需要拥有目标文件的读写权限,以及备份目录(这里是/tmp)的写入权限
  • 跨平台提示:inotify是Linux专属工具,如果要在macOS上实现类似功能,可以用fswatch替代,核心逻辑大同小异

内容的提问来源于stack exchange,提问作者Dax

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:29:33