shell四剑客之find

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 ! 选项就特别的好用了。下面举几个例子

  1. 查找/var 目录下书诸位root,且属组为mail的所有文件

[root@centous1 ~]# find /var -user root -a -group mail/var/spool/mail
  1. 查找/var目录下不属于root、ip、gdm的所有文件

[root@centous1 ~]# find /var -not \( -user root -o -user ip -o gdm \)
  1. 查找/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
  1. 查找当前系统上没有属主或属组,且最近一个周内曾被访问过的文件

find / \( -nouser -o -nogroup \) -atime -7
  1. 查找/etc目录下大于1M且类型为普通文件的所有文件

[root@centous1 ~]# find /etc -size +1M -type f/etc/selinux/targeted/modules/active/policy.kern
/etc/selinux/targeted/policy/policy.24
  1. 查找/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 表示不关注,权限随意
  1. 查找/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
  1. 查找/etc/init.d目录下,所有用户都有执行权限,且其它用户有写权限的文件

[root@centous1 ~]# find /etc/init.d/ -perm -113

原创文章,作者:forest,如若转载,请注明出处:http://www.178linux.com/36405

(0)
forestforest
上一篇 2016-08-22
下一篇 2016-08-22

相关推荐

  • 作业-第二周

    1、linux常用文件管理命令 ls rm chmod touch mv cp 2、echo $? 如果返回0则成功,其他失败 3、 mkdir /tmp/{a,b}_{c,d} mkdir -p /tmp/mylinux/bin /tmp/mylinux/boot/ /tmp/mylinux/boot/grup /tmp/mylinux/dev \ /tm…

    Linux干货 2016-06-23
  • lvs-dr实践-week17

    1、结合图形描述LVS的工作原理; lvs工作流程: ipvs是工作于input链上,监听目标地址上对应的目标端口,如果这个端口对应的服务定义为集群服务, 就强行修改报文的流程,完成转发, 通过postrouting送出去, 为了让后端主机能够接收, 此时需要让RS也具有目标ip地址, 要么修改目标ip地址支持基于TCP,UDP,SCTP,AH,EST,AH…

    2017-05-23
  • Hadoop hdfs 分布式文件系统

    Hadoop简介:一个分布式系统基础架构,由Apache基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储。Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有着高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件…

    Linux干货 2017-04-19
  • 马哥教育网络班22期+第5周课程练习

    1、显示当前系统上root、fedora或user1用户的默认shell; [root@localhost ~]# awk -F: '{print $1,$7}' /etc/passwd| egrep "^\<(root|fedora|user…

    Linux干货 2016-09-15
  • awk 的相关知识

    awk 介绍,基本用法,变量,格式化,操作符,条件判断,循环,数组,函数等

    2018-01-01