find命令详解
### 命令格式 find pathname -options [-print -exec -ok] ### 命令参数 pathname:find命令所查找的目录路径。例如用.表示当前目录,用/来表示系统根目录 -print:find命令将会匹配的文件输出到标准输出。-exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' { } \;,注意{ }和\;之间的空格。-ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。### 命令选项 -name 按照文件名查找文件。-perm 按照文件权限来查找文件。-prune 使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用-depth选项,那么-prune将被find命令忽略。-user 按照文件属主来查找文件。-group 按照文件所属的组来查找文件。-mtime -n +n 按照文件的更改时间来查找文件, - n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前。find命令还有-atime和-ctime 选项,但它们都和-m time选项。-nogroup 查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在。-nouser 查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在。-newer file1 ! file2 查找更改时间比文件file1新但比文件file2旧的文件。-type 查找某一类型的文件,诸如:b - 块设备文件。 d - 目录。 c - 字符设备文件。 p - 管道文件。 l - 符号链接文件。 f - 普通文件。 -name "文件名称":支持使用glob *, ?, [], [^] -iname "文件名称":不区分字母大小写 -inum n 按inode号查找 -samefile name 相同inode号的文件 -links n 链接数为n的文件 -regex "PATTERN":以PATTERN匹配整个文件路径字 符串,而不仅仅是文件名称另外,下面三个的区别: amin n 查找系统中最后N分钟访问的文件 -atime n 查找系统中最后n*24小时访问的文件-cmin n 查找系统中最后N分钟被改变文件状态的文件-ctime n 查找系统中最后n24小时被改变文件状态的文件-mmin n 查找系统中最后N分钟被改变文件数据的文件-mtime n 查找系统中最后n24小时被改变文件数据的文件
常用实例1. find -atime -2超过48小时内查看或者执行的文件
2. find . -name ".log"查找当前目录以.log结尾的文件
3. find /var/log -perm 777查找/var/log目录下权限为777的文件
4. find . -type f -name ".log"查找当前目录以.log为结尾的普通文件
5. find . size +10M -print查找当前目录大于1M的文件
6. find .-type d | sort查找当前所有目录并且排序
7. find -name april* fprint file 在当前目录下查找以april开始的文件,并把结果输出到file中
8. find -name ap* -o -name may* 查找以ap或may开头的文件
9. find /mnt -name tom.txt -ftype vfat 在/mnt下查找名称为tom.txt且文件系统类型为vfat的文件
10.find /mnt -name t.txt ! -ftype vfat 在/mnt下查找名称为tom.txt且文件系统类型不为vfat的文件
11.find /tmp -name wa* -type l 在/tmp下查找名为wa开头且类型为符号链接的文件
12.find /home -mtime -2 在/home下查最近两天内改动过的文件
13.find /home -atime -1 查1天之内被存取过的文件
14.find /home -mmin +60 在/home下查60分钟前改动过的文件
15.find /home -amin +30 查最近30分钟前被存取过的文件
16.find /home -newer tmp.txt 在/home下查更新时间比tmp.txt近的文件或目录
17.find /home -anewer tmp.txt 在/home下查存取时间比tmp.txt近的文件或目录
18.find /home -used -2 列出文件或目录被改动过之后,在2日内被存取过的文件或目录
19.find /home -user cnscn 列出/home目录内属于用户cnscn的文件或目录
20.find /home -uid +501 列出/home目录内用户的识别码大于501的文件或目录
21.find /home -group cnscn 列出/home内组为cnscn的文件或目录
22.find /home -gid 501 列出/home内组id为501的文件或目录
23.find /home -nouser 列出/home内不属于本地用户的文件或目录
24.find /home -nogroup 列出/home内不属于本地组的文件或目录
25.find /home -name tmp.txt -maxdepth 4 列出/home内的tmp.txt 查时深度最多为3层
26.find /home -name tmp.txt -mindepth 3 从第2层开始查
27.find /home -empty 查找大小为0的文件或空目录
28.find /home -size +512k 查大于512k的文件
29.find /home -size -512k 查小于512k的文件
30.find /home -links +2 查硬连接数大于2的文件或目录
31.find /home = -perm =0700 查权限为700的文件或目录
32.find /tmp -name tmp.txt -exec cat {} \;查找/tmp下的tmp.txt文件并且执行catfind
组合条件: 与:-a 或:-o 非:-not, !
德·摩根定律:
非(P 且 Q) = (非 P) 或 (非 Q) 非(P 或 Q) = (非 P) 且 (非 Q)
!A -a !B = !(A -o B)
!A -o !B = !(A -a B) 在实际操作中,要查找的文件要满足好几个条件,这时-a -o -not ! 选项就特别的好用了。下面举几个例子
-
查找/var 目录下书诸位root,且属组为mail的所有文件
[root@centous1 ~]# find /var -user root -a -group mail/var/spool/mail
-
查找/var目录下不属于root、ip、gdm的所有文件
[root@centous1 ~]# find /var -not \( -user root -o -user ip -o gdm \)
-
查找/var目录下最近一周内其内容修改过,同时属主不为root,也不是postfix的文件
[root@centous1 ~]# find /var -atime -7 -not \( -user root -o -user postfix \) /var/log/mysqld.log/var/spool/mail/basher /var/spool/mail/user1 /var/spool/mail/zabbix /var/spool/mail/rpc /var/spool/mail/user2
-
查找当前系统上没有属主或属组,且最近一个周内曾被访问过的文件
find / \( -nouser -o -nogroup \) -atime -7
-
查找/etc目录下大于1M且类型为普通文件的所有文件
[root@centous1 ~]# find /etc -size +1M -type f/etc/selinux/targeted/modules/active/policy.kern /etc/selinux/targeted/policy/policy.24
-
查找/etc目录下所有用户都没有写权限的文件
[root@centous1 ~]# find /etc/ -not -perm /222 -ls (这里注意222前面用的是/ )265076 4 -r--r--r-- 1 root root 80 9月 1 2014 /etc/lvm/profile/thin-performance.profile265074 4 -r--r--r-- 1 root root 827 10月 16 2014 /etc/lvm/profile/metadata_profile_template.profile265073 4 -r--r--r-- 1 root root 2231 10月 16 2014 /etc/lvm/profile/command_profile_template.profile265075 4 -r--r--r-- 1 root root 76 9月 1 2014 /etc/lvm/prof mode 精确权限匹配 /mode 每一位只要有一类匹配的就行 -mode 每一类必须同时拥有mode指定的权限0 表示不关注,权限随意
-
查找/etc目录下至少有一类用户没有执行权限的文件
[root@centous1 ~]# find /home/ -not -perm -111 -ls1831429 4 drwx------ 4 nologin nologin 4096 8月 8 05:32 /home/nologin1831433 4 -rw-r--r-- 1 nologin nologin 18 10月 16 2014 /home/nologin/.bash_logout
-
查找/etc/init.d目录下,所有用户都有执行权限,且其它用户有写权限的文件
[root@centous1 ~]# find /etc/init.d/ -perm -113
原创文章,作者:forest,如若转载,请注明出处:http://www.178linux.com/36405