每天一个linux命令:rm
更多精彩请关注:www.zicreate.com
1.命令功能
rm 即 remove files or directories,删除文件或目录命令,也可以将某个目录及其下属的所有文件及其子目录均删除掉。对于链接文件,只是删除整个链接文件,而原有文件保持不变。
注意:使用rm命令要格外小心。因为一旦删除了一个文件,就无法再恢复它。所以,在删除文件之前,最好再看一下文件的内容,确定是否真要删除。rm命令可以用”-i”选项,这个选项在使用文件扩展名字符删除多个文件时特别有用。使用这个选项,系统会要求你逐一确定是否要删除。这时,必须输入y并按Enter键,才能删除文件。如果仅按Enter键或其他字符,文件不会被删除。
新手注意:rm -rf *
删除当前目录下的所有文件,这个命令很危险,应避免使用。
2.命令格式
rm (选项)(参数)
3.命令参数
-d:直接把欲删除的目录的硬连接数据删除成0,删除该目录;
-f:强制删除文件或目录;
-i:删除已有文件或目录之前先询问用户;
-r或-R:递归处理,将指定目录下的所有文件与子目录一并处理;
--preserve-root:不对根目录进行递归操作;
-v:显示指令的详细执行过程。
4.使用场景
rm 命令非常简单,后面直接跟文件或目录即可。
常见操作如下:
rm file.txt # 删除一个文件;
rm -r /tmp/test # 删除一个目录;
rm -rf /tmp/test/* # 删除目录下的所有文件;这个命令的危险之处就在于有时操作太快而稍不留意命令就会变成:“rm -rf /tmp/test/ [空格] *”!!!这种情况下将会删除/tmp/test/还有rm命令执行目录下的所有文件。如果rm命令是在“/”根目录下执行的,那么整个系统就完了。
rm *.txt # 删除当前目录下所有的txt文件
rm test[1-3].txt # 删除当前目录下的test1.txt test2.txt test3.txt;
rm test{1,3,4}.txt # 删除当前目录下的test1.txt test3.txt test4.txt;
关于上面命令中通配符的讲解在前期的文章中已经有所涉及,本文不再详解。
扩展
(1)rmdir
rmdir 删除空目录,一个目录被删除之前必须是空的。如果目录非空会报错。
命令格式
rmdir (命令参数) 目录名
命令参数
-p或--parents:删除指定目录后,若该目录的上层目录已变成空目录,则将其一并删除;
--ignore-fail-on-non-empty:此选项使rmdir命令忽略由于删除非空目录时导致的错误信息;
-v或-verboes:显示命令的详细执行过程;
使用场景
$ rmdir /tmp/test/subdir
这个命令我基本没用过,因为 rm 已经可以完成目录删除工作了。
(2)配合find使用
在目录/tmp/test/ 下面查找文件名为”test*.txt” 类型的文件并删除:
$ find /tmp/test/ -iname “test*.txt” -exec rm {} \;
find 为查找命令,后期文章将会详解。
(3)自定义回收站功能
为了防止错误删除文件,保证所有用户都能将 rm 命令删除的文件先放入回收站,可以在/etc/profile文件最后添加如下代码:
mkdir -p ~/.trash
alias rm=trash
trash()
{
echo "File move to ~/.trash/"
mv $@ ~/.trash/
}
修改后执行 # source /etc/profile
重载环境变量,使修改生效(此需要root权限)。使用此种方法之后,rm 命令的各种命令参数选项就不再有效了。
如果是只想修改自己的rm命令,则修改“~/.bashrc”,同样在文件最后添加上面的代码。如果该文件中有“alias rm=’rm -i’”这样的代码,则注释掉该行(修改为“#alias rm=’rm -i’”)。
修改后执行 # source /etc/profile
重载环境变量。
演示如下:
# touch test1.txt test2.txt test3.txt test4.txt
# rm *
# ls /root/.trash/
test1.txt test2.txt test3.txt test4.txt
如果要清空回收站可以使用如下方法:
方法1:
$ /bin/rm -rf ~/.trash/*
方法2:
$ \rm -rf ~/.trash/*
方法3:
$ unaslias rm #(这只是临时取消rm的别名)
$ rm -rf ~/.trash/*