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 09:29
下一篇 2016-08-22 09:29

相关推荐

  • heartbeatV1+nfs实现高可用httpd

        随着互联网技术的不断发展,Web应用也越来越普遍,Web服务器的无故障工作时间就显得尤重要,但由于各种各样的原因,一台服务器并不能保证永远不出问题的运行,此时就需要一种机制来实现多台服务器共同为相同的来务功能提供服务,以确保任意一台服务器宕机后,不会影响其所承载的业务的访问。   &nbsp…

    Linux干货 2015-06-26
  • 文件系统管理&raid&脚本编程之参数、算数运算练习

    1、创建一个10G分区,并格式为ext4文件系统; (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl; (2) 挂载至/data/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳; (1) ~]# fdisk /dev/sdb Welcome to…

    Linux干货 2016-11-08
  • 第十八周博客作业

    1、为LNMP架构添加memcached支持,并完成对缓存效果的测试报告; 操作系统: CentOS 7.210.0.0.51 nginx+php+mysql10.0.0.52 memcached 一. 环境准备: 搭建LNMP编译安装环境 1. 配置163的yum源和阿里云的epel源 [root@localhost ~]# mv /etc/yum.rep…

    2017-07-12
  • grep命令及正则表达式

    grep命令和正则表达式 grep基本概念 grep:global search regular expression and print out the line. 作用:文本过滤器,用于文本搜索,用指定“模式”逐行匹配。 模式:由正则表达式字符及文本字符所编写的过滤条件 正则表达式:由一类特殊字符和文本字符所编写的模式,其有些字符不表示字符字面意义,而表…

    Linux干货 2016-11-05
  • 常用的MySQL数据库备份

    常用的MySQL数据库备份方式 前言 为什么需要备份数据? 数据的备份类型 MySQL备份数据的方式 备份需要考虑的问题 设计合适的备份策略 实战演练 使用cp进行备份 使用mysqldump+复制BINARY LOG备份 使用lvm2快照备份数据 使用Xtrabackup备份 总结 前言 我们试着想一想, 在生产环境中什么最重要?如果我们服务器的硬件坏了可…

    2016-10-01
  • Mysql之主从复制

    Mysql之主从复制 节点一 修改配置文件设置唯一ID开起二进制日志 [root@node1 ~]# vim /etc/my.cnf 增加以下内容     [mysqld]     log-bin=master_bin &nbsp…

    Linux干货 2016-07-19