【命令星级】 ★★★★★
【功能说明】
rm命令可以理解为英文单词remove的缩写,其功能是删除一个或多个文件或目录(remove files or directories)。这是Linux系统里最危险的命令之一,请慎重使用。
【语法格式】
rm [option] [file]
rm [选项] [<文件或目录>]
**说明:**rm命令以及后面的选项和文件目录,每个元素之间都至少要有一个空格。
【选项说明】
表2-12针对rm命令的参数选项进行了说明。
表2-12 rm命令的参数选项及说明
示例准备代码如下:
[root@centos7 ~]# mkdir -p /data/dir{1..3} #使用绝对路径创建目录。
[root@centos7 ~]# touch /data/file{1..3}.txt
[root@centos7 ~]# tree /data/
data/
├── dir1
├── dir2
├── dir3
├── file1.txt
├── file2.txt
└── file3.txt
3 directories, 3 files
[root@centos7 ~]# cd /data
[root@centos7 /data]# ls
dir1 dir2 dir3 file1.txt file2.txt file3.txt
**范例2-45:**不带参数删除的实践示例。
[root@centos7 /data]# rm file3.txt
rm: remove regular empty file ‘file3.txt’? n
#若输入y就会删除文件,若不想删除则输入n。
[root@centos7 /data]# alias rm
alias rm='rm -i' #上面会出现提示的原因是rm被设置了系统别名,默认使用了-i参数。
#屏蔽别名的方法已经在5.2.7节的cp命令讲解中介绍过了,这里不再讲述。
**范例2-46:**强制删除的实践示例。
[root@centos7 /data]# rm -f file3.txt #-f参数强制删除,不提示。
[root@centos7 /data]# ls
dir1 dir2 dir3 file1.txt file2.txt
**提示:**使用-f参数强制删除会直接覆盖系统定义的别名。
**范例2-47:**递归删除的实践示例。
[root@centos7 /data]# mkdir -p dir1/a/b
[root@centos7 /data]# tree dir1
dir1
└── a
└── b
2 directories, 0 files
[root@centos7 /data]# rm dir1 #若无参数就会无法删除目录。
rm: cannot remove ‘dir1’: Is a directory
[root@centos7 /data]# rm -r dir1 #使用-r可以递归删除,但有确认提示,可以使用-f进行强制删除。
rm: descend into directory ‘dir1’? y
rm: descend into directory ‘dir1/a’? y
rm: remove directory ‘dir1/a/b’? n
rm: remove directory ‘dir1/a’? n
rm: remove directory ‘dir1’? n
#备注:若加上-f参数就不需要一一确认了,例如rm -rf dir1。若删除的对象不是目录(文件)就不要再使用-r参数了,这样做会很危险,也没有必要。
常在河边走,哪有不湿鞋!但如果能遵守下面的要领就可以少湿鞋甚至不湿鞋!
1)用mv替代rm,不要着急删除,而是先移动到回收站“/tmp”。
2)删除前请务必做好备份,最好是异机备份,出现问题随时可还原。
3)如果非要删除,则请用find替代rm,包括通过系统定时任务等清理文件方法。
下面是在生产环境中删除文件或目录的教安全的方法,命令如下:
find . -type f -name "*.txt" -mtime +7|xargs rm -f #与xargs搭配使用,具体用法见find命令的详细讲解。
find . -type f -mtime +7 -exec rm {} \; #使用find的exec。
4)如果非要通过rm命令删除,则请先切换目录再删,能不适用通配符的就尽量不用通配符。对文件的删除禁止使用"rm -rf 文件名"方法,因为“rm -rf”误删除目录时并不会有提示,该操作非常危险。最多使用"rm -f 文件名"方法,推荐使用“rm 文件名”方法。
[root@centos7 /data]# mkdir /oldboy
[root@centos7 /data]# touch /oldboy/test{1..2}
[root@centos7 /data]# cd oldboy/
[root@centos7 /data/oldboy]# rm -f test{1..2}
[root@centos7 /data/oldboy]# ls
5)如果非要使用通配符,则请按下面的方法进行:
[root@centos7 /data]# cd /oldboy/
[root@centos7 /data/oldboy]# touch a b
[root@centos7 /data/oldboy]# ls
a b
[root@centos7 /data/oldboy]# rm -f ./* #加上“./”。禁止使用rm -rf /oldboy/*,这个命令如果多了空格可能会带来灾难。
[root@centos7 /data/oldboy]# ls
[root@centos7 /oldboy]# touch a b
[root@centos7 /oldboy]# ls
a b
[root@centos7 /oldboy]# rm -rf /oldboy/*
#“*”的前面如果不小心多了空格,则会删除当前目录的所有内容,例如下面的命令。
[root@centos7 /oldboy]# rm -rf /oldboy/ * #会把当前目录(根)下的目录、文件全部删除。
6)额外再补充一点,要慎用“rsync-delete”。
多数情况下,删除后是可以恢复的(例如,可通过恢复工具ext3grep来实现),但一定会影响业务,例如,造成停机,或者数据丢失了较长时间,用户访问不了等。未雨绸缪永远比发生了再解决好得多。
【命令星级】 ★☆☆☆☆
【功能说明】
rmdir命令用于删除空目录(remove empty directories),当目录不为空时,命令不起作用。
【语法格式】
rmdir [option] [directory]
rmdir [选项] [目录]
**说明:**rmdir命令以及后面的选项和文件目录,每个元素之间都至少要有一个空格,且命令后面只能接目录。
【选项说明】
表2-13针对该命令的参数选项进行了说明。
表2-13 rmdir命令的参数选项及说明
**范例2-48:**不能删除非空目录。
[root@centos7 ~]# mkdir -p dir/a/b
[root@centos7 ~]# tree dir/
dir/
└── a
└── b
2 directories, 0 files
[root@centos7 ~]# rmdir dir/
rmdir: failed to remove ‘dir/’: Directory not empty
#目录不为空,无法删除。
#如果目录下有普通文件,则需要先将这些普通文件mv或rm。如果只剩下空目录,就可以使用-p参数递归删除空目录了。
**范例2-49:**参数-p递归删除空目录。
[root@centos7 ~]# rmdir -pv dir/a/b/ #递归删除还是需要将所有目录结构都列出来。
rmdir: removing directory, ‘dir/a/b/’
rmdir: removing directory, ‘dir/a’
rmdir: removing directory, ‘dir’
#当删除多个空目录时,目录名之间使用空格隔开。
**提示:**rmdir命令在实际工作中使用的极少。