注意:选项在[ ]内的是可以省略的
很多实例都是根据当时环境而改变属性进行匹配的
所以可能会导致上下不同匹配规则会出现同个文件
一、含义
find是linux命令,可以将系统内符合expression的文件列出来。指定文件按名称、类别、时间、大小、权限等不同属性组合时,只有完全相符的才会被列出来。
相对于locate查找命令,find具有精确匹配、实时查找的优势,但是同时由于需要遍历指定路径下的文件,所以查找速度慢,比较耗费系统资源。
二、find命令
find [option] [查找路径] [查找条件] [处理动作]
查找路径:默认当前目录
查找条件:默认为查找指定路径下的所有文件
处理动作:默认为显示
查找条件:
-name "文件名称":根据文件名称进行查找,支持文件名通配(globbing)
#查找/etc/下文件名为network的文件 [Linux]#find /etc/ -name "network" /etc/sysconfig/network /etc/rc.d/init.d/network
-iname "文件名称":查找时忽略大小写
[Linux]#find /tmp/ -iname abc /tmp/Abc /tmp/abc
-u username:根据文件属主查找
[Linux]#find /tmp/ -user hadoop /tmp/abc.tar.xz /tmp/etc /tmp/etc/netconfig [Linux]#
-g groupname:根据文件属组查找
[Linux]#find /tmp/ -group hadoop /tmp/Abc /tmp/abc.tar.xz /tmp/etc /tmp/etc/netconfig [Linux]#
-uid UID:根据文件UID查找
[Linux]#find /tmp/ -uid 500 /tmp/1M.txt /tmp/1.5M.txt [Linux]#
-gid GID:根据文件GID查找
[Linux]#find /tmp/ -gid 501 /tmp/2M.txt /tmp/1.5M.txt /tmp/2.1M.txt [Linux]#
-nouser:查找没有属主的文件
[Linux]#find /tmp/ -nouser /tmp/myMBR /tmp/3M.txt /tmp/abc /tmp/512K.txt [Linux]#
-nogroup:查找没有属组的文件
[Linux]#find /tmp/ -nogroup /tmp/abc /tmp/512K.txt [Linux]#
对查找条件可以组合一起使用:
-a:与;同时满足
#查找用户为root,且组为hadoop的文件 [Linux]#find /tmp/ -user root -a -group hadoop /tmp/Abc [Linux]#
-o:或;至少一个满足
[Linux]#find /tmp/ -nouser -o -user stu7 /tmp/myMBR /tmp/3M.txt /tmp/abc /tmp/512K.txt [Linux]#
-not|!:非;取反
[Linux]#find /tmp/ -not -user root /tmp/myMBR /tmp/1M.txt /tmp/1.5M.txt /tmp/abc.tar.xz /tmp/3M.txt /tmp/etc /tmp/etc/netconfig /tmp/abc /tmp/512K.txt [Linux]#
type:根据文件类型查找文件
f:普通文件
d:目录文件
b:块设备
c:字符设备
l:符号链接
[Linux]#find /dev/ -type l /dev/myvg/mylv /dev/myvg/snap-mylv /dev/dvd /dev/cdrom /dev/md/station73.magelinux.com:5 /dev/MAKEDEV /dev/core
s:套接字
[Linux]#find /dev/ -type s /dev/log [Linux]#
p:管道
-size:根据文件大小查找
-size [+|-]#Unit{K|M|G}
#Unit:精确匹配到#到#-1个单位内的文件
[Linux]#find /tmp/ -size 2M /tmp/2M.txt /tmp/1.5M.txt [Linux]#
+#Unit:匹配大于#个单位的文件
[Linux]#find /tmp/ -size +2M /tmp/3M.txt /tmp/2.1M.txt [Linux]#
-#Unit:匹配大小为#-1个单位之外的文件
[Linux]#find /tmp/ -size -2M /tmp/ /tmp/myMBR /tmp/1M.txt /tmp/scripttest /tmp/rc.sysinit
根据时间戳查找:
以天为单位(time):支持[+|-]
-atime:访问时间
+#:表示(#+1)天之外访问过的文件
[Linux]#find /tmp/ -atime +2 /tmp/myMBR /tmp/rc.sysinit /tmp/abc.tar.xz /tmp/etc/netconfig /tmp/script [Linux]#
-mtime:修改时间
-#:表示#天之内被修改过的文件
[Linux]#find /tmp/ -mtime -2 /tmp/ /tmp/2M.txt /tmp/1M.txt /tmp/1.5M.txt /tmp/Abc /tmp/3M.txt /tmp/2.1M.txt /tmp/network /tmp/abc /tmp/512K.txt /tmp/NetworkManager /tmp/.ICE-unix [Linux]#
-ctime:改变时间
#:表示大于#+1> # >=#天内改变的文件
[Linux]#find /tmp/ -ctime 1 /tmp/network /tmp/NetworkManager [Linux]#
以分钟为单位(min):支持[+|-]
用法与以天为单位是一样的;就不再举例说明
-amin [+|-]#
-mmin [+|-]#
-cmin [+|-]#
根据权限查找:
-perm [+|-]MODE
MODE:精确匹配
#匹配权限精确为444的文件 [Linux]#find /tmp/ -perm 444 /tmp/1M.txt /tmp/1.5M.txt /tmp/3M.txt [Linux]#
+MODE:任何一类用户的任何一位权限匹配;通常查找某类用户的某特定权限是否存在
#查找其他用户是否有写权限,0代表不查找 [Linux]#find /tmp/ -perm +002 /tmp/ /tmp/Abc /tmp/abc /tmp/.ICE-unix [Linux]#
-MODE:每类用户的指定要检查的权限位都匹配
#查找每类用户都有写权限的 [Linux]#find /tmp/ -perm -222 /tmp/ /tmp/.ICE-unix [Linux]#
处理动作:
-print:打印在标准输出上
-ls:以长格式输出匹配文件的信息
[Linux]#find /tmp/ -perm -222 -ls 262145 4 drwxrwxrwt 6 root root 4096 Mar 1 14:23 /tmp/ 262146 4 drwxrwxrwt 2 root root 4096 Mar 1 13:48 /tmp/.ICE-unix [Linux]#
-exec COMMAND {} \;:对匹配到的文件执行指定的命令
[Linux]#find /tmp/ -iname "*.txt" -exec mv {} {}x \; [Linux]#find /tmp/ -iname "*.txtx" /tmp/512K.txtx /tmp/1M.txtx /tmp/3M.txtx /tmp/ccc.txtx /tmp/1.5M.txtx /tmp/2.1M.txtx /tmp/2M.txtx [Linux]#
-ok COMMAND {} \;:同于-exec,但是是交互式操作
find ...| xargs COMMAND
[Linux]#find /tmp/ -iname "*.txtx" | xargs ls -lh -r--r--r-- 1 centos gentoo 1.6M Mar 1 11:45 /tmp/1.5M.txtx -r--r--r-- 1 centos root 1.0M Mar 1 11:43 /tmp/1M.txtx -rw-r--r-- 1 root gentoo 2.1M Mar 1 11:44 /tmp/2.1M.txtx -rw-r--r-- 1 root gentoo 2.0M Mar 1 11:43 /tmp/2M.txtx -r--r--r-- 1 stu7 stu7 3.0M Mar 1 11:43 /tmp/3M.txtx -rw-r--r-- 1 514 515 512K Mar 1 11:44 /tmp/512K.txtx -rw-r--r-- 1 root root 0 Mar 1 14:23 /tmp/ccc.txtx [Linux]#
三、具体实例
1、查找/var/目录属主为root且属组为mail的所有文件;
[Linux]#find /var/ -user root -a -group mail /var/spool/mail [Linux]#
2、查找/usr目录下不属于root、bin或hadoop的所用文件;
[Linux]#find /usr/ -not \( -user root -o -user bin -o -user hadoop \) |less /usr/libexec/abrt-action-install-debuginfo-to-abrt-cache /usr/local/apache/cgi-bin/test-cgi /usr/local/apache/cgi-bin/printenv.wsf /usr/local/apache/cgi-bin/printenv.vbs /usr/local/apache/cgi-bin/printenv
3、查找/etc/目录下最近一周内其内容修改过的,且不属于root或hadoop的文件;
[Linux]#find /etc/ -atime -7 -not \( -user root -o -user hadoop \) /etc/keystone/policy.json [Linux]#
4、查找当前系统上没有属主或属组,且最近1个月内曾被访问过的文件;
[Linux]#find /tmp/ -atime -30 -a \( -nouser -o -nogroup \) /tmp/abc [Linux]#
5、查找/etc/目录下大于1M且类型为普通文件的所有文件;
[Linux]#find /etc/ -size +1M -a -type f /etc/selinux/targeted/modules/active/policy.kern /etc/selinux/targeted/policy/policy.24 /etc/gconf/gconf.xml.defaults/%gconf-tree.xml [Linux]#
6、查找/etc/目录所有用户都没有写权限的文件;
[Linux]#find /etc/ -not -perm +222 /etc/pam.d/cups /etc/openldap/certs/password /etc/shadow /etc/dbus-1/system.d/cups.conf /etc/shadow- /etc/ld.so.conf.d/kernel-2.6.32-358.el6.x86_64.conf /etc/gshadow /etc/rc.d/init.d/lvm2-monitor /etc/rc.d/init.d/blk-availability /etc/rc.d/init.d/lvm2-lvmetad /etc/sudoers [Linux]#
7、查找/etc/目录下至少有一类用户没有写权限;
[Linux]#find /etc/ -not -perm -222 | less /etc/pam.d /etc/pam.d/system-auth-ac /etc/pam.d/config-util /etc/pam.d/runuser-l /etc/pam.d/remote /etc/pam.d/setup /etc/pam.d/gdm-fingerprint /etc/pam.d/system-config-users /etc/pam.d/password-auth-ac
8、查找/etc/init.d/目录下,所有用户都有执行权限且其它用户有写权限的文件;
[Linux]#find /etc/init.d/ -perm -113 [Linux]#
find相对较占用系统资源,所以建议不要经常使用,不过当别人不小心进了你的服务器,这时查找就会方便很多的。