原文发表于《网络安全和信息化》2017年第3期,现转发到博客。

find是Linux中功能强悍的文件查找,它可以实现文件的精确查找,是在日常运维工作中最常使用的之一。find支持的查找条件十分多,用法也比较复杂,其中按文件属性或是权限进行查找就是一种相对较为中级的find查找方式,好多初学者常常对这两种查找方式理解和把握不够透彻,本文就分别梳理了怎样来设定和使用这两种查找条件。

1.依照文件属性查找

文件属性主要是指文件的所有者和所属组这两种所属关系。按文件属性查找,主要有以下选项:

l-user用户名:按照所有者查找;

l-group组名:按照所属组查找;

l-uidUID:按照UID查找;

l-gidGID:按照GID查找;

l-nouser:查找没有所有者的文件;

l-nogroup:查找没有所属组的文件。

例:在/home目录下查找所有属于用户student的文件或目录。

[root@localhost~]#find/home-userstudent-ls

4009034drwx------4studentstudent40969月816:33/home/student

rw-r--r--1studentstudent1761月162015home/student/.bash_profile

……

例:在/var目录中查找所有者为root且所属组为mail的文件或目录。

[root@localhost~]#find/var-userroot-groupmail-ls

6553094drwxrwxr-x2rootmail409612月2311:24/var/spool/mail

有时可能会碰到这样的情况,例如文件/tmp/test属于zhangsan所有,倘若将用户zhangsan删掉,这么/tmp/test的所有者和所属组就弄成了zhangsan以前的uid和gid。

[root@localhost~]#ll/tmp/test//文件属于zhangsan

-rw-r--r--.1zhangsanzhangsan012月2305:59/tmp/test

[root@localhost~]#userdel-rzhangsan//删掉zhangsan用户

[root@localhost~]#ll/tmp/test//文件的所有者和所属组弄成了uid和gid

-rw-r--r--.1504504012月2305:59/tmp/test

这时我们也可以通过uid或gid去查找这类文件。

[root@localhost~]#find/tmp-uid504-ls

7971890-rw-r--r--1504504012月2312:12/tmp/test

虽然对于这些正常的所属关系是用户名或组名的文件,同样也可以通过uid或是gid进行查找。例如用户student的uid是500,我们通过uid在/home目录中查找属于student的文件。

[root@localhost~]#find/home-uid500-ls

4009034drwx------4studentstudent40969月816:33/home/student

rw-r--r--1studentstudent1761月162015/home/student/.bash_profile

……

对于/tmp/test这样的所有者和所属组弄成了uid和gid的文件,就称为没有所有者或所属组的文件linux设置默认网关linux获取当前时间,这样的文件在系统中有一定危险性,所以我们可以通过-nouser或-nogroup选项去查找这类文件。找到这类文件以后,最好是借助chown命令重新为其指定所有者和所属组。

[root@localhost~]#find/tmp-nouser-ls

7971890-rw-r--r--1504504012月2312:12/tmp/test

[root@localhost~]#find/tmp-nogroup-ls

7971890-rw-r--r--1504504012月2312:12/tmp/test

2.按照文件权限查找

按文件权限查找,须要用到-perm选项,依据对权限的设置条件不同,该选项又分为三种用法:

l-permmode:精确匹配mode所表示的条件。

l-perm/mode:任何一类用户(ugo)的权限中的任何一位(rwx)符合mode所表示的条件即可,9位权限之间存在“或”关系。

linux 文件执行权限_linux执行权限和写权限_linuxsh文件执行权限

l-perm-mode:任何一类用户(ugo)的权限中的每一位(rwx)都要同时符合mode所表示的条件,9位权限之间存在“与”关系。

比如,要在/boot目录中查找权限为755的普通文件,并显示详尽信息。我们设置查找条件为“-perm755”,可以发觉共找到两个文件,这两个文件的权限都对查找条件进行了精确匹配。

[root@localhost~]#find/boot-perm755-typef-ls

65030250-rwxr-xr-x1rootroot2542484月72015/boot/efi/EFI/redhat/grub.efi

164125-rwxr-xr-x1rootroot42221927月22015/boot/vmlinuz-2.6.32-573.el6.x86_64

下边继续在/boot目录中查找权限为750的目录,并且没有查找到任何符合条件的结果。

[root@localhost~]#find/boot-perm750-typed-ls

将查找条件更改为“-perm/750”,表示任何一个目录只要其所有者具有读写执行中的任何一项权限,或是其所属组具有读和执行中的任何一项权限linux 文件执行权限,就可以符合查找条件。须要注意的是,查找条件中的0表示忽视对相应对象的权限要求,而不是指没有任何权限。重新指定查找条件后,就可以找到好多符合要求的目录。

[root@localhost~]#find/boot-perm/750-typed-ls

22dr-xr-xr-x5rootroot10249月200:36/boot

1113drwx------2rootroot122889月200:24/boot/lost+found

650272drwxr-xr-x3rootroot10249月200:33/boot/efi

……

下边再将查找条件更改为“-perm-750”,表示所要查找的目录其所有者必须具有读写执行权限,同时其所属组必须具有读和执行权限,对其他用户的权限没有要求。从查找结果中可以发觉,之前通过条件“-perm/750”所查找下来的两个目录“/boot”和“/boot/lost+found”,此时都不在查找结果之列。

[root@localhost~]#find/boot-perm-750-typed-ls

650272drwxr-xr-x3rootroot10249月200:33/boot/efi

650282drwxr-xr-x3rootroot10249月200:33/boot/efi/EFI

650292drwxr-xr-x2rootroot10249月200:33/boot/efi/EFI/redhat

所以假如要在系统中查找所有人都有写权限的目录,则应当指定条件“-perm-222”,假如以“-perm/222”为查找条件,则是所有者、所属组或其他用户中任何一个具有写权限就会符合要求。

[root@localhost~]#find/-perm-222-typed-ls2>/dev/null

68100drwxrwxrwt2rootroot10012月2303:37/dev/shm

6541084drwxrwxrwt2rootroot409612月2303:42/var/tmp

7848974drwxrwxrwt12rootroot409612月2306:58/tmp

……

不仅读写执行这种常规权限之外,Linux系统还提供了特殊权限SUID和SGID,它们所对应的数字分别是4和2。假如要在系统中查找所有设置了SUID的文件,应指定条件“-perm-4000”。

[root@localhost~]#find/-perm-4000–ls2>/dev/null

78897640-rwsr-xr-x1rootroot3820012月112014/bin/ping

78899076-rwsr-xr-x1rootroot773368月112014/bin/mount

……

假如要查找所有设置了SGID的文件,应指定条件“-perm-2000”。

[root@localhost~]#find/-perm-2000–ls2>/dev/null

78494416-rwxr-sr-x1rootcgred163841月62015/bin/cgexec

78497116-rwxr-sr-x1rootcgred163521月62015/bin/cgclassify

……

假如要同时查找所有设置了SUID或是SGID的文件linux 文件执行权限,这么应当指定条件“-perm/6000”,倘若将条件指定为“-perm-6000”,则表示查找既设置了SUID也设置了SGID的文件,而这样的文件在系统中是不存在的。

[root@localhost~]#find/-perm-6000–ls2>/dev/null

//查找同时设置了SUID和SGID的文件,没有结果。

[root@localhost~]#find/-perm/6000–ls2>/dev/null

//查找设置了SUID或是SGID的文件

78897640-rwsr-xr-x1rootroot3820012月112014/bin/ping

78899076-rwsr-xr-x1rootroot773368月112014/bin/mount

……

本文原创地址://q13zd.cn/paehbrgjlxtq.html编辑:刘遄,审核员:暂无