rm 命令用于移除文件系统条目。命令行删除通常不会把条目送入桌面回收站,而且 rm 没有内置撤销功能,因此运行前应确认每个目标。
基本语法是:
rm [OPTIONS] FILE...
命令行 · 第 13 课
学习在确认目标并选择更安全的 rm 选项后删除文件和目录。
rm 命令用于移除文件系统条目。命令行删除通常不会把条目送入桌面回收站,而且 rm 没有内置撤销功能,因此运行前应确认每个目标。
基本语法是:
rm [OPTIONS] FILE...
要删除一个文件,只需将文件名传递给 rm。
$ rm file1
你也可以一次删除多个文件,只需依次列出它们。
$ rm notes.txt old-report.txt draft.md
按 Enter 前应检查拼写和位置。删除后依赖备份或版本控制副本恢复,要比指望文件系统恢复工具更可靠。
确认目标无误后,哪个命令会删除文件 old-report.txt?
Shell 通配符允许你匹配多个文件。例如,这条命令会删除当前目录下所有 .tmp 文件:
$ rm *.tmp
在使用带通配符的 rm 之前,最好先用 ls 预览匹配的文件。
$ ls *.tmp
cache.tmp test.tmp
$ rm *.tmp
shell 会在 rm 启动前展开模式。如果预览中出现意外文件,应修改模式,而不是继续执行。
你准备删除 *.tmp。哪个命令会先显示该模式选中的非隐藏路径,而不删除它们?
为了更安全,可以使用 -i 选项。它会在删除每个文件前提示确认。
$ rm -i important.txt
rm: remove regular file 'important.txt'? y
GNU rm 的 -I 是干扰更少的保护措施:当命令将删除三个以上文件或执行递归操作时,它只询问一次。
哪个命令会在删除每个指定文件前请求确认?
-f 选项表示“强制”。它会忽略不存在的文件且不提示确认。
$ rm -f old-cache.txt
如果生成的文件可能已经不存在,这能让脚本清理操作保持幂等。由于它会取消确认,不要只为了压下尚未理解的错误而添加 -f。
默认情况下,rm 不能删除目录。
$ rm projects
rm: cannot remove 'projects': Is a directory
要删除目录及其内部所有内容,使用 -r 或 -R 进行递归删除。
$ rm -r old-project
对于空目录,rmdir 是范围更窄的替代命令:
$ rmdir empty-directory
rmdir 会在目录非空时失败,从而保护其中内容不被递归删除。
哪个命令只在 old-cache/ 为空时删除该目录?
递归删除可以清除整棵目录树。把 -r 与 -f 结合还会取消提示,因此使用 rm -rf 前必须特别仔细地验证目标。执行任何递归删除前,请检查:
pwd。ls -ld -- TARGET 是否显示预期的顶层路径?/tmp/cache 和 tmp/cache 差别很大。rm -rf old-project 和 rm -rf old project 指向不同路径。如果目标可能以连字符开头,请在它之前使用 --,避免被解释为选项:
$ rm -- -old-name
不要仅因为 rm 报告权限错误就直接使用 sudo。应先确认目标,并查明当前账户为何不能修改其所在目录。提升权限的递归删除可能损坏操作系统或其他用户的数据。
需要让 rm 报告每次成功删除时,可以使用 -v:
$ rm -rv old-project
removed 'old-project/notes.txt'
removed directory 'old-project'
确认完整目标无误后,哪个命令会删除 old-project/ 及其下所有内容,同时仍允许正常提示?
要在受控环境中练习删除,可以尝试以下动手实验:
rm 命令删除文件和目录,包括 -r 和 -i 等选项,练习安全有效的文件删除。rm 命令清理不必要的目录,通过实际挑战提升能力。课程已完成
现在,你可以删除文件系统条目,并把每个目标都视为不可撤销操作。
删除前确认文件路径。
使用只读命令预览通配符展开结果。
使用 -i 或 -I 请求确认。
目录必须为空时优先使用 rmdir。
使用递归删除前验证整个目标。