注意:选项在[ ]内的是可以省略的
很多实例都是根据当时环境而改变属性进行匹配的
所以可能会导致上下不同匹配规则会出现同个文件
一、含义
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相对较占用系统资源,所以建议不要经常使用,不过当别人不小心进了你的服务器,这时查找就会方便很多的。
转载于:https://blog.51cto.com/chenpipi/1365559