Linux基础入门之find命令详解

  • A+
所属分类:Linux  Linux基础
摘要

find是一个文件查找工具,是在系统上查找文件的一个工具,跟locate类似,find可以实现精确匹配,实时查找。这是locate所不能实现的。简单命令的深度用法你都真的吗?本文将深度解说find的用法。

在Linux上文件查找工具常见的有locate和find,本文在此将只讲find命令。

文件查找命令:locate find对比和优缺点

实时查找:通过遍历所有文件进行条件匹配的方式查找

非实时查找:通过根据索引查找

locate:非实时查找

依赖于索引,而索引构建非常占用资源:索引的创建是在系统空闲时系统自动进行;可以用updatedb命令更新索引

查找速度快

非精准查找

find:实时查找

精准查找 (系统上实时的有就是有没有就是没有)

精确查找 (查找结果绝对符合查找条件才予显示)

查找速度慢


命令用法格式:find [option]...[查找起始路径] [查找条件] [处理动作]

查找路径:默认为当前目录

查找条件:默认为指定路径下所有文件

处理动作:默认为打印至屏幕


查找条件

-name "文件名称":支持使用globbing字符

*:任意长度的任意字符

?:任意大个字符

[]:指定范围内的任意单个字符

[^]:指定范围外的单个字符

-iname "文件名称":忽略字符大小写 支持使用globbing字符

-user USERNAME:根据文件属主查找

-group GROUPNAME:根据文件数组查找

-uid UID:根据文件UID查找

-gid GID:根据文件GID查找

-nouser:查找没有属主的文件

-nogroup:查找没有数组的文件

组合条件查找

与:-a,需要多条件同时满足。(当有两个条件时默认就是-a,也就是说-a是可以省略的)

或:-o,满足一个条件即可

非:-not|!,条件取反

-type TYPE:根据文件类型进行查找 (下面所有为都是文件类型得益于Linux的一个理念:一切皆文件,就是说不管你是什么在系统上都把你当一个文件来看)

f:普通文件

d:目录文件

l:符号链接文件

b:块设备文件

c:字符设备文件

s:套接字文件

p:命名管道文件

-size [+|-]#UNIT

+表示大于这个数

- 表示小余这个数

这里需要记住一个法则

#UNIT: ( #-1 < X <= # )

-#UNIT: ( X <= #-1 )

+#UNIT: ( X > # )

大于0小于等于1的都是1、大于1小于等于2都是2、大于2小于等于3的都是3,具体请看下面的实验截图

#代表一个数字

UNIT代表一个单位  (常用单位:k M G ....)

根据时间戳查找

以"天"为单位

-atime [+|-]#

+2:就表示最近一次访问时间在3天之前, ( X >= #+1 )

-2:就表示最近一次访问时间在2天之内(以当前查找为时间点,2天之内被访问的文件) ( X < # )

2: ( # <= X < #+1 )

-mtime [+|-]#

-ctime [+|-]#

这里对atime mtime ctime做个小说明:

(文件的 Access time,atime 是在读取文件或者执行文件时更改的。

文件的 Modified time,mtime 是在写入文件时随文件内容的更改而更改的。

文件的 Create time,ctime 是在写入文件、更改所有者、权限或链接设置时随 Inode 的内容更改而更改的。 )

以"分钟"为单位

-amin [+|-]#

-mmin [+|-]#

-cmin [+|-]#

根据权限查找

-perm [+|1]MODE (MODE就是属主属组other的读、写、执行这三个权限)

MODE:就是与MODE做精确匹配

栗子:find ./ -perm 644 查找当前目录下文件权限是644的文件

+MODE:表示我们查找的文件任何一个用户的任何一个权限只要有一位能匹配就是足够,以单一属主为例,如果文件属主权限是6,我们查找的是4,那么这就算匹配。如果文件属主权限是2,我们查找的是7,那么也算匹配,因为7里面包含2。(这里比上面的大小 时间还绕,如果不能理解,那么只能多练习多思考就好了,博主开始也被绕晕了。。。)

说到这,我们是不是可以定期执行find / -perm +001 -type f 来查找系统上的高危文件了,居然让其他用户有执行权限。。。亲们懂的。。。

栗子:find ./ -perm +222 查找当前目录下属主或者属组或者其他用户的文件只要有一个是写权限的都算匹配正确

-MODE:表示三类用户都必须只有你指定的权限,也就是说三类用户都和你指定的权限都完全匹配才算

栗子:find ./ -perm 644 如果一个文件是600的权限那么不能匹配,如果一个文件的权限是646,那么能匹配,因为最后一个6 是包含4权限的所以算匹配。

处理动作

-print:默认处理动作

-ls:类似于ls -l

-exec COMMAND {}\;:对查找到的文件执行指定的命令,命令后面的{}表示,查找到什么就引用什么

栗子:find ./ -perm -200 -exec chmod a-w {} \;  查找当前目录下属主有写权限的文件,并去除属主写权限。so easy

-ok COMMAND {} \;这是个交互式的exec,每操作一次就需要你确认下

在-exec或-ok的时候find一次性查找符合条件的所有文件,并一同传给exec或者ok后面的命令,后面是怎么处理需要看命令本身处理方式,所以这里就出现了个缺点,有些命令不接受过长的参数那样就会出现一些变身动作了,具体咋变身还需读者你自己去发现。。这时候我们可以通过管道+xargs来实现了

栗子:find ./ -perm -200 | xargs chmod a-w


下面是一些基础栗子演示

查找/etc目录下文件名以p开头的文件 (由于这些文件太多所以用tail命令只显示最后打印的10个,下文同理)
[root@LookBack ~]# find /etc/ -name "p*" | tail
/etc/prelink.conf.d
/etc/polkit-1
/etc/passwd-
/etc/profile.d
/etc/passwd
/etc/alternatives/pack200
/etc/alternatives/policytool
/etc/alternatives/policytool.1
/etc/alternatives/pack200.1
/etc/sysconfig/networking/profiles

Linux基础入门之find命令详解

查找当前目录下属主为mysql的文件
查找当前目录下属组为mysql的文件
[root@LookBack ~]# find ./ -user mysql -ls | tail
7866918    4 drwxr-xr-x   2 mysql    mysql        4096 Dec 10 23:59 ./Python-2.7.9/Demo/rpc
7866924    8 -rw-r--r--   1 mysql    mysql        5323 Dec 10 23:59 ./Python-2.7.9/Demo/rpc/nfsclient.py
7866921    4 -rw-r--r--   1 mysql    mysql        1261 Dec 10 23:59 ./Python-2.7.9/Demo/rpc/README
7866927    8 -rw-r--r--   1 mysql    mysql        6632 Dec 10 23:59 ./Python-2.7.9/Demo/rpc/mountclient.py
7866923   28 -rw-r--r--   1 mysql    mysql       27631 Dec 10 23:59 ./Python-2.7.9/Demo/rpc/rpc.py
7866926    4 -rwxr-xr-x   1 mysql    mysql         697 Dec 10 23:59 ./Python-2.7.9/Demo/rpc/test
7866920    4 -rw-r--r--   1 mysql    mysql         361 Dec 10 23:59 ./Python-2.7.9/Demo/rpc/MANIFEST
7866925    4 -rw-r--r--   1 mysql    mysql        2629 Dec 10 23:59 ./Python-2.7.9/Demo/rpc/rnusersclient.py
7866919    8 -rw-r--r--   1 mysql    mysql        5047 Dec 10 23:59 ./Python-2.7.9/Demo/rpc/xdr.py
7866922    4 -rw-r--r--   1 mysql    mysql         575 Dec 10 23:59 ./Python-2.7.9/Demo/rpc/T.py
[root@LookBack ~]# find ./ -group mysql -ls | tail
7866918    4 drwxr-xr-x   2 mysql    mysql        4096 Dec 10 23:59 ./Python-2.7.9/Demo/rpc
7866924    8 -rw-r--r--   1 mysql    mysql        5323 Dec 10 23:59 ./Python-2.7.9/Demo/rpc/nfsclient.py
7866921    4 -rw-r--r--   1 mysql    mysql        1261 Dec 10 23:59 ./Python-2.7.9/Demo/rpc/README
7866927    8 -rw-r--r--   1 mysql    mysql        6632 Dec 10 23:59 ./Python-2.7.9/Demo/rpc/mountclient.py
7866923   28 -rw-r--r--   1 mysql    mysql       27631 Dec 10 23:59 ./Python-2.7.9/Demo/rpc/rpc.py
7866926    4 -rwxr-xr-x   1 mysql    mysql         697 Dec 10 23:59 ./Python-2.7.9/Demo/rpc/test
7866920    4 -rw-r--r--   1 mysql    mysql         361 Dec 10 23:59 ./Python-2.7.9/Demo/rpc/MANIFEST
7866925    4 -rw-r--r--   1 mysql    mysql        2629 Dec 10 23:59 ./Python-2.7.9/Demo/rpc/rnusersclient.py
7866919    8 -rw-r--r--   1 mysql    mysql        5047 Dec 10 23:59 ./Python-2.7.9/Demo/rpc/xdr.py
7866922    4 -rw-r--r--   1 mysql    mysql         575 Dec 10 23:59 ./Python-2.7.9/Demo/rpc/T.py

Linux基础入门之find命令详解

查找当前目录下uid为1000的文件
查找当前目录下gid为0的文件
[root@LookBack ~]# cat /etc/passwd | grep mysql
mysql:x:1000:1000::/home/mysql:/sbin/nologin
[root@LookBack ~]# find ./ -uid 1000 -ls | tail
7866918    4 drwxr-xr-x   2 mysql    mysql        4096 Dec 10 23:59 ./Python-2.7.9/Demo/rpc
7866924    8 -rw-r--r--   1 mysql    mysql        5323 Dec 10 23:59 ./Python-2.7.9/Demo/rpc/nfsclient.py
7866921    4 -rw-r--r--   1 mysql    mysql        1261 Dec 10 23:59 ./Python-2.7.9/Demo/rpc/README
7866927    8 -rw-r--r--   1 mysql    mysql        6632 Dec 10 23:59 ./Python-2.7.9/Demo/rpc/mountclient.py
7866923   28 -rw-r--r--   1 mysql    mysql       27631 Dec 10 23:59 ./Python-2.7.9/Demo/rpc/rpc.py
7866926    4 -rwxr-xr-x   1 mysql    mysql         697 Dec 10 23:59 ./Python-2.7.9/Demo/rpc/test
7866920    4 -rw-r--r--   1 mysql    mysql         361 Dec 10 23:59 ./Python-2.7.9/Demo/rpc/MANIFEST
7866925    4 -rw-r--r--   1 mysql    mysql        2629 Dec 10 23:59 ./Python-2.7.9/Demo/rpc/rnusersclient.py
7866919    8 -rw-r--r--   1 mysql    mysql        5047 Dec 10 23:59 ./Python-2.7.9/Demo/rpc/xdr.py
7866922    4 -rw-r--r--   1 mysql    mysql         575 Dec 10 23:59 ./Python-2.7.9/Demo/rpc/T.py
[root@LookBack ~]# find ./ -gid 0 -ls | tail
7864344    4 drwxr-----   2 root     root         4096 May 17 18:59 ./.pki/nssdb
7864338    0 -rw-r--r--   1 root     root            0 May 24 05:13 ./1
7864329    4 -rw-r--r--   1 root     root           17 May 18 16:23 ./.mysqlpassword
7864349    4 -rw-r--r--   1 root     root         3799 May  2 19:33 ./.vimrc
7864336    4 -rw-------   1 root     root          769 May 18 01:26 ./.mysql_history
7864325    4 -rw-r--r--   1 root     root          129 Dec  4  2004 ./.tcshrc
7864324    4 -rw-r--r--   1 root     root          176 May 20  2009 ./.bash_profile
7870839    4 -rw-------   1 root     root          375 May 24 01:25 ./.Xauthority
7864345    4 -rw-r--r--   1 root     root         1151 May 17 19:03 ./.lnmpinfo
7864334    4 -rw-r--r--   1 root     root            7 May 17 18:07 ./.mdg

Linux基础入门之find命令详解

查找当前目录下没有属主的文件
查找当前目录下没有数组的文件
[root@LookBack ~]# find ./ -nouser -ls | tail
7869393    4 -rwxr-xr-x   1 501      wheel          84 Feb 25  2014 ./ipython-1.2.1/docs/update_version.sh
7869216    4 -rw-r--r--   1 501      wheel         479 Feb 25  2014 ./ipython-1.2.1/docs/README.rst
7869215    4 -rw-r--r--   1 501      wheel         771 Feb 25  2014 ./ipython-1.2.1/docs/pycon.ico
7869205    4 -rw-r--r--   1 501      wheel        2075 Feb 25  2014 ./ipython-1.2.1/docs/make.cmd
7870575    4 -rwxr-xr-x   1 501      wheel         156 Feb 25  2014 ./ipython-1.2.1/setupegg.py
7995768    4 drwxr-xr-x   2 501      wheel        4096 May 20 11:05 ./ipython-1.2.1/setupext
7995771    8 -rw-r--r--   1 501      wheel        4825 Feb 25  2014 ./ipython-1.2.1/setupext/setupext.py
7995769    4 -rw-r--r--   1 501      wheel          91 Feb 25  2014 ./ipython-1.2.1/setupext/__init__.py
7995770    4 -rw-r--r--   1 501      wheel        3059 Feb 25  2014 ./ipython-1.2.1/setupext/install_data_ext.py
7870572    4 -rw-r--r--   1 501      wheel        2018 Feb 25  2014 ./ipython-1.2.1/README.rst
[root@LookBack ~]# touch find_test{1,2,3,4,5,6}
[root@LookBack ~]# chgrp 200 find_test*
[root@LookBack ~]# find ./ -nogroup -ls | tail
7864340    0 -rw-r--r--   1 root     200             0 May 24 05:17 ./find_test1
7870873    0 -rw-r--r--   1 root     200             0 May 24 05:17 ./find_test4
7870874    0 -rw-r--r--   1 root     200             0 May 24 05:17 ./find_test5
7870871    0 -rw-r--r--   1 root     200             0 May 24 05:17 ./find_test2
7870875    0 -rw-r--r--   1 root     200             0 May 24 05:17 ./find_test6
7870872    0 -rw-r--r--   1 root     200             0 May 24 05:17 ./find_test3

Linux基础入门之find命令详解

查找/etc目录下 文件名以p开头且属主是root的文件
[root@LookBack ~]# find /etc/ -name "p*[0-9]*" -a -user root -ls | tail
6685622 7900 -rw-r--r--   1 root     root      8086845 May 17 18:21 /etc/selinux/targeted/policy/policy.24
6685011    4 drwxr-xr-x   3 root     root         4096 Jan 28  2014 /etc/pkcs11
6687472    4 -rw-r--r--   1 root     root          155 Oct 15  2014 /etc/pam.d/polkit-1
6684835    4 -rw-r--r--   1 root     root          451 Apr 28 21:25 /etc/pki/nssdb/pkcs11.txt
6818712    4 drwxr-xr-x   5 root     root         4096 May 17 19:16 /etc/polkit-1
6687556    0 lrwxrwxrwx   1 root     root           33 May 17 19:19 /etc/alternatives/pack200 -> /usr/java/jdk1.8.0_45/bin/pack200
6687569    0 lrwxrwxrwx   1 root     root           43 May 17 19:19 /etc/alternatives/policytool.1 -> /usr/java/jdk1.8.0_45/man/man1/policytool.1
6687568    0 lrwxrwxrwx   1 root     root           40 May 17 19:19 /etc/alternatives/pack200.1 -> /usr/java/jdk1.8.0_45/man/man1/pack200.1
[root@LookBack ~]# find /etc/ -name "p*[0-9]*" -user root -ls | tail
6685622 7900 -rw-r--r--   1 root     root      8086845 May 17 18:21 /etc/selinux/targeted/policy/policy.24
6685011    4 drwxr-xr-x   3 root     root         4096 Jan 28  2014 /etc/pkcs11
6687472    4 -rw-r--r--   1 root     root          155 Oct 15  2014 /etc/pam.d/polkit-1
6684835    4 -rw-r--r--   1 root     root          451 Apr 28 21:25 /etc/pki/nssdb/pkcs11.txt
6818712    4 drwxr-xr-x   5 root     root         4096 May 17 19:16 /etc/polkit-1
6687556    0 lrwxrwxrwx   1 root     root           33 May 17 19:19 /etc/alternatives/pack200 -> /usr/java/jdk1.8.0_45/bin/pack200
6687569    0 lrwxrwxrwx   1 root     root           43 May 17 19:19 /etc/alternatives/policytool.1 -> /usr/java/jdk1.8.0_45/man/man1/policytool.1
6687568    0 lrwxrwxrwx   1 root     root           40 May 17 19:19 /etc/alternatives/pack200.1 -> /usr/java/jdk1.8.0_45/man/man1/pack200.1

Linux基础入门之find命令详解
查找当前目录下文件名含有一个s,且属主不是root的文件

[root@LookBack ~]# find ./ -name "*s*" -a -not -user root -ls | tail
7866881    4 -rw-r--r--   1 mysql    mysql        3965 Dec 10 23:59 ./Python-2.7.9/Demo/tix/samples/SHList1.py
7866893   40 -rw-r--r--   1 mysql    mysql       38406 Dec 10 23:59 ./Python-2.7.9/Demo/tix/tixwidgets.py
7866912    4 drwxr-xr-x   2 mysql    mysql        4096 Dec 10 23:59 ./Python-2.7.9/Demo/comparisons
7866914    4 -rwxr-xr-x   1 mysql    mysql        2288 Dec 10 23:59 ./Python-2.7.9/Demo/comparisons/systemtest.py
7866917    4 -rwxr-xr-x   1 mysql    mysql        1515 Dec 10 23:59 ./Python-2.7.9/Demo/comparisons/regextest.py
7866916    4 -rw-r--r--   1 mysql    mysql          30 Dec 10 23:59 ./Python-2.7.9/Demo/comparisons/patterns
7866913    4 -rwxr-xr-x   1 mysql    mysql        1265 Dec 10 23:59 ./Python-2.7.9/Demo/comparisons/sortingtest.py
7866924    8 -rw-r--r--   1 mysql    mysql        5323 Dec 10 23:59 ./Python-2.7.9/Demo/rpc/nfsclient.py
7866926    4 -rwxr-xr-x   1 mysql    mysql         697 Dec 10 23:59 ./Python-2.7.9/Demo/rpc/test
7866925    4 -rw-r--r--   1 mysql    mysql        2629 Dec 10 23:59 ./Python-2.7.9/Demo/rpc/rnusersclient.py
[root@LookBack ~]# find ./ -name "*s*" -a ! -user root -ls | tail
7866881    4 -rw-r--r--   1 mysql    mysql        3965 Dec 10 23:59 ./Python-2.7.9/Demo/tix/samples/SHList1.py
7866893   40 -rw-r--r--   1 mysql    mysql       38406 Dec 10 23:59 ./Python-2.7.9/Demo/tix/tixwidgets.py
7866912    4 drwxr-xr-x   2 mysql    mysql        4096 Dec 10 23:59 ./Python-2.7.9/Demo/comparisons
7866914    4 -rwxr-xr-x   1 mysql    mysql        2288 Dec 10 23:59 ./Python-2.7.9/Demo/comparisons/systemtest.py
7866917    4 -rwxr-xr-x   1 mysql    mysql        1515 Dec 10 23:59 ./Python-2.7.9/Demo/comparisons/regextest.py
7866916    4 -rw-r--r--   1 mysql    mysql          30 Dec 10 23:59 ./Python-2.7.9/Demo/comparisons/patterns
7866913    4 -rwxr-xr-x   1 mysql    mysql        1265 Dec 10 23:59 ./Python-2.7.9/Demo/comparisons/sortingtest.py
7866924    8 -rw-r--r--   1 mysql    mysql        5323 Dec 10 23:59 ./Python-2.7.9/Demo/rpc/nfsclient.py
7866926    4 -rwxr-xr-x   1 mysql    mysql         697 Dec 10 23:59 ./Python-2.7.9/Demo/rpc/test
7866925    4 -rw-r--r--   1 mysql    mysql        2629 Dec 10 23:59 ./Python-2.7.9/Demo/rpc/rnusersclient.py

Linux基础入门之find命令详解
查找当前目录下属主是mysql且文件名有个s文件名有个s且没有属组的文件
注意

1、这里的4个条件做了且和或组合,大家仔细看下我两条命令的写法和结果,这地方最好自己理解透,那么find命令的组合查找就搞的差不多了

2、而且这里我没有在find命令最后加-ls而是在前面用ls 后面命令引用起来的,这地方如果用还是带-ls会出意想不到的结果,具体原因-ls 只显示最后一组的结果,如果想显示组合条件的全部结果那么就需要把组合条件括起来。

[root@LookBack ~]# ls -l $(find ./ -user mysql -a -name "*s*" -o -nogroup | tail)
-rw-r--r-- 1 root    200    0 May 24 05:17 ./find_test2
-rw-r--r-- 1 root    200    0 May 24 05:17 ./find_test3
-rw-r--r-- 1 root    200    0 May 24 05:17 ./find_test6
-rw-r--r-- 1 mysql mysql   30 Dec 10 23:59 ./Python-2.7.9/Demo/comparisons/patterns
-rwxr-xr-x 1 mysql mysql 1515 Dec 10 23:59 ./Python-2.7.9/Demo/comparisons/regextest.py
-rwxr-xr-x 1 mysql mysql 1265 Dec 10 23:59 ./Python-2.7.9/Demo/comparisons/sortingtest.py
-rwxr-xr-x 1 mysql mysql 2288 Dec 10 23:59 ./Python-2.7.9/Demo/comparisons/systemtest.py
-rw-r--r-- 1 mysql mysql 5323 Dec 10 23:59 ./Python-2.7.9/Demo/rpc/nfsclient.py
-rw-r--r-- 1 mysql mysql 2629 Dec 10 23:59 ./Python-2.7.9/Demo/rpc/rnusersclient.py
-rwxr-xr-x 1 mysql mysql  697 Dec 10 23:59 ./Python-2.7.9/Demo/rpc/test
[root@LookBack ~]# ls -l $(find ./ -user mysql -a -name "*s*" -o -name "*s*" -a -nogroup | tail)
-rw-r--r-- 1 root    200    0 May 24 05:17 ./find_test2
-rw-r--r-- 1 root    200    0 May 24 05:17 ./find_test3
-rw-r--r-- 1 root    200    0 May 24 05:17 ./find_test6
-rw-r--r-- 1 mysql mysql   30 Dec 10 23:59 ./Python-2.7.9/Demo/comparisons/patterns
-rwxr-xr-x 1 mysql mysql 1515 Dec 10 23:59 ./Python-2.7.9/Demo/comparisons/regextest.py
-rwxr-xr-x 1 mysql mysql 1265 Dec 10 23:59 ./Python-2.7.9/Demo/comparisons/sortingtest.py
-rwxr-xr-x 1 mysql mysql 2288 Dec 10 23:59 ./Python-2.7.9/Demo/comparisons/systemtest.py
-rw-r--r-- 1 mysql mysql 5323 Dec 10 23:59 ./Python-2.7.9/Demo/rpc/nfsclient.py
-rw-r--r-- 1 mysql mysql 2629 Dec 10 23:59 ./Python-2.7.9/Demo/rpc/rnusersclient.py
-rwxr-xr-x 1 mysql mysql  697 Dec 10 23:59 ./Python-2.7.9/Demo/rpc/test

Linux基础入门之find命令详解

[root@LookBack ~]# ls -l $(find ./ -user mysql -a -name "*s*" -o -nogroup | tail)
-rw-r--r-- 1 root 200 0 May 24 05:17 ./find_test2
-rw-r--r-- 1 root 200 0 May 24 05:17 ./find_test3
-rw-r--r-- 1 root 200 0 May 24 05:17 ./find_test6
-rw-r--r-- 1 mysql mysql 30 Dec 10 23:59 ./Python-2.7.9/Demo/comparisons/patterns
-rwxr-xr-x 1 mysql mysql 1515 Dec 10 23:59 ./Python-2.7.9/Demo/comparisons/regextest.py
-rwxr-xr-x 1 mysql mysql 1265 Dec 10 23:59 ./Python-2.7.9/Demo/comparisons/sortingtest.py
-rwxr-xr-x 1 mysql mysql 2288 Dec 10 23:59 ./Python-2.7.9/Demo/comparisons/systemtest.py
-rw-r--r-- 1 mysql mysql 5323 Dec 10 23:59 ./Python-2.7.9/Demo/rpc/nfsclient.py
-rw-r--r-- 1 mysql mysql 2629 Dec 10 23:59 ./Python-2.7.9/Demo/rpc/rnusersclient.py
-rwxr-xr-x 1 mysql mysql 697 Dec 10 23:59 ./Python-2.7.9/Demo/rpc/test
[root@LookBack ~]# find ./ -user mysql -a -name "*s*" -o -nogroup -ls | tail
7864340 0 -rw-r--r-- 1 root 200 0 May 24 05:17 ./find_test1
7870873 0 -rw-r--r-- 1 root 200 0 May 24 05:17 ./find_test4
7870874 0 -rw-r--r-- 1 root 200 0 May 24 05:17 ./find_test5
7870871 0 -rw-r--r-- 1 root 200 0 May 24 05:17 ./find_test2
7870875 0 -rw-r--r-- 1 root 200 0 May 24 05:17 ./find_test6
7870872 0 -rw-r--r-- 1 root 200 0 May 24 05:17 ./find_test3
[root@LookBack ~]# find ./ \( -user mysql -a -name "*s*" -o -nogroup \) -ls | tail
7866914 4 -rwxr-xr-x 1 mysql mysql 2288 Dec 10 23:59 ./Python-2.7.9/Demo/comparisons/systemtest.py
7866917 4 -rwxr-xr-x 1 mysql mysql 1515 Dec 10 23:59 ./Python-2.7.9/Demo/comparisons/regextest.py
7866916 4 -rw-r--r-- 1 mysql mysql 30 Dec 10 23:59 ./Python-2.7.9/Demo/comparisons/patterns
7866913 4 -rwxr-xr-x 1 mysql mysql 1265 Dec 10 23:59 ./Python-2.7.9/Demo/comparisons/sortingtest.py
7866924 8 -rw-r--r-- 1 mysql mysql 5323 Dec 10 23:59 ./Python-2.7.9/Demo/rpc/nfsclient.py
7866926 4 -rwxr-xr-x 1 mysql mysql 697 Dec 10 23:59 ./Python-2.7.9/Demo/rpc/test
7866925 4 -rw-r--r-- 1 mysql mysql 2629 Dec 10 23:59 ./Python-2.7.9/Demo/rpc/rnusersclient.py
7870871 0 -rw-r--r-- 1 root 200 0 May 24 05:17 ./find_test2
7870875 0 -rw-r--r-- 1 root 200 0 May 24 05:17 ./find_test6
7870872 0 -rw-r--r-- 1 root 200 0 May 24 05:17 ./find_test3
Linux基础入门之find命令详解
 查找当前目录下文件名不含s且属主不是root的文件
 注意

这里我们先按照常规写法结果是正确的,但是我们用简写方式就出错了,然后简写方式把-a换成-o又正常了,这是为什么?这里我们就要说说德摩根定律

非(P 且 Q)=(非 P)或(非 Q)

非(P 或 Q)=(非 P)且(非 Q)

如果你能理解或者已经知道德摩根定律了那么这地方你就好理解了

[root@LookBack FIND_test]# ls -l
total 0
-rw-r--r-- 1 mysql root 0 May 24 06:06 find_a_test1
-rwxr-xr-x 1 root  root 0 May 24 06:06 find_a_test2
-rwxr-xr-x 1 mysql root 0 May 24 06:06 find_a_test3
-rwxr-xr-x 1 mysql root 0 May 24 06:06 find_b_teet1
-rwxr-xr-x 1 mysql root 0 May 24 06:06 find_b_teet2
-rw-r--r-- 1 root  root 0 May 24 06:06 find_b_teet3
[root@LookBack FIND_test]# find ./ -not -name "*s*" -a -not -user root
./find_b_teet1
./find_b_teet2
[root@LookBack FIND_test]# find ./ -not \( -name "*s*" -a -user root \)
./
./find_a_test1
./find_a_test3
./find_b_teet3
./find_b_teet1
./find_b_teet2
[root@LookBack FIND_test]# find ./ -not \( -name "*s*" -o -user root \)
./find_b_teet1
./find_b_teet2
[root@LookBack FIND_test]# 

Linux基础入门之find命令详解
查找当前目录下大于1M的文件(查找大于1M的文件)
查找当前目录下1M大小的文件(查找大于0小于等于1M的文件)
查找当前目录下小余1M的文件(根据上面的说法这里查找的就是大小是0的文件)
查找当前目录下小余2M的文件(查找小于等于1M的文件)

[root@LookBack FIND_test]# dd if=/dev/zero of=/tmp/FIND_test/find_a_test1 bs=1405K count=1
1+0 records in
1+0 records out
1438720 bytes (1.4 MB) copied, 0.00142433 s, 1.0 GB/s
[root@LookBack FIND_test]# dd if=/dev/zero of=/tmp/FIND_test/find_a_test2 bs=900K count=1
1+0 records in
1+0 records out
921600 bytes (922 kB) copied, 0.000971104 s, 949 MB/s
[root@LookBack FIND_test]# dd if=/dev/zero of=/tmp/FIND_test/find_a_test3 bs=2900K count=1
1+0 records in
1+0 records out
2969600 bytes (3.0 MB) copied, 0.00280346 s, 1.1 GB/s
[root@LookBack FIND_test]# ls -lh
total 5.1M
-rw-r--r-- 1 root root 1.4M May 24 06:39 find_a_test1
-rw-r--r-- 1 root root 900K May 24 06:39 find_a_test2
-rw-r--r-- 1 root root 2.9M May 24 06:39 find_a_test3
[root@LookBack FIND_test]# find ./ -size +1M -ls
1048686 1408 -rw-r--r--   1 root     root      1438720 May 24 06:39 ./find_a_test1
1048688 2900 -rw-r--r--   1 root     root      2969600 May 24 06:39 ./find_a_test3
[root@LookBack FIND_test]# find ./ -size 1M -ls
1048684    4 drwxr-xr-x   2 root     root         4096 May 24 06:39 ./
1048687  900 -rw-r--r--   1 root     root       921600 May 24 06:39 ./find_a_test2
[root@LookBack FIND_test]# find ./ -size -1M -ls
[root@LookBack FIND_test]# find ./ -size -2M -ls
1048684    4 drwxr-xr-x   2 root     root         4096 May 24 06:39 ./
1048687  900 -rw-r--r--   1 root     root       921600 May 24 06:39 ./find_a_test2
[root@LookBack FIND_test]# 

Linux基础入门之find命令详解
查找2天之前被访问的文件

[root@LookBack FIND_test]# touch -a -t 201505051314 find_a_test1
[root@LookBack FIND_test]# stat find_a_test1
  File: `find_a_test1'
  Size: 1438720         Blocks: 2816       IO Block: 4096   regular file
Device: 801h/2049d      Inode: 1048686     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2015-05-05 13:14:00.000000000 +0800
Modify: 2015-05-24 06:39:45.061752510 +0800
Change: 2015-05-24 07:09:56.662025805 +0800
[root@LookBack FIND_test]# stat `find ./ -atime +2`
  File: `./find_a_test1'
  Size: 1438720         Blocks: 2816       IO Block: 4096   regular file
Device: 801h/2049d      Inode: 1048686     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2015-05-05 13:14:00.000000000 +0800
Modify: 2015-05-24 06:39:45.061752510 +0800
Change: 2015-05-24 07:09:56.662025805 +0800

Linux基础入门之find命令详解

Linux基础入门之find命令详解


讲解演示都结束了,那么问题来了

1查找/var目录属主为root且属组为mail的所有文件

2查找/usr目录下不属于root、bin或者hadoop的所有文件

3查找/etc目录下最近一周内其内容修改过且不属于root或hadopp的文件

4查找当前系统上没有属主或属组且最近1个月内曾被访问过的文件

5查找/etc目录下大于1M的普通文件夹

6查找/etc目录下所有用户都没有写权限的文件

7查找/etc目录下至少有一类用户没有写权限的文件

8查找/etc/init.d目录下所有用户都有执行权限且其他用户有写权限的文件。

 

lookback

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:1   其中:访客  1   博主  0

    • avatar 1829631163 0

      第一次访问,支持一下哈。