
2.9 rm:删除文件或目录
2.9.1 命令详解
【命令星级】 ★★★★★
【功能说明】
rm命令可以理解为英文单词remove的缩写,其功能是删除一个或多个文件或目录(remove files or directories)。这是Linux系统里最危险的命令之一,请慎重使用。
【语法格式】
rm [option] [file] rm [选项] [<文件或目录>]
说明:
rm命令以及后面的选项和文件目录,每个元素之间都至少要有一个空格。
【选项说明】
表2-12针对该命令的参数选项进行了说明。
表2-12 rm命令的参数选项及说明

2.9.2 使用范例
示例准备:
[root@oldboy ~]# mkdir -p /data/{dir1,dir2,dir3} #<==使用绝对路径创建目录。 [root@oldboy ~]# touch /data/{file1.txt,file2.txt,file3.txt} [root@oldboy ~]# tree /data/ /data/ ├── dir1 ├── dir2 ├── dir3 ├── file1.txt ├── file2.txt └── file3.txt 3 directories, 3 files [root@oldboy ~]# cd /data/ [root@oldboy data]# ls dir1 dir2 dir3 file1.txt file2.txt file3.txt
范例2-45:不带参数删除例子实践。
[root@oldboy data]# rm file3.txt rm: remove regular empty file 'file3.txt'? n #<==输入y后就会删除文件,不想删除则输入n。 [root@oldboy data]# alias rm alias rm='rm -i' #<==上面会出现提示的原因是rm设置了系统别名,默认使用了-i参数。 #<==屏蔽别名的方法已经在cp命令讲解中介绍过,这里不再赘述。
范例2-46:强制删除例子实践。
[root@oldboy data]# rm -f file3.txt #<==-f参数强制删除,不提示。 [root@oldboy data]# ls dir1 dir2 dir3 file1.txt file2.txt
提示:使用-f参数强制删除会直接覆盖系统定义的别名。
范例2-47:递归删除例子实践。
[root@oldboy data]# mkdir -p dir1/a/b [root@oldboy data]# tree dir1/ dir1/ └── a └── b 2 directories, 0 files [root@oldboy data]# rm dir1 #<==无参数就无法删除目录了。 rm: cannot remove 'dir1': Is a directory [root@oldboy 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 #<==备注: 加上-f参数就不需要一一确认了,例如rm -rf dir1。 删除的对象若不是目录(文件)就不要使用-r参数,这样做会很危险,也没有必要。
2.9.3 关于删除的实践经验
常在河边走,哪有不湿鞋!但是如果能遵守下面的要领就可以少湿鞋甚至不湿鞋!
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@oldboy /]# cd /oldboy/ [root@oldboy oldboy]# rm -f test1 test2
5)如果非要用通配符,请按下面方法:
[root@oldboy /]# cd /oldboy/ [root@oldboy oldboy]# rm -f ./* #<==加上"./"。 #<==禁止使用rm -fr /oldboy/*,这个命令如果多加了空格可能会带来灾难。 [root@oldboy /]# rm -fr /oldboy/* #<==“*”的前面不小心多了空格,会删除当前目录的所有内容,例如下面的命令。 [root@oldboy /]# rm -fr /oldboy/ * #<==会把当前目录(根)下面的目录全部删除。
6)额外再补充一点,要慎用“rsync--delete”。
大多数情况下,数据删除后是可以恢复的(例如:可通过恢复工具ext3grep来实现),但一定会影响业务,例如:造成停机,或者数据丢了较长时间,用户访问不了等。未雨绸缪永远比发生了再解决要好得多。
更多内容可参考老男孩博文:http://oldboy.blog.51cto.com/2561410/1687300。