标签为 教训 的文章

我吃一堑,你长一智 之 使用 .* 匹配文件与目录导致大错

参考资料:
http://stackoverflow.com/questions/2910049/how-to-use-the-wildcard-in-bash-but-exclude-the-parent-directory

事故缘由:
在我的本地home目录下,为了修改所有隐藏文件的属性,使用了.*来匹配执行chown -R,结果导致了整个/home目录以及下面所有其它用户目录的属性都被修改了。最直接的后果就是导致所有其他的用户都无法登陆服务器了,因为我们采用了SSH Key。
而问题的根本原因在于,使用.*在Linux下匹配文件和目录时,.和..会被匹配到。
而即使是这样,那也不会导致问题吧?但事实上并非如此,因为对于/dir1/dir2/dir3/dir4/dir5这样的一个目录结构,.代表的当前目录为dir5,而..则代表上级目录dir4。

正所谓无图无真相,下面是我的相关操作步骤,可以清楚的看到使用.*匹配之后,直接修改了目录dir4与dir5的属性。
chown_hole

因此,正确的做法,应该使用正则表达式 .[^.]* 来精确匹配当前目录下的隐藏文件。
chown_hole_2

最后,我想试一下rm和mv会造成什么样严重的后果,却发现执行rm和mv在匹配.*时会进行保护,并不会造成问题。
chown_hole_3

chown_hole_4

12 Comments