从案例出发——命令总结之find篇

在这篇文章中你将看到以下内容:1、find命令的格式、语法、及实际应用

2、3个时间戳的意义 

3、各种文件类型的解释 

4、软硬链接的区别

5、exec和xargs的区别

6、几个逻辑判断符的意义 

7、通配符的意义 

8、find 命令下时间查找的特殊定义

首先,来看看以下题目:    将文件/tmp/b目录下c文件以外的所有文件压缩打包到/home/a,名字为a-日期(2016-03-16.tar.gz   

首先搭建好测试环境:

[root@desperadochn home]# mkdir -p /tmp/b
[root@desperadochn home]# cd /tmp/b
[root@desperadochn b]# touch {a..g}
[root@desperadochn b]# lsa b c d e f g
[root@desperadochn b]# cd /home/
[root@desperadochn home]# mkdir a
[root@desperadochn home]# ls -l
总用量 0drwxr-xr-x. 2 root root 6 3月 19 10:07 a

给出解法:

[root@desperadochn b]# find /tmp/b/ ! -name "c" -type f |xargs tar -czf /home/a/a-2016-03-16.tar.gz    #find命令 加上条件判断 !排除 文件名为c 且类型为普通文件的文件 用xargs传参数 用tar打包压缩
root@desperadochn b]# ls -l /home/a/     #查看压缩包是否建立
总用量 4
-rw-r--r--. 1 root root 166 3月  19 10:32 a-2016-03-16.tar.gz   
[root@desperadochn b]# tar -tf /home/a/a-2016-03-16.tar.gz   #查看压缩包中文件内容
tmp/b/a
tmp/b/b
tmp/b/d
tmp/b/e
tmp/b/f
tmp/b/g

这里我们引出一个重要的命令,它非常重要,它和其他命令组合或者自己能实现很多应用,

它就是find命令

   what is   这是什么?

find 顾名思义 命令的含义是帮助寻找某样东西。find是一种实时查找工具,通过遍历指定路径下的文件系统完成文件查找。他有如下工作特点:

1、查找速度略慢;

2、精确查找;

3、实时查找;

           why 我们为什么使用它?

人们为何使用find 命令主要因为以下工作特性:

      1、精确查找

      2、实时查找

 其次为了应对各种各样层出不穷的查找需求其命令功能异常强大,然而也异常复杂,这可能是linux/Unix系统中最复杂的命令之一了。

这就是我今天写这篇总结的原因了, 非常强大,非常复杂,易学难精,在工作中极其有用 ,必须好好学习,好好总结。   


          when  何时使用?

1、当你需要实时查找某些文件时。

2、当你需要从海量文件中排除你不需要的文件时,他支持通配符和条件判断语句哦。

3、当你需要精确查找某个文件时。

4、当你淹没在海量的文件中,忘记了文件名但是记得文件的其他信息 也许该命令可以帮到你。

       

          where   我们在哪里可以使用它?

1、任何linux/unix ,unix like系统都可以使用该命令 ,这是一条非常古老且经典的命令。

2、是的 苹果笔记本的osx系统中也可以使用该命令哦,我试过了,只需要打开终端。。。。。。。

3、但是有一点千万谨记,他是一个消耗系统资源较大的命令,如果搜寻的范围巨大的话,请在空闲的午夜进行,特别是在生产环境中的服务器中,因为他很可能会造成服务器宕机。

        

       who 谁会使用?

1、淹没在海量文件中的管理员,特别是命名冗长的日志文件、备份文件啥的。老天这些文件不好找也不好记。

2、他的功能非常强大能帮有经验的管理员省很多事。

  how 如何实现?

首先说明下find命令的格式:

  find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path…] [expression]

The  -H, -L and -P options control the treatment of symbolic links    #  man文档里面写明了 -H、-L、-P控制了 find命令处理符号链接的级别

The five `real' options -H, -L, -P, -D and -O must appear before the first path name   #这些 -H -D -L -P -O 必须放在文件名的前面。

-P:永远不跟踪符号链接,这是默认选项。

-L:跟踪符号链接。

-H:不跟踪符号链接 除非用命令对数据加以判定

所谓跟踪符号链接是指:若被搜索的目录下有一个符号链接,且指向另一个目录,那么被指向的目录也将被搜索。

如果指定多条上述选项,只生效最后一条

 [-D debugopts] 打印诊断信息,这对你诊断为什么find命令·没有达到你的预期非常有帮助。诊断选项列表会用“,”分开。

有效的debug选项包括:

 help :解释debug选项     #Explain the debugging options

 tree:用最原始且最优的组织显示其表达树   # Show the expression tree in its original and optimised form.

stat:寻找程序试图最小化这样的调用           #Print messages as files are examined with the stat and lstat system calls.  The find program tries to minimise such calls.

opt:打印诊断信息,有关表达式树的优化     #Prints diagnostic information relating to the optimisation of the expression tree; see the -O option.

 rates:打印一个摘要,说明每个判断的成功或失败。# Prints a summary indicating how often each predicate succeeded or failed.

-Olevel:支持查询优化的等级,find程序重新排序测试来加快执行速度的同时保持整体效果。有以下几个级别:    

0:相当于等级1的优化。# Equivalent to optimisation level 1

1:他是默认的优化水平,相对应于传统的行为 表达式将重新排序,仅根据文件名称测试的表达式将排第一。#This is the default optimisation level and corresponds to the traditional behaviour.  Expressions are reordered so that tests based only on the names of files (for example -name and -regex) are performed first.

2: Any -type or -xtype tests are performed after any tests based only on the names of files, but before any tests that require information from the inode.  On many modern versions of Unix, file types are returned by readdir() and so these predicates are faster to evaluate than predicates which need to stat the file first.  If you use the -fstype FOO predicate and specify a filsystem type FOO which is not known (that is, present in `/etc/mtab') at the time find starts,  that  predicate is equivalent to -false.  #这个不常用 实在看不懂 有看懂的说一下

3: At this optimisation level, the full cost-based query optimiser is enabled.  The order of tests is modified so that cheap (i.e. fast) tests are performed first and more expensive ones are performed later, if necessary.  Within each cost band,predicates are evaluated earlier or later according to whether they are likely to succeed or not.  For -o, predicates which are likely to succeed are evaluated earlier, and for -a, predicates which are likely to fail are evaluated earlier.  #这个不常用 实在看不懂 有看懂的说一下


以上[-H] [-L] [-P] [-D debugopts] [-Olevel] 的选项日常工作中很少用到(老鸟说的,很多国外文献也没提),仅仅知道find命令默认工作在-P选项(不跟踪符号链接),1level下。虽然可能没什么用但是能提升下逼格也是好的。

总结以上内容就是:

find命令其实有两种options,一种是“真正属于自己的”,另一种位于expressions内部。第一种选项一共就5个:-P -L -H -D -O,其中-D用来显示调试信息;-O用来指定优化级别,后面紧跟一个数字(没有空格),它们俩的具体信息可以看man。而-P -L -H的作用是“control the treatment of symbolic links”,不指定它们中的任意一个时,默认为-P,即不跟踪链接。所谓跟踪链接是指:若被搜索的目录下有一个符号链接,且指向另一个目录,那么被指向 的目录也将被搜索。
第二种选项和第一种被path隔开,实际上,第一种选项比较少使用,find后面往往直接就是path,即要搜索的目录。如果不指定path,默认为当前 目录。搜索的时候,指定目录的子目录也是被搜索的对象,所以path可以视为start_dir。可以同时指定多个目录。


因为[-H] [-L] [-P] 这3个选项默认是P 且find默认是运行在1level下的(需要改变模式选项的情况不多),debug选项一般也用不到,因此find命令的格式可以简化为以下:

      find path test actions 或者 find   [options…….] [path…] [expression]

                                查找路径:指定具体目标路径;默认为当前目录;

查找条件:指定的查找标准,可以文件名、大小、类型、权限等标准进行;默认为找出指定路径下的所有文件;

处理动作:对符合条件的文件做什么操作;默认输出至屏幕;

find命令支持如下功能:

    1、 find命令支持组合条件判断:

                   与:-a

                   或:-o

                   非:-not,!

                   !A -a !B = !(A -o B)

                   !A -o !B = !(A -a B)

           接下来具体说一下几个逻辑判断

          首先定义真(true)为1,假(false)为0

          与:用 &&表示 find命令中用-a表示

         含义:相当于生活中说的“并且” 就是两个条件都同时成立时才为真。

         举例:

                    1 && 1 =1

                    1 && 0 =0

                    0 && 1 =0

                    0 && 0 =0

           或:用 ||表示,在find命令中用-o表示

           含义:相当于生活中所说的“或者”,当两个条件中有任何一个条件满足时,逻辑或的运算结果为真

           举例:

                    1 || 1 =1

                    1 || 0 =1

                    0 || 1 =1

                    0 || 0 =0

           非:用!表示,在find命令中可以用-not或!表示。

             含义:逻辑非即取其本来值得反

             举例:

                    !1 =0

                    !0 =1

2、find命令支持-exec和 | xargs传递参数给下一个命令

接下来说说-exec和xargs的区别:

       exec:把符合前面条件的参数一次性的传递给后面的命令,但是有些命令不能一次性接收,此时命令执行可能会失败,这时 | xargs COMMAND 可以规避此问题。

      xargs:把前面的命令的 输出传递给后面命令当作参数,  与exec不同的是 xargs 把参数一个一个传递,而非exec的一次性传递,而是一个一个的传递参数。 

3、find也支持通配符及专用字符集合,这会对我们的工作带来巨大便利,必须熟练掌握它:

  通配符:*, ?, []


(1) * :

    任意长度的任意字符

   

(2) ? :

      任意单个字符


(3) [] :

匹配指定范围内的任意单个字符

(4) [^]

匹配指定范围外的任意单个字符

专用字符集合:

[:digit:]:任意数字,相当于0-9

[:lower:]:任意小写字母

[:upper:]: 任意大写字母

[:alpha:]: 任意大小写字母

[:alnum:]:任意数字或字母

[:space:]:匹配空白字符,包括空格,tab

[:punct:]:标点符号

4、find命令支持按照文件类型来查找文件(定义的文件类型见下表):

字符 含义
b 块设备文件
d 目录
c 字符设备文件
p 管道文件
l 符号链接文件
f 普通文件
s socket文件

5、find命令支持以时间来查找文件,linux下定义了3个时间戳:   

(1)、概述:

atime :Access time  最后访问时间  读取文件内容(stat查看)   

ctime:Change time  状态改变时间  改变文件内容(stat查看)   

mtime:Modifty time 最后修改时间    元数据发生改变(stat查看)  

它有如下特性:  (1)ls -l 显示的是 mtime  

(2)文件的 Access time,atime 是在读取文件或者执行文件时更改的。对于文件当修改mtime,ctime必须随着改变.因为文件大小等都属性;有人说说atime也一定会改变,要想修改文件必须先访问;其实是不对的,有不必访问文件就能修改其内容:如:#echo “This is a test !” >> /etc/issue,issue文件内容会变,但并没有访问文件,所以atime并没有改变.对于目录,访问一个目录其atime改变,mtime ctime不变;修改一个目录,在一个目录下touch一个文件,mtimectime会改变,atime不一定会变; 

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

(4)文件的 Change time,ctime 是在写入文件、更改所有者、权限或 链接设置时随 Inode的内容更改而更改的。记录该文件的inode节点被修改的时间。touch命令除了-d-t选项外都会改变该时间。而且chmod,chown等命令也能改变该值。

6、find命令也支持查找软硬链接   首先说一下inode:理解inode,要从文件储存说起。文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"Sector)。每个扇区储存512字节(相当于0.5KB)。操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个""block)。这种由多个扇区组成的"",是文件存取的最小单位。""的大小,最常见的是4KB,即连续八个 sector组成一个 block文件数据都储存在""中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"每一个文件都有对应的inode,里面包含了与该文件有关的一些信息。
    软连接:除了硬链接以外,还有一种特殊情况。文件A和文件Binode号码虽然不一样,但是文件A的内容是文件B的路径。读取文件A时,系统会自动将访问者导向文件B。因此,无论打开哪一个文件, 最终读取的都是文件B。这时,文件A就称为文件B"软链接"soft link)或者"符号链接(symbolic link)。这意味着,文件A依赖于文件B而存在,如果删除了文件B,打开文件A就会报错:"No such file or directory"。这是软链接与硬链接最大的不同:文件A指向文件B的文件名,而不是文件Binode号码,文件Binode"链接数"不会因此 发生变化。

    硬链接: 一般情况下,文件名和inode号码是"一一对应"关系,每个inode号码对应一个文件名。但是,Unix/Linux系统允许,多个文件名指向同一个inode号码。这意味着,可以用不同的文件名访问同样的内容;对文件内容进行修改,会影响到所有文件名;但是,删除一个文件名,不影响另一个文件名的访问。这种情况就被称为"硬链接"hard link)。他们有如下不同点: 

1、删除原文件之后,硬链接可以继续使用,软链接就不能使用了。  

2、创建硬链接和软连接后,硬链接inode号不变,软连接会变;原文件修改后,硬链接和软链接都会被修改。  

3、硬链接不能指向目录,而软连接可以  

4、硬链接不能跨分区,而软连接可以。

7、find命令根据时间查找文件的特殊定义,find命令根据时间查找文件除了需要了解3个时间戳之外,还需要了解一些特殊定义,因为所有时间选项都要与一个值n结合使用,指定为-n、n、或+n,其中含义如下:

N * 24
+1 表示 1 * 24 +24小时以外..
+0 表示 0 * 24 +24小时以外
1 表示 1 * 24 + 24 到 24 之间..
0 表示 0 * 24 + 24 到 0 之间..
-1 表示 0 * 24 +24 内,甚至为未来时间...

举例:

1.当前时间24小时—当前时间(昨天-今天)
#find . -mtime 0
2.当前时间48小时前–当前时间24小时前(前天-昨天)
#find . -mtime 1
3.当前时间48小时前(2天前)
#find . -mtime +1
4.当前时间24小时–当前时间(昨天-今天)
#find . -mtime -1

从案例出发——命令总结之find篇

8、与文件权限及名称有关的参数:

-name filename:搜寻文件名为 filename 的文件;
-size [+-]SIZE:搜寻比 SIZE 还要大(+)或小(-)的文件。 这个 SIZE 的规格有:c: 代表 byte k: 代表 1024bytes。所以,要找比 50KB还要大的文件,就是『-size +50k 
-type TYPE :搜寻文件的类型为 TYPE 的, 类型主要有:一般正规文件 (f), 装置文件 (b, c),目录 (d), 连结档 (l), socket (s),  FIFO (p) 等属性。
-perm mode :搜寻文件权限『 刚好等于』 mode 的文件, 这个 mode 为类似 chmod的属性值, 举例来说, -rwsr-xr-x 的属性为 4755 
-perm -mode :搜寻文件权限『必须要全部囊括 mode 的权限』的文件, 举例来说,我们要搜寻 -rwxr–r– ,亦即 0744 的文件,使用 -perm -0744当一个文件的权限为 -rwsr-xr-x ,亦即 4755 时,也会被列出来,因为 -rwsr-xr-x 的属性已经囊括了 -rwxr–r– 的属性了。
-perm /mode :搜寻文件权限『包含任一 mode 的权限』的文件, 举例来说,我们搜寻-rwxr-xr-x ,亦即 -perm /755 时,但一个文件属性为 -rw——-也会被列出来,因为他有 -rw…. 的属性存在!

9、单引号和双引号的区别

'单引号表示强引用,引用的变量不会被替换

“双引号表示弱引用,引用的变量会被替换

10、工作原理:

一旦输入该命令,find就会遵循一个3个步骤的处理过程。

(1)路径:find所做的第一件事就是查看每一个路径,检查这些路径所表示的整个目录树,包括所有的子目录。可以为find命令指定多个路径,空格分隔。

(2)测试:对于遇到的每一个文件,find应用指定的测试条件,这里的目标就是创建一个满足指定标准的所有文件的列表

(3)对每一个通过测试的文件,执行动作。

11、以下是find部分选项(包括测试选项)的含义:     

选项 选项含义
-name <文件名>    按照文件名来查找文件
-perm <权限>        按照文件的的权限来查找文件
-user <用户名>     按照文件的属主来查找文件
-group <组名>      按照文件的所属组来查找文件
-atime +(-)n                匹配在过去n天内被访问过(atime)的文件 n为数字
-amin +(-)n               匹配在过去n分钟内被访问过的文件  n为数字
-ctime +(-)n 匹配在过去n天内被更改过的文件      n为数字
-cmin +(-)n 匹配在过去n分钟内被更改过的文件  n为数字
-mtime +(-)n 匹配在过去n天内被修改过的文件 n为数字
-mmin +(-)n 匹配在过去n分钟内被修改过的文件 n为数字
-size n [ckMG] 查找大小为n的文件,n代表数字,c代表字节、k代表KB,M代表MB,G代表GB
-empty 查找空文件 可以是普通的文件或目录
-type <文件类型>     注:文件类型见下表 按照文件类型来查找目录
-fstype <文件系统类型> 按照指定的文件系统来查找目录
-nogroup  查找没有群组的文件
-nouser 查找没有用户的文件
-uid <用户UID> 按照文件属主的UID来查找文件
-gid <用户GID> 按照文件所属组的GID来查找文件
-inum n 按照文件的inode号码来查找文件  n代表数字
-readable 匹配可读的文件
-samefile <文件名> 查找和指定文件相同inode的文件
-writable  匹配可写文件
-links n 按照文件链接数来查找文件 n代表数字
-anewer 查找最近修改后又被访问的文件。受命令行后的-H和-L影响
-cnewer 查找最近编辑后又被更改的文件。受命令行后的-H和-L影响
-daystart 计算从今天开始的次数,而不是24之前。只影响命令行中在它后面的测试
-depth 顺着目录树向下查找,跳过目录,对遇到的第一个实际文件进行处理然后沿目录向上
-iname <pattern> -name选项的不区分大小写的版本。
-lname 查找指向符号链接文件,pattern可以包含通配符,且不把“/”和“.”当特殊字符,不区分大小写


下表是部分动作选项的含义:

选项 含义
-delete 删除文件
-print 将路径名写入到标准输出
-fprint file 同-print但是将输出写入到file中
-ls 显示长目录列表
-fls file 同-ls 但是将输出写入到file中
-exec command {} \ 执行command,{}指示匹配的文件名
-ok command {} \ 同-exec,但是在运行command之前进行确认


12、实例:

(1)、查找/var目录下属主为root,且属组为mail的所有文件或目录

[root@desperadochn ~]# find /var -user root -group mail
/var/spool/mail

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

[root@desperadochn ~]# adduser hadoop

[root@desperadochn ~]#  find /usr -not -user root -a -not -user bin -a -not -user hadoop

/usr/share/polkit-1/rules.d

[root@desperadochn ~]# find /usr -not \( -user root -o -user bin -o -user hadoop \)   #法二/usr/share/polkit-1/rules.d


(3)、查找/etc目录下最周一周内其内容修改过,同时属主不为root,也不是hadoop的文件或目录

[root@desperadochn ~]# find /etc -mtime -7 -a -not -user root -a -not -user hadoop
/etc/tcsd.conf 
[root@desperadochn ~]# find /etc/ -mtime -7 -a -not \( -user root -o -user hadoop \)   #法2
/etc/tcsd.conf

(4)、查找当前系统上没有属主或属组,且最近一个周内曾被访问过的文件或目录

[root@desperadochn ~]# find / -nouser -a -nogroup -a -atime -7
find: ‘/proc/2549/task/2549/fd/6’: 没有那个文件或目录
find: ‘/proc/2549/task/2549/fdinfo/6’: 没有那个文件或目录
find: ‘/proc/2549/fd/6’: 没有那个文件或目录
find: ‘/proc/2549/fdinfo/6’: 没有那个文件或目录
/root/cmatrix-1.2a

(5)、查找/etc目录下大于1M且类型为普通文件的所有文件

[root@desperadochn ~]# find /etc -size +1M -type f
/etc/udev/hwdb.bin
/etc/selinux/targeted/policy/policy.29
/etc/etc.tar.gz

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

[root@desperadochn ~]# find /etc -not -perm /222
/etc/pki/ca-trust/extracted/java/cacerts
/etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt
/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
/etc/pki/ca-trust/extracted/pem/email-ca-bundle.pem
/etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem
/etc/lvm/profile/cache-mq.profile/etc/lvm/profile/cache-smq.profile
/etc/lvm/profile/command_profile_template.profile
/etc/lvm/profile/metadata_profile_template.profile
/etc/lvm/profile/thin-generic.profile
/etc/lvm/profile/thin-performance.profile
/etc/udev/hwdb.bin
/etc/machine-id
/etc/gshadow
/etc/shadow
/etc/ld.so.conf.d/kernel-3.10.0-327.el7.x86_64.conf
/etc/gshadow-
/etc/openldap/certs/password
/etc/shadow-
/etc/sudoers

(7)、查找/etc目录下至少有一类用户没有执行权限的文件

[root@desperadochn ~]# find /etc -not -perm -111 |head -n10   #因输出结果过多只显示前10个结果
/etc/fstab
/etc/crypttab
/etc/resolv.conf
/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-Debug-7
/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-Testing-7
/etc/pki/tls/certs/Makefile/etc/pki/tls/openssl.cnf
/etc/pki/ca-trust/README
/etc/pki/ca-trust/ca-legacy.conf

(8)、查找/etc/init.d目录下,所有用户都有执行权限,且其它用户有写权限的文件

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

(9)、将过去系统上面 24 小时内有更动过内容 (mtime) 的文件列出

[root@desperadochn ~]# find / -mtime 0 |head -n10   #因输出结果过多 只显示前10个
#0 代表目前的时间,是从现在开始到24小时前
#如果是3天前的24小时内的文件变动呢?
#find / -mtime 3
/dev
/dev/vcsa6
/dev/vcs6
/dev/vcsa5
/dev/vcs5
/dev/vcsa4
/dev/vcs4
/dev/vcsa3
/dev/vcs3
/dev/vcsa2

(10)、在/tmp下生成一个file文件,并找出在tmp目录下比file还要新的文件名

[root@desperadochn tmp]# cd /tmp/
[root@desperadochn tmp]# touch file
[root@desperadochn tmp]# touch file1
[root@desperadochn tmp]# find /tmp/ -newer file
/tmp//tmp/file1

(11)、找出文件名为passwd的文件

[root@desperadochn tmp]# find / -name passwd
/sys/fs/selinux/class/passwd
/sys/fs/selinux/class/passwd
/perms/passwd
/etc/passwd
/etc/pam.d/passwd
/usr/bin/passwd

(12)、找出 /run 目录下,文件类型为 Socket 的文件

[root@desperadochn tmp]# find /run -type s
/run/NetworkManager/private-dhcp
/run/NetworkManager/private/run/dbus/system_bus_socket
/run/lvm/lvmetad.socket/run/lvm/lvmpolld.socket
/run/udev/control/run/systemd/shutdownd
/run/systemd/private
/run/systemd/journal/socket
/run/systemd/journal/stdout
/run/systemd/notify

(13)、出来 /usr/bin, /usr/sbin 这两个目录下,具有 SUID 或 SGID 的文件并对找到的文件使用 ls -l 列出来

[root@desperadochn tmp]# find /usr/bin /usr/sbin -perm /7000 -exec ls -l {} \;
-r-xr-sr-x. 1 root tty 15344 6月  10 2014 /usr/bin/wall
-rws--x--x. 1 root root 23960 11月 20 20:37 /usr/bin/chfn
-rws--x--x. 1 root root 23856 11月 20 20:37 /usr/bin/chsh
-rwsr-xr-x. 1 root root 64200 3月   6 2015 /usr/bin/chage
-rwsr-xr-x. 1 root root 78168 3月   6 2015 /usr/bin/gpasswd
-rwsr-xr-x. 1 root root 41752 3月   6 2015 /usr/bin/newgrp
-rwsr-xr-x. 1 root root 44232 11月 20 20:37 /usr/bin/mount
-rwsr-xr-x. 1 root root 32072 11月 20 20:37 /usr/bin/su
-rwsr-xr-x. 1 root root 31960 11月 20 20:37 /usr/bin/umount
-rwsr-xr-x. 1 root root 27656 6月  10 2014 /usr/bin/pkexec
-rwsr-xr-x. 1 root root 57544 7月  27 2015 /usr/bin/crontab
-rwxr-sr-x. 1 root tty 19536 11月 20 20:37 /usr/bin/write
---x--s--x. 1 root nobody 306304 11月 20 20:01 /usr/bin/ssh-agent
-rwsr-xr-x. 1 root root 27832 6月  10 2014 /usr/bin/passwd
---s--x--x. 1 root root 130720 11月 21 04:16 /usr/bin/sudo
-rwsr-xr-x. 1 root root 11208 8月  18 2015 /usr/sbin/pam_timestamp_check
-rwsr-xr-x. 1 root root 36264 8月  18 2015 /usr/sbin/unix_chkpwd
-rwxr-sr-x. 1 root root 11208 11月 20 14:21 /usr/sbin/netreport
-rwsr-xr-x. 1 root root 11272 11月 20 14:21 /usr/sbin/usernetctl
-rwxr-sr-x. 1 root postdrop 218552 6月  10 2014 /usr/sbin/postdrop
-rwxr-sr-x. 1 root postdrop 259992 6月  10 2014 /usr/sbin/postqueue

(14)、找出系统中大于1MB的文件

[root@desperadochn tmp]# find / -size +1M |head -n10  #可以预见结果庞大,只列出前10条结果
find: ‘/proc/2847/task/2847/fd/6’: 没有那个文件或目录
find: ‘/proc/2847/task/2847/fdinfo/6’: 没有那个文件或目录find: ‘/proc/2847/fd/6’: 没有那个文件或目录
find: ‘/proc/2847/fdinfo/6’: 没有那个文件或目录
/boot/grub2/fonts/unicode.pf2
/boot/System.map-3.10.0-327.el7.x86_64
/boot/vmlinuz-3.10.0-327.el7.x86_64
/boot/initramfs-0-rescue-26689a6cb0d3436a8653b8fd2530a897.img
/boot/vmlinuz-0-rescue-26689a6cb0d3436a8653b8fd2530a897
/boot/initramfs-3.10.0-327.el7.x86_64.img
/boot/initramfs-3.10.0-327.el7.x86_64kdump.img
/proc/kcore/run/log/journal/26689a6cb0d3436a8653b8fd2530a897
/system.journal/sys/devices/pci0000:00/0000:00:0f.0/resource1_wc

(15)、删除一个目录下的所有文件,但保留一个指定文件,假设这个目录是/tmp/test11,文件是a,b,c..f;要求只保留f

[root@desperadochn tmp]# mkdir -p /tmp/test11/
[root@desperadochn tmp]# cd /tmp/test11/
[root@desperadochn test11]# touch {a..f}
[root@desperadochn test11]# lsa  b  c  d  e  f#以上搭建测试环境
[root@desperadochn test11]# find /tmp/test11/ -type f ! -name "f" |xargs rm -f
[root@desperadochn test11]# ls
f

(16)、查找“/”目录下所有以“.conf”为扩展名的文件

[root@desperadochn ~]# find / -name '*.conf' |head -n10  #数据太多只取10个 
/run/tmpfiles.d/kmod.conf
/run/systemd/system/session-2.scope.d/50-SendSIGHUP.conf
/run/systemd/system/session-2.scope.d/50-After-systemd-user-sessions\x2eservice.conf
/run/systemd/system/session-2.scope.d/50-After-systemd-logind\x2eservice.conf
/run/systemd/system/session-2.scope.d/50-Description.conf
/run/systemd/system/session-2.scope.d/50-Slice.conf
/run/systemd/system/session-1.scope.d/50-SendSIGHUP.conf
/run/systemd/system/session-1.scope.d/50-After-systemd-user-sessions\x2eservice.conf
/run/systemd/system/session-1.scope.d/50-After-systemd-logind\x2eservice.conf
/run/systemd/system/session-1.scope.d/50-Description.conf

(17)、查找/root目录中为空的文件或者子目录

[root@desperadochn ~]# find /root -empty 
/root/a,b,c,d,e,f
/root/.pki/nssdb
/root/2.txt

(18)、查找inode号码是6029314的文件

[root@desperadochn ~]# cd /tmp/f
[root@desperadochn f]# lsa  b  c
[root@desperadochn f]# stat a  
文件:"a"  
大小:33        	块:8          IO 块:4096   普通文件
设备:fd00h/64768d	Inode:535915      硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:user_tmp_t:s0
最近访问:2016-03-22 14:17:04.649986156 +0800
最近更改:2016-03-22 14:18:57.364984128 +0800
最近改动:2016-03-22 14:18:57.367984127 +0800
创建时间:-#该文件的inode号是535915
[root@desperadochn f]# find / -inum 535915
/tmp/f/a

(19)、查找 /home目录下用户所有者UID为1000的文件

[root@desperadochn f]# find /home/ -uid 1000
/home/desperadochn
/home/desperadochn/.bash_logout
/home/desperadochn/.bash_profile
/home/desperadochn/.bashrc

参考文献:

《鸟哥的私房菜》作者 鸟哥

《linux应用大全基础管理篇》作者 於岳

《linux技术手册》作者 Ellen siever等

《Harley Hahn's Guide to Unix and Linux》 作者:Harley Hahn





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