前几天,也即春节假期接近尾声(送年接财神)的时候,被GitLab的误删数据的事件震动了整个“数据库圈”。
无论如何,我们多多少少都应该要从中吸取教训。从其他角度来看,还是要看使用命令的习惯。作为数据库或者
操作系统工作者,多多少少,或者说肯定会用到rm与rm -rf 命令的。至于rm与rm -rf 两个命令如何跟目录或文件名和空格“ ”或者
星号“*”搭配使用,这就是看操作者使用命令的习惯了。有人贪图方便,什么都用上rm或rm -rf跟星号“*”搭配,这个方便。
有时候,删除的东西特别多,不能一一地进行删除,这个时候,可以考虑用星号“*”代替多个文件或者目录名。我个人不常用星号“*”,
从平时的操作安全角度来考虑,我觉得这是个可靠的习惯。但是从速度的角度来考虑,这是个“太慢”的习惯。
总而言之,我看到案例的文章的时候,我也是一时想不起来,这rm与rm -rf 跟空格有什么关系,尽管之前做过这两个命令搭配空格的
测试。看案例的时候,我是坐在回去工作的巴士上,我想想还是自己再次亲手测试一遍吧,于是打开电脑,在自己的测试环境坐在车上测试了一番:
(以下就是当时车上的测试过程的命令):
其实,经过以下测试之后,我还是认为:操作习惯最重要。还有就是:能够使用rm与rm -rf 误删除数据的最终的罪魁祸首还是你的操作习惯
以及星号“*”。你不用星号,就算你使用rm与rm -rf 命令的时候,没有星号的情况下,你怎么搭配空格“ ”,都不会导致误删除数据。可以测试一番。
[oracle@susu research]$
[oracle@susu research]$ cd ..
[oracle@susu ~]$ cd mydoc
[oracle@susu mydoc]$ ls
susu1.txt myawrrpt.lst mysong.tet prodawrrpt.lst
--创建测试目录:
[oracle@susu mydoc]$ cd ..
[oracle@susu ~]$
[oracle@susu ~]$
[oracle@susu ~]$ mkdir testdir
[oracle@susu ~]$
[oracle@susu ~]$ ls
afiedt.buf backup dirhome homedir logmnr mydoc mytest.doc oradata research suxingkai.csv testdir users01.dbf
[oracle@susu ~]$
[oracle@susu ~]$ cd mydoc
[oracle@susu mydoc]$ ls
susu1.txt myawrrpt.lst mysong.tet prodawrrpt.lst
[oracle@susu mydoc]$ pwd
/home/oracle/mydoc
--复制文件到测试目录:
[oracle@susu mydoc]$ cp * /home/oracle/testdir
--进入测试目录查看新复制的文件:
[oracle@susu mydoc]$ cd ..
[oracle@susu ~]$
[oracle@susu ~]$ cd testdir/
[oracle@susu testdir]$ ls
susu1.txt myawrrpt.lst mysong.tet prodawrrpt.lst
--创建另外的测试目录:
[oracle@susu testdir]$ cd ..
[oracle@susu ~]$ mkdir textdir
[oracle@susu ~]$
[oracle@susu ~]$ cd mydoc
--尝试复制文件到新的测试目录:
[oracle@susu mydoc]$ ls
susu1.txt myawrrpt.lst mysong.tet prodawrrpt.lst
[oracle@susu mydoc]$
[oracle@susu mydoc]$
[oracle@susu mydoc]$ cp abc * /home/oracle/textdir
cp: cannot stat `abc': No such file or directory
[oracle@susu mydoc]$
[oracle@susu mydoc]$ cd ..
[oracle@susu ~]$
[oracle@susu ~]$
[oracle@susu ~]$ cp abc * /home/oracle/textdir
cp: cannot stat `abc': No such file or directory
cp: omitting directory `dirhome'
cp: omitting directory `homedir'
cp: omitting directory `logmnr'
cp: omitting directory `mydoc'
cp: omitting directory `oradata'
cp: omitting directory `research'
cp: omitting directory `testdir'
cp: omitting directory `textdir'
[oracle@susu ~]$ ls
afiedt.buf backup dirhome homedir logmnr mydoc mytest.doc oradata research suxingkai.csv testdir textdir users01.dbf
[oracle@susu ~]$
[oracle@susu ~]$
--测试目录里创建一个目录:
[oracle@susu ~]$ cd testdir
[oracle@susu testdir]$
[oracle@susu testdir]$ ls
susu1.txt myawrrpt.lst mysong.tet prodawrrpt.lst
[oracle@susu testdir]$ mkdir mydir
[oracle@susu testdir]$ ls
susu1.txt myawrrpt.lst mydir mysong.tet prodawrrpt.lst
--新创建的目录里创建一个新文件:
[oracle@susu testdir]$ cd mydir
[oracle@susu mydir]$
[oracle@susu mydir]$ touch mydddd
[oracle@susu mydir]$ ls
mydddd
[oracle@susu mydir]$ cd ..
[oracle@susu testdir]$ cd ..
[oracle@susu ~]$
[oracle@susu ~]$ ls
afiedt.buf backup dirhome homedir logmnr mydoc mytest.doc oradata research suxingkai.csv testdir textdir users01.dbf
--查看另外的测试 目录:
[oracle@susu ~]$ cd textdir
[oracle@susu textdir]$ ls
afiedt.buf backup susu1.txt myawrrpt.lst mysong.tet mytest.doc prodawrrpt.lst suxingkai.csv users01.dbf
[oracle@susu textdir]$
[oracle@susu textdir]$ cd \
[oracle@susu ~]$
[oracle@susu ~]$ ls
afiedt.buf backup dirhome homedir logmnr mydoc mytest.doc oradata research suxingkai.csv testdir textdir users01.dbf
[oracle@susu ~]$
[oracle@susu ~]$ cd textdir/
[oracle@susu textdir]$ ls
afiedt.buf backup susu1.txt myawrrpt.lst mysong.tet mytest.doc prodawrrpt.lst suxingkai.csv users01.dbf
[oracle@susu textdir]$ mkdir hhdir
[oracle@susu textdir]$
[oracle@susu textdir]$ cd hhdir
[oracle@susu hhdir]$ touch hhtext
[oracle@susu hhdir]$ touch hh.text
[oracle@susu hhdir]$ ls
hhtext hh.text
--尝试使用rm abc *删除当前目录的文件:--星号前有一个空格
[oracle@susu hhdir]$ cd ..
[oracle@susu textdir]$ ls
afiedt.buf backup susu1.txt hhdir myawrrpt.lst mysong.tet mytest.doc prodawrrpt.lst suxingkai.csv users01.dbf
[oracle@susu textdir]$
[oracle@susu textdir]$ rm abc *
rm: cannot remove `abc': No such file or directory
rm: cannot remove `hhdir': Is a directory
[oracle@susu textdir]$ ls
hhdir
[oracle@susu textdir]$
#可知还剩下一个目录未被删除。
--再次测试:
[oracle@susu textdir]$ touch mysong.text
[oracle@susu textdir]$ ls
hhdir mysong.text
[oracle@susu textdir]$
[oracle@susu textdir]$ touch yoursongs.text
[oracle@susu textdir]$ ls
hhdir mysong.text yoursongs.text
[oracle@susu textdir]$
[oracle@susu textdir]$ rm my *
rm: cannot remove `my': No such file or directory
rm: cannot remove `hhdir': Is a directory
[oracle@susu textdir]$
[oracle@susu textdir]$
[oracle@susu textdir]$ ls
Hhdir
--又再次创建测试文件:
[oracle@susu textdir]$ touch mysong
[oracle@susu textdir]$
[oracle@susu textdir]$
[oracle@susu textdir]$ touch yoursong
[oracle@susu textdir]$ ls
hhdir mysong yoursong
[oracle@susu textdir]$
--使用 rm my * -rf进行删除当前目录的所有文件与目录:
[oracle@susu textdir]$
[oracle@susu textdir]$ rm my * -rf
[oracle@susu textdir]$ ls
[oracle@susu textdir]$ ls
[oracle@susu textdir]$
--使用 rm my * -rf进行删除当前目录以my开头的文件与目录:
[oracle@susu testdir]$ ls
susu1.txt myawrrpt.lst mydir mysong.tet prodawrrpt.lst
[oracle@susu testdir]$
[oracle@susu testdir]$ rm -rf my*
[oracle@susu testdir]$ ls
susu1.txt prodawrrpt.lst
--再次rm my * -rf尝试只删除当前目录以my开头的文件与目录:
[oracle@susu testdir]$ mkdir mydir
[oracle@susu testdir]$ touch mysong.tet
[oracle@susu testdir]$
[oracle@susu testdir]$ ls
susu1.txt mydir mysong.tet prodawrrpt.lst
[oracle@susu testdir]$ touch myawrrpt.lst
[oracle@susu testdir]$ ls
susu1.txt myawrrpt.lst mydir mysong.tet prodawrrpt.lst
[oracle@susu testdir]$ rm -rf my *
[oracle@susu testdir]$ ls
[oracle@susu testdir]$
#发现当前目录下的文件与目录全部被删除了。
--考虑:rm与rm -rf删除文件或者目录时候带空格而不带星号的时候会是怎么样的结果呢?
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31392094/viewspace-2133093/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/31392094/viewspace-2133093/