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

相关推荐

  • 文本处理工具及grep命令的理解与使用

    1. 文本处理工具   1.1 文件查看命令cat tac     cat命令:连接文件并在标准输出上面显示出来  图 1-1   cat帮助文档        cat [option]…[file]…     &n…

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

    系统的INPUT和OUTPUT默认策略为DROP; iptables -P INPUT DROP iptables -P OUTPUT DROP 1、限制本地主机的web服务器在周一不允许访问;新请求的速率不能超过100个每秒;web服务器包含了admin字符串的页面不允许访问;web服务器仅允许响…

    Linux干货 2016-10-09
  • 计算机起源与Linux简述

    什么是计算机?  计算机(computer)俗称电脑,是一种用于高速计算的电子计算机器,可以进行数值计算,又可以进行逻辑计算,还具有存储记忆功能。是能够按照程序运行,自动、高速处理海量数据的现代化智能电子设备。 它由硬件系统和软件系统组成,没有安装任何软件的计算机被称为裸机。硬件系统由运算器,控制器,存储器,输入设备,输出设备几部分组成;…

    Linux干货 2017-03-29
  • 系统用户基本信息

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 who | cut -d" " -f1 | sort -u who | cut -d" " -f1 | uniq 2、取出最后登录到当前系统的用户的相关信息。 who | tail -1 3、取出当前系统上被用户当作其默认she…

    Linux干货 2016-11-20
  • 磁盘管理1——分区和文件系统的创建

    Linux磁盘及文件系统管理 Disk(硬盘)接口类型:          IDE:并口,133MB/s          SCSI:并口,640MB/s    &nbs…

    Linux干货 2016-08-27
  • Linux用户与权限管理

    由于Linux是多用户、多任务系统,出于一些需要,当我们创建的文件希望对一部分用户开放,对一部分用户隐藏的时候应该怎么办呢?这样的话,就需要涉及到Linux系统中对用户以及对文件权限的管理。 一、相关文件 在Linux中,一切配置文件都是以文本文档的方式来保存的,同样用户的信息也保存在系统的一些文件中,其位置为/etc/passwd。此文件只有root用户具…

    Linux干货 2016-08-05