Linux常用命令-rm

命令

rm

描述

remove files or directories
删除文件或目录

用法

1
rm [OPTION]... FILE...

选项

1
2
3
4
5
6
7
8
9
10
Options:
-f 强制删除,不显示错误信息
-i 每次删除前先提示
-I 只在删除三个以上文件或递归删除目录时提示
-r或-R 递归删除目录
-d 删除空目录
-v 显示详情
--one-file-system 禁止跨文件系统删除,只支持删除当前文件系统中的文件或目录
--no-preserve-root 不特别对待/根目录
--preserve-root 不要删除根目录/,默认选项

注意

执行rm命令前一定要确认当前所在的目录pwd,避免误删除
建议每次删除前先通过ls过滤下要删除的文件列表,然后再删除,如rm -rf test*.log,不建议直接使用rm -rf *,删除软链接文件时,不建议使用-f选项
删除软链接目录时,目录最后一定不要加/,否则将删除源目录下的所有文件

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
$ alias | grep rm
alias rm='rm -i'
$ touch a b c d
$ ls
a b c d
# -i每次删除前均提示
$ rm -i a b c d
rm: remove regular empty file ‘a’? y
rm: remove regular empty file ‘b’? y
rm: remove regular empty file ‘c’? y
rm: remove regular empty file ‘d’? y
$ ls
$ touch a b c d
# -I删除3个以上文件时提示,只需要确认一次即可
$ rm -I a b c d
rm: remove 4 arguments? y
$ ls
$ mkdir dir1 dir2
$ echo aaa > dir1/a
# -r递归删除目录
$ rm -r dir1
rm: descend into directory ‘dir1’? y
rm: remove regular file ‘dir1/a’? y
rm: remove directory ‘dir1’? y
# -d删除空目录
$ rm -d dir2
rm: remove directory ‘dir2’? y
$ touch a b c
$ mkdir dir1
$ echo aaa >dir1/.aa
# 默认删除*不会删除隐藏文件,需要单独删除
$ rm -rf *
$ ls -al
-rw-r--r-- 1 root root 0 Feb 13 21:38 .aa
$ rm .aa
$ touch a{1..5}
$ ls a*
a1 a2 a3 a4 a5
$ rm -rfv a*
removed ‘a1’
removed ‘a2’
removed ‘a3’
removed ‘a4’
removed ‘a5’

# 删除特殊文件,例如以-开头的文件,需要指定路径
$ touch ./-af
$ rm ./-af
rm: remove regular empty file ‘./-af’? y
# 或加--
$ rm -- -af
rm: remove regular empty file ‘-af’? y

# 删除软链接目录时,目录最后一定不要加/,否则将删除源目录下的所有文件
$ tree -a
├── a
├── b -> a
├── dir1
│   └── a
└── dir2 -> dir1
# 删除链接文件时,一定要确认提示信息为删除链接文件本身,而非源文件
$ rm b
rm: remove symbolic link ‘b’? y
$ rm -r dir2
rm: remove symbolic link ‘dir2’? n
# 如果在删除软链接目录后面加了/,则表示删除源目录下的所有文件,慎重!!!
$ rm -r dir2/
rm: descend into directory ‘dir2/’? y
rm: remove regular file ‘dir2/a’? y
rm: remove directory ‘dir2/’? y
rm: cannot remove ‘dir2/’: Not a directory
$ touch a
$ ln -s a b
$ mkdir dir1
$ echo aaa > dir1/a
$ ln -s dir1 dir2
$ tree
├── a
├── b -> a
├── dir1
│   └── a
└── dir2 -> dir1
# 软链接目录后不加/,表示删除软链接本身
$ rm -rf dir2
$ tree
├── a
├── b -> a
└── dir1
└── a
$ ln -s dir1 dir2
# 软链接目录后加/,表示删除源目录下的所有文件,而非软链接本身
$ rm -rf dir2/
$ tree
├── a
├── b -> a
├── dir1
└── dir2 -> dir1
$ ll dir1
total 0

# 防止文件误删除
# +i禁止更改和删除文件
$ chattr +i a
$ lsattr a
----i----------- a
$ echo aaa > a
-bash: a: Permission denied
$ echo aaa >> a
-bash: a: Permission denied
$ rm a
rm: remove regular empty file ‘a’? y
rm: cannot remove ‘a’: Operation not permitted
# a可以修改文件但不能删除
$ chattr =a a
$ lsattr a
-----a---------- a
$ echo aaa > a
-bash: a: Operation not permitted
$ echo aaa >> a
$ more a
aaa
aaa
$ rm a
rm: remove regular file ‘a’? y
rm: cannot remove ‘a’: Operation not permitted
# 取消所有特殊属性,即还原文件原始状态
$ chattr = a
# 或
$ chattr -ia a
$ lsattr a
---------------- a

# 防止目录误删除
# +a可以新增和修改目录下的文件,但不能删除文件
$ chattr +a dir1
$ lsattr -d dir1
-----a---------- dir1
$ echo aa >> dir1/a
$ echo bbb > dir1/b
$ rm dir1/b
rm: remove regular file ‘dir1/b’? y
rm: cannot remove ‘dir1/b’: Operation not permitted
# 通过vim编辑目录下的文件时可能会提示"E207: Can't delete backup file",即无法删除vim自动生成的备份文件b~
$ ll dir1
-rw-r--r-- 1 root root 7 Feb 13 22:23 a
-rw-r--r-- 1 root root 9 Feb 13 22:23 b
-rw-r--r-- 1 root root 4 Feb 13 22:23 b~
$ rm -rf dir1
rm: cannot remove ‘dir1/a’: Operation not permitted
rm: cannot remove ‘dir1/b’: Operation not permitted
rm: cannot remove ‘dir1/b~’: Operation not permitted
# 取消限制
$ chattr -a dir1
$ rm -rf dir1