linux不像windows——所有删除后的文件(除windows下的大文件或特殊操作下删除的文件)都会暂时存储于垃圾回收站,当自己某一天想到误删/错删了一些重要文件时,还有挽救的机会,如若不然呢,手动清空回收站,释放内存即可。Linux下用户操作文件的权限受到很多限制,比如对非当前用户home根目录下的所有文件,一般情况下需使用rm/rmdir等命令操作。对于新手来说,rm命令是一个危险的命令,一不小心,可能就误输入“rm -rf /"之类的命令,删除了系统下的重要文件,当再次开机进入系统的时候,发现系统已然崩溃。诸如此类,种种错误,余不一一。
那么,怎么做才能把我们操作文件对系统的威胁降到最低呢?方法如下:
No.1 alias重定义rm命令:
删除文件时,使用交互式删除是一种良好的习惯。因此,我们可以这么做:
alias rm='rm -i'
当然此命令仅限当前登陆有效,alias命令重定义范围将会在最后介绍。
使用但是碰到当前目录有很多子目录的文件夹时,就需要一一确认,如下:
创建多层文件:
mkdir -p test/test_{1,2}/test_test_{1,2,3}
tree命令显示如下:
tree test
test
├── test_1
│ ├── test_test_1
│ ├── test_test_2
│ └── test_test_3
└── test_2
├── test_test_1
├── test_test_2
└── test_test_3
8 directories, 0 files
删除test目录:
rm -r test
接下来的操作就显得有点尴尬:
rm:是否进入目录"test"? y
rm:是否进入目录"test/test_2"? y
rm:是否删除目录 "test/test_2/test_test_3"? y
rm:是否删除目录 "test/test_2/test_test_1"? y
rm:是否删除目录 "test/test_2/test_test_2"? y
rm:是否删除目录 "test/test_2"? y
rm:是否进入目录"test/test_1"? y
rm:是否删除目录 "test/test_1/test_test_3"? y
rm:是否删除目录 "test/test_1/test_test_1"? y
rm:是否删除目录 "test/test_1/test_test_2"? y
rm:是否删除目录 "test/test_1"? y
rm:是否删除目录 "test"? y
麻烦之处,就在于不断的确认,怎么避免呢? so easy。
rm -rf test
搞定。
No.2 增加回收站
首先附上代码,第一眼看上去不明觉厉,仔细瞧瞧原来只是正则表达式加函数实现伪删除罢了:
myrm(){ D=/tmp/$(date +%Y-%m-%d-del); mkdir -p $D; mv "$@" $D && echo "move to $D success..."; }
alias rmove='myrm'
如此一来,删除重要文件时我们可以使用rmove命令:
rmove test
结果如下:
move to /tmp/2015-10-29-del success...
再转到/tmp目录下我们就看到了刚刚'删除'的文件了。
再强调以下几点,关于alias的作用范围:
- 在terminal输入alias命令:alias的效力仅及于该次登入的操作。
- 在~/.bashrc存储alias命令:只对当前用户启动bash后才会生效。
- 在/etc/profile存储alias命令:对所有用户都生效。
注意:alias重命名命令的作用范围取决于存贮位置,具体情况参考:
取消重命名unalias:
unalias rmove
或者在配置文件中删除相应alias命令。