一、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 | 长格式输出各文件信息 |
打印在标准输出上 | |
-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,写的不好及有不对之处,还请各位大佬们多多指出,谢谢。