rm命令学习

删除文件

rm
rm命令(remove的简写)用来删除文件。这条命令会彻底地删除文件,文件将不复存在。Linux命令行可没有“垃圾箱”或“回收站”之类的东西。shell缺少一个恢复删除文件的命令,最好一开始就小心些。
如果你想确保绝对没有人能恢复你删除的文件,即便是顶级高手也不可以恢复,请使用shred命令来代替rm命令。shred命令会重写文件多达25次,所以再想恢复被删除的文件是不可能的事。
使用rm命令很简单,甚至有些人可能会认为太容易了。

$ pwd
/home/scott/libby/by_pool/lieberman_pool
$ ls
pool_01.jpg      pool_03.jpg
pool_01.jpg_bak  pool_03.jpg_bak
$ rm pool_01.jpg_bak
$ ls
pool_01.jpg  pool_03.jpg  pool_03.jpg_bak

使用通配符一次删除多个文件

rm *
使用像“*”这样的通配符,就能删除多个文件。

$ pwd
/home/scott/libby/by_pool/lieberman_pool
$ ls
pool_01.jpg      pool_03.jpg
pool_01.jpg_bak  pool_03.jpg_bak
$ rm *_bak
$ ls
pool_01.jpg  pool_03.jpg

警告 使用通配符删除文件的时候一定要非常、非常、非常小心,否则有可能删除很多你原本不想删除的文件。

删除文件时显示执行过程

rm -v
如果你想知道rm命令执行时到底在做什么,可以使用-v(或–verbose)选项。

$ pwd
/home/scott/libby/by_pool/lieberman_pool
$ ls
pool_01.jpg      pool_03.jpg
pool_01.jpg_bak  pool_03.jpg_bak
$ rm -v *_bak
removed 'pool_01.jpg_bak'
removed 'pool_03.jpg_bak'
$ ls
pool_01.jpg pool_03.jpg

2.37 防止删除重要文件
rm -i
-i选项(或–interactive)可以提供一定的安全机制。在删除每个文件之前,它会先询问你是否要删除。

$ pwd
/home/scott/libby/by_pool/lieberman_pool
$ ls
pool_01.jpg      pool_03.jpg
pool_01.jpg_bak  pool_03.jpg_bak
$ rm -i *_bak
rm: remove regular file 'pool_01.jpg_bak'?  y
rm: remove regular file 'pool_03.jpg_bak'?  y
$ ls
pool_01.jpg   pool_03.jpg

y表示同意删除文件,n表示忽略这个文件,并继续处理下一个文件。

删除空目录

rmdir
删除目录

$ pwd
/home/scott/libby/by_pool
$ ls
pool_02.jpg  lieberman_pool  lieberman_pool_bak
$ ls lieberman_pool_bak
pool_01.jpg      pool_03.jpg
pool_01.jpg_bak  pool_03.jpg_bak
$ rm lieberman_pool_bak
rm: cannot remove 'lieberman_pool_bak/':  Is a directory
$ rmdir lieberman_pool_bak
rmdir: 'lieberman_pool_bak/': Directory not empty

rmdir命令只能删除空目录。

删除文件和非空的目录

rm -Rf
删除非空目录,还有一种更为简单的方法:把-R(或–recursive)和-f(或–force)选项结合起来使用。-r选项告诉rm命令进入到它发现的每个子目录中去删除文件,而-f选项只是告诉rm命令完成任务但不要因为些细节问题(比如文件夹非空)。

$ pwd
/home/scott/libby/by_pool
$ ls
pool_02.jpg  lieberman_pool  lieberman_pool_bak
$ ls lieberman_pool_bak
pool_01.jpg      pool_03.jpg
pool_01.jpg_bak  pool_03.jpg_bak
$ rm -Rf lieberman_pool_bak
$ ls
pool_02.jpg lieberman_pool

警告 rm–Rf命令有可能损坏你的重要文件和系统。
经典的Linux警告就是,当作为root登录时,不要输入rm -Rf /命令。这样你将删除你的系统。
一般来说,在rm–Rf命令中使用通配符要小心谨慎。rm -Rf libby和rm -Rf libby 之间有着巨大的差异。前者会删除工作目录中以libby开头的所有东西,后者会删除任何名称恰好是libby的文件或文件夹,然后再删除目录中的所有其他东西。
永远不要输入rm -Rf .
/*删除以点号.作为名称开始的目录,因为这也匹配…,最终将删除当前工作目录的上级目录的所有东西。
再重申一次:作为普通用户,一定要慎用rm –Rf命令。作为root用户使用rm–Rf命令时一定要保持高度警惕。

删除难缠的文件

在结束rm命令的讨论之前,你应该了解一些这个命令与系统中特定文件之间的关系。首先,不管怎么删除,都不可能删除目录.和…,因为它们是保持文件系统层次结构所必需的。况且,为什么非要删除它们呢?就让它们呆在那儿吧。
如何删除名称中带有空格的文件呢?调用rm命令的普通方法(命令名,后面跟着文件名),是不会起作用的,因为rm命令认为你说的是两个不同的文件。实际上,删除Cousin Harold的图片并不太难。只需要将文件的名称用引号括起来就可以了。

$ ls
cousin harold.jpg -cousin_roy.jpg cousin_beth.jpg
$ rm cousin harold.jpg
rm: cannot remove 'cousin': No such file or  directory
rm: cannot remove 'harold.jpg': No such file or  directory
$ rm "cousin harold.jpg"
$ ls
-cousin_roy.jpg cousin_beth.jpg

删除名称由“-”字符开始的文件

$ ls
-cousin_roy.jpg  cousin_beth.jpg
$ rm -cousin_roy.jpg
rm: invalid option -- c
Try 'rm --help' for more information.

rm命令看到“-”符号时,会认为它是一个选项的开始,但是它并不认识由字母c开始的选项。接着再遇到的是ousin_roy.jpg,它更不知道如何处理了。
有两种解决方案。你可以在有问题的文件名称的前面放 “–”,它会告诉命令:跟在后面的任何东西都不能作为选项,而是文件或文件夹的名称。

$ ls
-cousin_roy.jpg cousin_beth.jpg
$ rm -- -cousin_roy.jpg
$ ls
cousin_beth.jpg

除此以外,还可以使用.作为路径名的一部分,这样,就可以在-干扰rm命令,让它以为文件名是实际选项之前就避免这个问题。

$ ls
-cousin_roy.jpg cousin_beth.jpg
$ rm ./-cousin_roy.jpg
$ ls
cousin_beth.jpg

还有,不要在文件名开始的地方用连字符。

  • 20
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值