介绍
在这个项目中,你将学习如何创建一个自定义的 rm 命令,该命令会将删除的文件移动到回收站目录,而不是永久删除它们。在你的 Linux 服务器上拥有此功能很有用,可以防止意外删除关键文件。
👀 预览
labex:project/ $ ll /tmp/trash
total 2.0K
-rw-r--r-- 1 labex labex 8 Oct 26 17:47 trash_file.md
🎯 任务
在这个项目中,你将学习:
- 如何设置
/tmp/trash目录以临时存储已删除的文件 - 如何创建一个自定义的
rm命令脚本,将已删除的文件移动到回收站目录 - 如何更新
PATH环境变量以使用自定义的rm命令 - 如何测试自定义的
rm -f命令,以确保它按预期工作
🏆 成果
完成此项目后,你将能够:
- 通过使用带有回收站目录的自定义
rm命令来保护你的 Linux 服务器免受意外文件删除 - 了解如何修改系统命令以更改其默认行为
- 获得 shell 脚本编写和环境变量管理方面的经验
设置回收站目录
在这一步中,你将学习如何设置 /tmp/trash 目录来临时存储已删除的文件。
- 打开一个终端。
- 创建
/tmp/trash目录并设置适当的权限:
sudo mkdir /tmp/trash
sudo chown root:root /tmp/trash
sudo chmod 1777 /tmp/trash
1777 权限设置该目录启用了“粘着位”,这允许所有用户写入该目录,但只有所有者可以删除其中的文件。
更新 PATH 环境变量
在这一步中,你将更新 PATH 环境变量,以确保使用自定义的 rm 命令,而不是默认的系统 rm 命令。
- 创建一个新目录来存放自定义的
rm命令:
sudo mkdir -p /usr/local/custom/bin
- 编辑
/etc/environment文件:
sudo vim /etc/environment
- 将
/usr/local/custom/bin目录添加到PATH变量的开头:
PATH="/usr/local/custom/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
- 保存文件并退出编辑器。
- 使
/etc/environment文件生效,以更新当前 shell 的环境:
source /etc/environment
sudo chmod a+x /usr/local/custom/bin
现在,将使用自定义的 rm 命令,而不是默认的系统 rm 命令。
创建自定义 rm 命令
在这一步中,你将创建一个自定义的 rm 命令,该命令会将删除的文件移动到 /tmp/trash 目录,而不是永久删除它们。
- 创建自定义
rm命令脚本:
sudo vim /usr/local/custom/bin/rm
将以下内容添加到文件中:
#!/bin/zsh
## 此脚本用于将文件或目录移动到回收站目录,而不是永久删除它们。
## 如果使用了 -f 选项,目标将被移动到回收站目录。
## 如果目标不存在,将显示错误消息。
TRASH_DIR="/tmp/trash"
if [[ "$1" == "-f" ]]; then
shift
for arg in "$@"; do
## 检查目标是否存在
if [[ -e "$arg" ]]; then
## 将目标移动到回收站目录
mv -f "$arg" "$TRASH_DIR"
else
echo "错误:$arg 不存在。"
fi
done
else
## 执行原始的 rm 命令
/bin/rm "$@"
fi
- 设置自定义
rm命令脚本的适当权限:
sudo chown root:root /usr/local/custom/bin/rm
sudo chmod 755 /usr/local/custom/bin/rm
测试自定义 rm 命令
在这一步中,你将测试自定义的 rm -f 命令,以确保它按预期工作。
- 在
/home/labex/project目录中创建一个测试文件:
touch /home/labex/project/trash_file.md
- 使用自定义的
rm -f命令删除测试文件:
rm -f /home/labex/project/trash_file.md
- 验证文件是否已移动到
/tmp/trash目录:
ls -l /tmp/trash
你应该在输出中看到 trash_file.md 文件。
total 2.0K
-rw-r--r-- 1 labex labex 8 Oct 26 17:47 trash_file.md
恭喜!你已成功实现了自定义的 rm 命令,该命令会将删除的文件移动到 /tmp/trash 目录,而不是永久删除它们。
总结
恭喜!你已完成此项目。你可以在 LabEx 中练习更多实验以提升你的技能。



