今天在CU 论坛上学习shell,看到 l shell基础二:查找技巧,find及xargs的使用 点击打开链接 时,讲解 fine 命令,当我用
fine . -type d
命令查找当前目录下的目录文件时,发现普通文件也会显示出来。举个例子
我在目录test 里面新建了一个目录 test1 以及一个文件 file ,当我准备用上面的命令查找目录 test1 时,事与愿违,test 目录下的所有文件都会出来,包括 test1。后来我又用
find . -perm 775
在当前目录下查找属性为 775 的文件(包括普通文件,目录,符号文件,字符文件等等)时,发现结果出来
.
./test1
即表示显示出了当前目录 test 与 当前目录下的目录 test1。所以这即可表明,在查找目录时,虽然用的路径是某一目录 test 下,但查找也会包括当前目录 test。
并且,查找时可以一层一层向里查找,即如果我在 test1 目录下再新建一个目录 test2,当我在 test 目录下查找时,也会将 test2查找出来,返回路径名为:
./test/test1/test2
PS:关于 find,还有更多好玩的参数,可以本文第一行给出的链接。
一点疑问:
在继续学习时,发现 find 后面的参数 -perm 加权限值时有个特点。如果加三位数字,这是毫无疑问的,比较简单。如果是想要所有用户均满足权限,也很简单,用下面之林即可:
find . -perm -7
这是查找当前目录所有用户的权限均为 rwx 的文件,包括 u(用户) g(组) o (其他用户)。 这里 7 也可以改为 其他值。
但是当我在 -perm 参数后加两个值或三个值时,结果就搞不明白了。
如 find . -perm -51
这是返回的结果与 find . -perm -15 的结果不一样。这个问题想了半天也没想明白,留待后续学习解决。
find + xargs 命令在学习时,有一个有趣的发现:
我的 test 目录下有四个文件,分别是普通文件 file 和 file1,还有一个目录 dir 1,还有一个是一个符号链接文件 file2。假设它们预设的权限是 rwx rwx rwx ,当我用如下指令:
find . -perm -7 -print | xargs chmod o-w
本打算将所有权限为 rwx rwx rwx 的文件的其他用户的权限改为 可读和可执行,但是后来发现这一指令对 符号链接文件不起作用。
后来查了下,发现,因为链接分两种,软链接和硬链接,它们在创建时的权限有所不同:
软链接:在创建时默认分配的权限是 lrwxrwxrwx,以后不会更改,与它所链接的文件无关,即使它链接的文件的权限值改了,它也不会改。
硬链接:在创建时的权限值与链接目标权限相同,一改全改。