目录
10. shell命令--rm
功能说明
rm 命令来自英文单词 remove 的缩写,中文译为“消除”,rm 是 Linux 和其他类 Unix 系统中用于删除文件或目录的命令。在使用 rm 命令时,请务必小心,因为一旦文件或目录被删除,就无法恢复(除非有备份或使用了某些特殊的数据恢复技术)。所以我们在执行之前一定要再次确认在在哪个目录中、到底要删除什么文件,考虑好后再敲击Enter键,要时刻保持清醒的头脑
语法格式
rm [选项]... 文件...
SYNOPSIS
rm [OPTION]... FILE...
选项说明
- -r 或 -R:递归删除目录及其内容。
- -d:仅删除无子文件的空目录。
- -f:强制删除,不提示用户。
- -i:在删除每个文件之前提示用户。
- -v:详细模式,显示正在删除的文件名。
- --preserve-root:不删除 / 目录,即使指定了 -r 或 -R 选项。
- --no-preserve-root:允许删除根目录(危险)。
- --interactive[=WHEN]:指定何时提示用户。WHEN 可以是 always、never 或 once;如果没有 WHEN,则等同于 always。
- --one-file-system:当递归删除时,仅在当前文件系统上操作。
- --directory:允许删除空目录。
- --help:显示帮助信息。
- --version:显示版本信息。
实践操作
1. 直接执行 rm 的例子
mkdir -p /test/rm #创建测试目录
cd /test/rm #切换到测试目录
touch file{1..8}.txt #创建多个文件
ls #查看一下
rm file8.txt #直接删除,会有提示,输入y确认,输入n取消,演示写 y
ls #查看一下
alias rm #查看一下系统别名
\rm file7.txt #取消别名,这下就可以直接删除了
ls #查看一下
2. 强制删除的例子(参数 -f )
rm -f file6.txt #加上参数 -f 可以强制删除
ls #查看一下
rm -f file3.txt file4.txt file5.txt #也可以一次删除多个文件
ls #查看一下
touch file{3..6}.txt #再次创建一些
ls
rm -f file{2..6}.txt #这样也可以删除多个文件
ls
rm -f * #删除所有,这里就剩下一个文件了,但是却是有多少删除多少。慎用哦!
ls
3. 递归删除的例子
mkdir dir{1..3} #创建一些实验目录
ls
rm dir3 #不加参数删除目录试试( rm: cannot remove 'dir3': Is a directory )不能删除哦
ls
rm -f dir3 #强制删除目录也不行?
rm -r dir3 #参数 -r 是删除目录用的,按 y 确认,按 n 取消,演示选择 y
ls
mkdir -p dir{1,2}/a/b #再建一些实验目录
tree #使用这个命令看一下,如果没有,可以使用 yum install -y tree 安装,再不行可以网上找一下方法
rm -r dir1/ #目录下还有目录,这时就递归删除了,演示选 y
ls
rm -rf dir2/ #这样的组合无敌,使用时一定要慎之又慎!!!
ls
命令示例:1. 直接执行 rm 的例子
mkdir -p /test/rm
cd /test/rm
touch file{1..8}.txt
ls
rm file8.txt
ls
alias rm
\rm file7.txt
ls
输出结果:
[root@MineGi ~]# mkdir -p /test/rm
[root@MineGi ~]# cd /test/rm
[root@MineGi /test/rm]# touch file{1..8}.txt
[root@MineGi /test/rm]# ls
file1.txt file2.txt file3.txt file4.txt file5.txt file6.txt file7.txt file8.txt
[root@MineGi /test/rm]# rm file8.txt
rm:是否删除普通空文件 "file8.txt"?y
[root@MineGi /test/rm]# ls
file1.txt file2.txt file3.txt file4.txt file5.txt file6.txt file7.txt
[root@MineGi /test/rm]# alias rm
alias rm='rm -i'
[root@MineGi /test/rm]# \rm file7.txt
[root@MineGi /test/rm]# ls
file1.txt file2.txt file3.txt file4.txt file5.txt file6.txt
[root@MineGi /test/rm]#
命令示例:2. 强制删除的例子(参数 -f )
rm -f file6.txt
ls
rm -f file3.txt file4.txt file5.txt
ls
touch file{3..6}.txt
ls
rm -f file{2..6}.txt
ls
rm -f *
ls
输出结果:
[root@MineGi /test/rm]# rm -rf file6.txt
[root@MineGi /test/rm]# ls
file1.txt file2.txt file3.txt file4.txt file5.txt
[root@MineGi /test/rm]# rm -f file3.txt file4.txt file5.txt
[root@MineGi /test/rm]# ls
file1.txt file2.txt
[root@MineGi /test/rm]# touch file{3..6}.txt
[root@MineGi /test/rm]# ls
file1.txt file2.txt file3.txt file4.txt file5.txt file6.txt
[root@MineGi /test/rm]# rm -f file{2..6}.txt
[root@MineGi /test/rm]# ls
file1.txt
[root@MineGi /test/rm]# rm -f *
[root@MineGi /test/rm]# ls
[root@MineGi /test/rm]#
命令示例:3. 递归删除的例子
mkdir dir{1..3}
ls
rm dir3
ls
rm -f dir3
rm -r dir3
ls
mkdir -p dir{1,2}/a/b
tree
rm -r dir1/
ls
rm -rf dir2/
ls
输出结果:
[root@MineGi /test/rm]# mkdir dir{1..3}
[root@MineGi /test/rm]# ls
dir1 dir2 dir3
[root@MineGi /test/rm]# rm dir3
rm: 无法删除"dir3": 是一个目录
[root@MineGi /test/rm]# ls
dir1 dir2 dir3
[root@MineGi /test/rm]# rm -f dir3
rm: 无法删除"dir3": 是一个目录
[root@MineGi /test/rm]# rm -r dir3
rm:是否删除目录 "dir3"?y
[root@MineGi /test/rm]# ls
dir1 dir2
[root@MineGi /test/rm]# mkdir -p dir{1,2}/a/b
[root@MineGi /test/rm]# tree
.
├── dir1
│?? └── a
│?? └── b
└── dir2
└── a
└── b
6 directories, 0 files
[root@MineGi /test/rm]# rm -r dir1/
rm:是否进入目录"dir1/"? y
rm:是否进入目录"dir1/a"? y
rm:是否删除目录 "dir1/a/b"?y
rm:是否删除目录 "dir1/a"?y
rm:是否删除目录 "dir1/"?y
[root@MineGi /test/rm]# ls
dir2
[root@MineGi /test/rm]# rm -rf dir2/
[root@MineGi /test/rm]# ls
[root@MineGi /test/rm]#
注意事项
- 使用 rm 命令删除目录时,请确保使用 -r 或 -R 选项,否则 rm 会报错并提示“是一个目录”。
- 当你使用通配符(如 *)时,务必小心,以免意外删除不想删除的文件。
- 使用 -f 选项时要特别小心,因为它会绕过所有的提示,直接删除文件或目录。
- 始终建议在进行删除操作之前备份重要数据。
最后,再次强调,使用 rm 命令时一定要谨慎,确保你知道自己在删除什么,以及这些文件或目录是否可以被安全地删除。始终建议在执行删除操作前备份重要数据,并在可能的情况下使用版本控制系统或快照来管理文件和目录的变更。