生产环境 rm 命令改造做备份

在这里插入图片描述

今天的努力并不会在明天就开花结果,也许后天也不会,也许一个月,两个月也不会,但是,请相信,时机未到,终有一天,你会感激今天的自己,不曾怯懦堕落!

在生产环境中使用 rm 命令时,直接删除文件可能会导致误操作,带来不可恢复的数据丢失。为了避免这种风险,可以为 rm 命令添加一个垃圾桶回收机制,使删除的文件先移动到一个“回收站”目录,而不是直接删除。这样,你可以在需要时恢复误删的文件。以下是详细的步骤来实现这一功能。

1. 创建回收站目录

首先,需要创建一个目录,用于存放被“删除”的文件。通常,这个目录可以放在用户的主目录下,并命名为 .trash,使其成为一个隐藏目录。

执行以下命令来创建回收站目录:

mkdir -p ~/.trash

这里 -p 选项的作用是如果父目录不存在则创建它(在这种情况下是 ~/.trash)。这个目录将作为所有“删除”文件的暂存地。

2. 创建自定义 rm 脚本

为了替代系统默认的 rm 命令,创建一个自定义的脚本。当用户输入 rm 命令时,这个脚本会将文件移动到回收站目录,而不是直接删除它们。

2.1 编写脚本

在用户的主目录下创建一个名为 safe_rm 的脚本文件:

nano ~/safe_rm

将以下内容粘贴到 safe_rm 文件中:

#!/bin/bash

# 定义回收站目录的路径
TRASH_DIR=~/.trash

# 如果回收站目录不存在,则创建它
if [ ! -d "$TRASH_DIR" ]; then
    mkdir -p "$TRASH_DIR"
fi

# 遍历传入的所有参数(即要删除的文件/目录)
for FILE in "$@"; do
    # 检查文件或目录是否存在
    if [ -e "$FILE" ]; then
        # 获取当前时间戳,用于防止文件名冲突
        TIMESTAMP=$(date +%Y%m%d%H%M%S)
        
        # 提取文件名和路径
        BASENAME=$(basename "$FILE")
        
        # 将文件移动到回收站目录,并重命名以防冲突
        mv "$FILE" "$TRASH_DIR/${BASENAME}_${TIMESTAMP}"
        
        # 输出移动文件的操作结果
        echo "Moved $FILE to $TRASH_DIR/${BASENAME}_${TIMESTAMP}"
    else
        # 如果文件不存在,输出错误信息
        echo "Error: $FILE does not exist"
    fi
done
2.2 解释脚本逻辑
  • TRASH_DIR=~/.trash:定义了回收站的路径。
  • if [ ! -d "$TRASH_DIR" ]; then ... fi:检查回收站目录是否存在,如果不存在则创建它。
  • for FILE in "$@"; do ... done:遍历所有传递给脚本的参数,即将要删除的文件或目录。
  • if [ -e "$FILE" ]; then ... fi:检查文件或目录是否存在。
  • TIMESTAMP=$(date +%Y%m%d%H%M%S):生成一个时间戳,用于防止文件名冲突。
  • BASENAME=$(basename "$FILE"):提取文件或目录的名称。
  • mv "$FILE" "$TRASH_DIR/${BASENAME}_${TIMESTAMP}":将文件移动到回收站,并加上时间戳以防止重名文件冲突。
  • echo "Moved $FILE to $TRASH_DIR/${BASENAME}_${TIMESTAMP}":输出操作结果。
2.3 赋予脚本可执行权限

保存并退出编辑器后,赋予脚本可执行权限:

chmod +x ~/safe_rm

这样就可以使用 ~/safe_rm 脚本来代替系统的 rm 命令。

3. 配置系统使用自定义 rm 脚本

为了让系统默认使用我们刚刚创建的 safe_rm 脚本,而不是默认的 rm 命令,需要创建一个别名。这样每次输入 rm 命令时,都会调用我们自定义的 safe_rm 脚本。

3.1 添加别名到配置文件

打开你的 Shell 配置文件,如 .bashrc(如果你使用的是 Bash)或 .zshrc(如果你使用的是 Zsh):

nano ~/.bashrc  # 如果你使用的是 Bash
# 或
nano ~/.zshrc  # 如果你使用的是 Zsh

在文件的末尾添加以下行:

alias rm="~/safe_rm"

保存并退出编辑器。

3.2 使别名生效

要使刚刚添加的别名生效,运行以下命令以重新加载配置文件:

source ~/.bashrc  # 如果你使用的是 Bash
# 或
source ~/.zshrc  # 如果你使用的是 Zsh

从现在开始,当你在终端中使用 rm 命令时,它将调用 safe_rm 脚本,将文件移动到回收站而不是直接删除。

4. 恢复误删的文件

如果你需要恢复误删的文件,只需从回收站目录中移动文件到原始目录即可。例如:

mv ~/.trash/filename_timestamp /original/path/

你也可以根据时间戳或文件名在回收站目录中查找文件。

5. 清理回收站

随着时间的推移,回收站中的文件会逐渐增加,占用磁盘空间。你可以定期清空回收站。可以创建一个脚本来自动执行这个任务。

5.1 创建清理脚本

创建一个名为 empty_trash 的脚本:

nano ~/empty_trash

在脚本中输入以下内容:

#!/bin/bash

# 清空回收站目录中的所有文件
rm -rf ~/.trash/*
5.2 赋予清理脚本可执行权限

保存并退出编辑器后,赋予脚本可执行权限:

chmod +x ~/empty_trash
5.3 执行清理

你可以手动执行这个脚本来清空回收站:

~/empty_trash

6. 自动清理回收站(可选)

如果你希望定期自动清理回收站,可以使用 cron 来安排定时任务。

6.1 编辑 crontab

打开 crontab 编辑器:

crontab -e
6.2 添加定时任务

添加以下行以每天凌晨3点自动清空回收站:

0 3 * * * ~/empty_trash

保存并退出编辑器。现在系统将每天自动清空回收站。

总结

通过这些步骤,你可以在生产环境中为 rm 命令添加一个垃圾桶回收机制,从而避免误删文件带来的风险。这个机制将文件移动到一个专门的回收站目录,并且可以根据需要恢复文件或者定期清理回收站。

  • 17
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT小辉同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值