实现启用回收站功能的自定义命令

LinuxLinuxBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个项目中,你将学习如何创建一个自定义的 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 脚本编写和环境变量管理方面的经验

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("`Linux`")) -.-> linux/BasicSystemCommandsGroup(["`Basic System Commands`"]) linux(("`Linux`")) -.-> linux/BasicFileOperationsGroup(["`Basic File Operations`"]) linux(("`Linux`")) -.-> linux/FileandDirectoryManagementGroup(["`File and Directory Management`"]) linux(("`Linux`")) -.-> linux/VersionControlandTextEditorsGroup(["`Version Control and Text Editors`"]) linux/BasicSystemCommandsGroup -.-> linux/source("`Script Executing`") linux/BasicFileOperationsGroup -.-> linux/ls("`Content Listing`") linux/BasicFileOperationsGroup -.-> linux/touch("`File Creating/Updating`") linux/BasicFileOperationsGroup -.-> linux/rm("`File Removing`") linux/BasicFileOperationsGroup -.-> linux/chown("`Ownership Changing`") linux/BasicFileOperationsGroup -.-> linux/chmod("`Permission Modifying`") linux/FileandDirectoryManagementGroup -.-> linux/mkdir("`Directory Creating`") linux/VersionControlandTextEditorsGroup -.-> linux/vim("`Text Editing`") subgraph Lab Skills linux/source -.-> lab-301457{{"`实现启用回收站功能的自定义命令`"}} linux/ls -.-> lab-301457{{"`实现启用回收站功能的自定义命令`"}} linux/touch -.-> lab-301457{{"`实现启用回收站功能的自定义命令`"}} linux/rm -.-> lab-301457{{"`实现启用回收站功能的自定义命令`"}} linux/chown -.-> lab-301457{{"`实现启用回收站功能的自定义命令`"}} linux/chmod -.-> lab-301457{{"`实现启用回收站功能的自定义命令`"}} linux/mkdir -.-> lab-301457{{"`实现启用回收站功能的自定义命令`"}} linux/vim -.-> lab-301457{{"`实现启用回收站功能的自定义命令`"}} end

设置回收站目录

在这一步中,你将学习如何设置 /tmp/trash 目录来临时存储已删除的文件。

  1. 打开一个终端。
  2. 创建 /tmp/trash 目录并设置适当的权限:
sudo mkdir /tmp/trash
sudo chown root:root /tmp/trash
sudo chmod 1777 /tmp/trash

1777 权限设置该目录启用了 “粘着位”,这允许所有用户写入该目录,但只有所有者可以删除其中的文件。

更新 PATH 环境变量

在这一步中,你将更新 PATH 环境变量,以确保使用自定义的 rm 命令,而不是默认的系统 rm 命令。

  1. 创建一个新目录来存放自定义的 rm 命令:
sudo mkdir -p /usr/local/custom/bin
  1. 编辑 /etc/environment 文件:
sudo vim /etc/environment
  1. /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"
  1. 保存文件并退出编辑器。
  2. 使 /etc/environment 文件生效,以更新当前 shell 的环境:
source /etc/environment
sudo chmod a+x /usr/local/custom/bin

现在,将使用自定义的 rm 命令,而不是默认的系统 rm 命令。

创建自定义 rm 命令

在这一步中,你将创建一个自定义的 rm 命令,该命令会将删除的文件移动到 /tmp/trash 目录,而不是永久删除它们。

  1. 创建自定义 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
  1. 设置自定义 rm 命令脚本的适当权限:
sudo chown root:root /usr/local/custom/bin/rm
sudo chmod 755 /usr/local/custom/bin/rm

测试自定义 rm 命令

在这一步中,你将测试自定义的 rm -f 命令,以确保它按预期工作。

  1. /home/labex/project 目录中创建一个测试文件:
touch /home/labex/project/trash_file.md
  1. 使用自定义的 rm -f 命令删除测试文件:
rm -f /home/labex/project/trash_file.md
  1. 验证文件是否已移动到 /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 中练习更多实验以提升你的技能。

您可能感兴趣的其他 Linux 教程