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

相关推荐

  • CentOS启动流程及Shell脚本编程练习

    一、请详细描述CentOS系统的启动流程(详细到每个过程系统做了哪些事情) 第一步:POST加电自检 主要实现的功能是检测各个外围硬件设备是否存在而且能够正常运行起来,实现这一自检功能的是固化在主板上的ROM(主要代表为CMOS)芯片上的BIOS(Basic Input/Output System)程序。 第二步:Boot Sequence(选择启动设备以加…

    2017-11-26
  • 马哥教育网络第21期-第十一周课程练习

    1、详细描述一次加密通讯的过程,结合图示最佳。 A和B进行通信 A发送数据:A使用单向加密算法获得数据的特征码,把特征码附加到数据的尾部,A使用对称加密算法对数据进行加密。A使用B发过来的公钥对A的对称加 密算法加密密钥进行加密,附加到数据后面。 B接收方:B使用自己的私钥对数据进行解密。得到A的对称密钥,对对称密钥解密获得数据的特征码,B使用单向加密算法获…

    Linux干货 2016-12-26
  • 初涉Linux基本要点概括(1)续

       6. Linux发行版都基本遵循文件系统层级标准(Filesystem Hierarchy Standard)。                 续   …

    Linux干货 2016-10-13
  • 马哥教育网络班21期+第10周课程练习

    1、请详细描述CentOS系统的启动流程(详细到每个过程系统做了哪些事情) POST:加电自检,主板检测系统硬件。 BOOT sequence:依次查找引导设备(装有引导程序) MBR:找到引导设备的主引导扇区引导记录(446k bootloader 64k DPT 2k 结束标志) GRUB: 引导程序的一种,提供一个菜单,允许用户选择要启动系统或不同的内…

    Linux干货 2016-08-15
  • Ansible应用介绍

    Ansible 简介 ansible是个什么东西呢?官方的title是“Ansible is Simple IT Automation”——简单的自动化IT工具。这个工具的目标有这么几项:自动化部署APP;自动化管理配置项;自动化的持续交互;自动化的(AWS)云服务管理。所有的这几个目标从本质上来说都是在一个台或者几台服务器上,执行一系列的命令而已。通俗的说…

    Linux干货 2015-07-03
  • 第一周博客 计算机组成及Linux基础入门

    1、描述计算机组成及其功能。
    2、描述罗列Linux的发行版,并描述不同发行版之间的联系和区别。
    3、描述Linux的哲学思想,并按照自己的理解对其进行解释。
    4、说明Linux系统上命令的使用格式,详细介绍ifconfig、echo、tty、startx、export、pwd、history、
    shutdown、poweroff、reboot、hwclock、date命令的使用,并配合相应的示例说明阐述。
    5、如何在Linux系统上获取命令的帮助信息,请详细列出,并描述man文档的章节是如何划分。
    6、请罗列Linux发行版的基础目录名称命名法则及功能规定。

    2017-12-02