一、find概述;

   作为linux系统运维人员来说find命令也是较长用的一个命令,个人觉得也是最有用的一个,同时也 是最混乱的一个。因为它的语法与其他命令的标准语法不同,同时也支持grep里面的通配符查找。也可以允许按文件名,文件类型,用户甚至是时间戳查找。不但可以找到具有这些属性任意组合的文件,还可以对它找到的文件执行操作。


功能:在目录结构中搜索文件,并执行指定的操作。此命令提供了相当多的查找条件,功能很强大。

语法:find 起始目录 寻找条件 操作
说明:find命令从指定的起始目录开始,递归地搜索其各个子目录,查找满足寻找条件的文件并对之采取相关的操作。


二、find命令的格式;

find [options] [查找路径] [查找条件][处理动作]

   默认的处理动作是显示

   查找路径;默认查找当前目录

   查找条件;默认查找指定路径下的所有文件

   处理动作;默认为显示


find常用选项

 选   项                       功能作用
  -name
“文件名称”;支持使用文件名通配机制 *、?、[]、[^]

  -iname

-iname “文件名称”;查找是不区分字符大小写
  -uid根据给定的uid查找所有文件
  -gid根据给定的gid查找所有文件
  -user根据属主查找文件
  -group根据组名查找文件
  -nouser查找没有属主的文件
  -nogroup查找没有属组的文件
  -a,-o
-a表示为与,同时满足。-o表示或,满足查找条件即可
  -type

查找某一类型文档;

b;块设备文档、d;目录、c;字符设备文档、

l;符号链接文档、f;普通文档

  -prune不在当前指定的路径查找。假如同时指定了-depth选项,则prune被忽略
  -empty查找大小为0的目录或文件
  -size根据文件大小查找 常用单位有;K、M、G
  -depth查找是,首先查找当前目录文档,然后在找子目录查找
  -exec对匹配的文档执行所给的命令    {}占位符
  -ok交互式的-exec; 用于指定其他命令的 {}占位符
  -ls长格式输出各文件信息
  -print打印在标准输出上
-mtime  -n,+n
按照文档更改时间查找。 -n指距离现在时间n天以内;+n 指n天以外
  -atime+,指定天数之外被访问过 -,是指定天数之内被访问过
-fstype  f1,f2查更改时间比f1新但比f2旧的文档
  -perm
按权限来查找

find示例;

1、 -name

   按文件名查找以.conf结尾的文件,两个结合了通配符查找

[root@station103 ~]# find /etc -name "*.conf"  #按文件名查找
/etc/sasl2/smtpd.conf
/etc/openldap/ldap.conf
/etc/lftp.conf
/etc/mtools.conf
/etc/NetworkManager/NetworkManager.conf
/etc/ld.so.conf
/etc/plymouth/plymouthd.conf
[root@station103 ~]# find /etc -name "???.conf"
/etc/yum.conf
/etc/gai.conf
/etc/sos.conf
/etc/samba/smb.conf
/etc/init/tty.conf
/etc/init/rcS.conf


2、-iname

   文件名不区分大小写查找

[root@station103 tmp]# find -iname "*.txt"    不区分大小写查找
./KKG.txt
./aa.txt
./nba.txt
./QW.txt
./hao.txt
./abc.txt
./dW.txt
./hddW.txt


3、-uid

   根据uid查找

[root@station103 tmp]# find -uid 517
./kd.txt
./ii.txt
./oo.doc


4、-gid

   根据gid查找

-rw-rw-r--  1  517  518      0 Feb 19 08:07 oo.doc
-rw-r--r--  1 root root      0 Feb 19 08:00 QW.txt
drwx------  2 root root   4096 Feb 16 07:32 yang
[root@station103 tmp]# find -gid 518
./kd.txt
./ii.txt
./oo.doc
[root@station103 tmp]#


5、-user

   根据用户查找文件或目录

[root@station103 tmp]# find -user yang
./hao.doc
./kkk.txt
./aabb.txt
[root@station103 tmp]#


6、-group

   根据组名查找文件或目录

[root@station103 tmp]# ll
total 200
drwxr-xr-x  2 aa   hao    4096 Feb 20 04:56 aa
-rw-r--r--  1 aa   hao       0 Feb 20 04:57 abcd.txt
-rw-rw-r--  1 yang yang      0 Feb 19 08:05 hao.doc
-rw-rw-r--  1 aa    518      0 Feb 19 08:07 ii.txt
-rw-rw-r--  1 aa    518      0 Feb 19 08:07 kd.txt
-rw-rw-r--  1 aa    518      0 Feb 19 08:07 oo.doc
-rw-r--r--  1 aa   hao       0 Feb 20 04:57 yang.doc
[root@station103 tmp]# find -group hao
./aa
./abcd.txt
./yang.doc
[root@station103 tmp]#


7、-nouser

   列出/tmp下没有用户的文件

-rw-rw-r--  1  517  518      0 Feb 19 08:07 ii.txt
-rw-rw-r--  1  517  518      0 Feb 19 08:07 kd.txt
drwxr-xr-x 11 root root   4096 Feb 15 21:40 logs
-rw-rw-r--  1  517  518      0 Feb 19 08:07 oo.doc
drwx------  2 root root   4096 Feb 16 07:32 yang
-rw-r--r--  1  517 hao       0 Feb 20 04:57 yang.doc
[root@station103 ~]# find /tmp -nouser
/tmp/aa
/tmp/abcd.txt
/tmp/kd.txt
/tmp/yang.doc
/tmp/ii.txt
/tmp/oo.doc
[root@station103 ~]#


8、-nogroup

   列出/tmp下没有用户组的文件

drwxr-xr-x  2 root root   4096 Feb 16 10:09 hello
-rw-rw-r--  1  517  518      0 Feb 19 08:07 ii.txt
-rw-r--r--  1 root root    884 Feb 20 05:32 inittab
-rw-rw-r--  1  517  518      0 Feb 19 08:07 kd.txt
-rw-rw-r--  1  517  518      0 Feb 19 08:07 oo.doc
[root@station103 ~]# find /tmp -nogroup
/tmp/kd.txt
/tmp/ii.txt
/tmp/oo.doc


9、-a-、与,同时满足

  -o、表示或,满足查找条件即可

  -not、非,取反

[root@station103 ~]# find /tmp -user yang -o -name "*.txt"
/tmp/KKG.txt
/tmp/aa.txt
/tmp/abcd.txt
/tmp/kd.txt
/tmp/nba.txt
/tmp/ii.txt
/tmp/hao.doc
/tmp/QW.txt
/tmp/hao.txt
/tmp/kkk.txt
/tmp/aabb.txt
/tmp/abc.txt
/tmp/dW.txt
/tmp/hddW.txt
[root@station103 ~]# find /tmp -user yang -a -not -name "*.txt"
/tmp/hao.doc
[root@station103 ~]#


10、-type

   按照文件类型查找

[root@station103 ~]# find /tmp/logs/ -type d    查找目录
/tmp/logs/
/tmp/logs/sa
/tmp/logs/gdm
/tmp/logs/samba
/tmp/logs/samba/old
[root@station103 ~]# find /tmp/logs/ -type f    查找普通文档
/tmp/logs/sa/sa24
/tmp/logs/sa/sar24
/tmp/logs/sa/sa14
/tmp/logs/sa/sa13
/tmp/logs/sa/sa25
[root@station103 ~]# find /lib -type l     查找符号链接文档
/lib/kbd/keymaps/ppc
/lib/kbd/keymaps/i386/qwerty/ko.map.gz
/lib/kbd/keymaps/i386/qwerty/sr-latin.map.gz
/lib/cpp
[root@station103 ~]# find /dev/ -type b    查找块设备文件
/dev/dm-3
/dev/dm-2
/dev/ram8
/dev/ram9
/dev/ram6
[root@station103 ~]# find /dev/ -type c   查找字符设备文档
/dev/vcsa6
/dev/vcs6
/dev/vcsa5
/dev/vcs5


11、-empty

   查找大小为0的目录或文件

[root@station103 ~]# find /media/ -empty
/media/kjk
/media/bvc
/media/abc
[root@station103 ~]#


12、-size

   根据文件大小查找  单位为K、M、G

[root@station103 ~]# find /tmp -size -5k    查找小于5K的文件
/tmp
/tmp/aa
/tmp/.bashrc
/tmp/KKG.txt
/tmp/aa.txt
[root@station103 ~]# find /tmp -size +10k   查找大于10K的文件
/tmp/functions
/tmp/cat
/tmp/fdisk
[root@station103 ~]#
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
-rw-r--r--   1 root root 5.3M Jul 25  2013 httpd-2.2.25.tar.bz2
-rw-r--r--.  1 root root  44K Feb 13 11:09 install.log
[root@station103 ~]# find -size +5M    查找小于5M的文件
./httpd-2.2.25.tar.bz2
[root@station103 ~]#


13、-exec

   对匹配的文档执行所给的命令

[root@station103 ~]# ls -l /tmp/
total 192
-rw-r--r-- 1 root root      0 Feb 20 07:24 aa1
-rw-r--r-- 1 root root      0 Feb 20 07:24 aa2
-rw-r--r-- 1 root root      0 Feb 20 07:24 aa3
-rw-r--r-- 1 root root      0 Feb 20 07:24 aa4
-rw-r--r-- 1 root root      0 Feb 20 07:24 aa5
-rw-r--r-- 1 root root      0 Feb 20 07:24 aa6
-rw-r--r-- 1 root root    884 Feb 20 05:32 inittab
-rw-rw-r-- 1  517  518      0 Feb 19 08:07 oo.doc
drwx------ 2 root root   4096 Feb 16 07:32 yang
-rw-r--r-- 1  517 hao       0 Feb 20 04:57 yang.doc
 对匹配出来的文件执行删除命令
[root@station103 ~]# find /tmp -name "aa*" -exec rm -rf  {} \;
[root@station103 ~]# ls -lh /tmp
total 192K
-rwxr-xr-x 1 root root  48K Feb 14 21:56 cat
-rwxr-xr-x 1 root root 104K Feb 14 21:58 fdisk
-rw-r--r-- 1 root root  921 Sep 15  2011 fstab
-rw-r--r-- 1 root root  19K Sep 15  2011 functions
drwx------ 2 root root 4.0K Feb 16 07:32 hadoop
drwxr-xr-x 2 root root 4.0K Feb 16 10:09 hello
-rw-r--r-- 1 root root  884 Feb 20 05:32 inittab
-rw-rw-r-- 1  517  518    0 Feb 19 08:07 oo.doc
drwx------ 2 root root 4.0K Feb 16 07:32 yang
-rw-r--r-- 1  517 hao     0 Feb 20 04:57 yang.doc


14、-ok

   交互式的-exec;用于指定其他命令的

[root@station103 ~]# find / -mtime  -1  -type f  -ok  ls -l  {} \;
< ls ... /tfil21 > ? y
-rw-r--r-- 1 root root 0 Feb 24  2014 /tfil21
< ls ... /tfil27 > ? y
-rw-r--r-- 1 root root 0 Feb 24  2014 /tfil27
< ls ... /.autofsck > ? y
-rw-r--r-- 1 root root 0 Feb 19 18:14 /.autofsck
< ls ... /tfil29 > ? y
-rw-r--r-- 1 root root 0 Feb 24  2014 /tfil29
< ls ... /tfil23 > ? n
< ls ... /tfil30 > ? ^C


15、-print

   打印在标准输出上

[root@station103 ~]# find /tmp -type f -print
/tmp/.bashrc
/tmp/.bash_logout
/tmp/fstab
/tmp/yang.doc
/tmp/inittab


16、-mtime -n,+n

   按照文档更改时间查找。-n指距离现在时间n天以内;+n指n天以外

[root@station103 ~]# find /tmp -mtime +1  一天外被修改过的文件
/tmp/.bashrc
/tmp/.bash_logout
/tmp/fstab
/tmp/.mozilla
/tmp/.mozilla/plugins
[root@station103 ~]# find /tmp -mtime -1    一天内被修改过的文件
/tmp
/tmp/yang.doc
/tmp/inittab
/tmp/oo.doc
/tmp/.ICE-unix


17、-perm [+|-]; 根据权限查找

        MODE;精确匹配

       +MODE; 任何一类用户的任何一位权限匹配;常用于查找某类用户的某特定权限是否存在

       -MODE;每类用户的指定要检查的权限位都匹配

查找/etc/目录所有用户都没有写权限的文件并用-ok命令显示出来
[root@station103 ~]# find /etc/ -not -perm +222 -ok ls -lh {} \;
< ls ... /etc/rc.d/init.d/lvm2-lvmetad > ? y
-r-xr-xr-x. 1 root root 2.1K Nov 24 00:25 /etc/rc.d/init.d/lvm2-lvmetad
< ls ... /etc/rc.d/init.d/blk-availability > ? y
-r-xr-xr-x. 1 root root 1.4K Nov 24 00:25 /etc/rc.d/init.d/blk-availability
< ls ... /etc/rc.d/init.d/lvm2-monitor > ? y
-r-xr-xr-x. 1 root root 2.7K Nov 24 00:25 /etc/rc.d/init.d/lvm2-monitor
查找/etc/目录下至少有一类用户没有写权限并用-exec命令显示出来
[root@station103 ~]# find /tmp/ -not -perm -222 -exec ls -lh {} \;
-rw-r--r-- 1 513 513 124 Feb 16 07:32 /tmp/.bashrc
-rw-r--r-- 1 513 513 18 Feb 16 07:32 /tmp/.bash_logout
-rw-r--r-- 1 root root 921 Sep 15  2011 /tmp/fstab
-rw-r--r-- 1 517 hao 0 Feb 20 04:57 /tmp/yang.doc
total 8.0K



由于本人现还在学习阶段,也是第一次写blog,写的不好及有不对之处,还请各位大佬们多多指出,谢谢。