find命令技巧总结

1、文件查找命令find和locate对比数据库

    在Linux中find命令是一个强大的文件查找命令,使用find查找一个文件至关方便。惟一不足的是,find命令是对指定路径下的文件实时查找,因此对系统的资源消耗较大。若是对于文件的查找不需要太精确,则可使用locate命令。相对于find命令,locate命令则是在一个存储了文件信息的数据库中查找文件,优势是速度快,缺点是查找出来的文件可能已不存在于当前系统,而且功能没有find那么强大。
ide

locate命令格式:ui

locate 文件名
#若是搜索不到文件,则多是文件不存在或数据库尚未生成
#生成数据库可使用命令
updatedb

find命令格式:spa

find [查找路径] [查找条件] [处理动做]


2、find经常使用参数3d

一、按用户查找文件blog

-name: 指定文件名查找,支持文件名通配符
-iname: 指定文件名查找,不区分大小写
-user: 根据文件属主查找
-group: 根据文件属组查找
#在用户被删除,但用户文件存在时使用 -user不能查找出文件,此时能够用UID
-uid: 根据UID查找
-gid: 根据GID查找
-nouser: 查找没有属主的文件
-nogroup: 查找没有属组的文件

说明:一般使用格式资源

find /tmp/ -name *.txt #文件名后缀是.txt的全部文件
find /tmp/ -user root #用户root的全部文件
find /tmp/ -nouser root #用户不是root的全部文件
find /tmp/ -nouser root -gid 500 #用户不是root且组ID为500的文件


二、组合条件查找get

-a: 与,两边条件必须同时知足
-o: 或,两边条件有一个知足便可
-not: 非,条件取反

说明:find命令的组合条件查找看起来简单,其实挺复杂的,这里面隐含了德摩根定律的运用。it

德摩根定律:io

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

find组合条件的用法范例:

(1)、假如我要查找系统上/tmp/test/目录下属主为root且文件名为.txt结尾的文件。

wKioL1MRtpXzvt8rAAD8jvwYPDU874.jpg

因而可知,find命令不写组合条件默认为 -a (与)


(2)、查找系统上/tmp/test/目录下属主不为root且文件名为不以.txt结尾的文件。

当前目录全部文件:

wKioL1MRt-_DNQ0DAAFgKO6ultY388.jpg

使用find查找的三种方式:

wKioL1MRuEvyKvQNAAGqJ_SGMQ4970.jpg

第一种方式:使用-not和-a把两条件组合起来查找。

第二种方式:由于find默认为使用-a组合多条件,因此把-a去掉查找到的结果也是同样的。

第三种方式:根据伟大的德摩根定律,把两个条件的非(-not)提出来,有点相似于学校学的因式分解,-not提出来后,加上括号把两条件组合,这里要注意的是,括号要加斜线转义,而且括号里的“与”要变成“或”,若是是“或”则要变成“与”。


三、根据文件类型查找

-type: 根据文件类型查找
#如下为经常使用类型
    f: 普通文件
    d: 目录
    b: 块设备
    c: 字符设备
    l: 符号连接文件
    p: 命名管道
    s: 套接字文件

例如:查找/dev/目录下以sd开头的块设备文件

find /dev/ -type b -name "sd[a-z][0-9]"

wKioL1MRumnwIJXdAACCCvFLQ4g461.jpg


四、根据文件大小查找

-size: 根据文件大小查找
#经常使用单位: k, M, G,size后面的数字可接+|-分别表明不一样意义
#例:-size +2M

说明:-size参数带加减号分别带表三种状况

-size 2M : 并非精确查找文件大小为 2M的文件,而是表示区间是 1M-2M 大小的文件,(#-1) < x < #

-size +2M : 表示查找大于2M的文件,x > #

-size -2M : 并非精确查找文件小于 2M的文件,而是表示区间是 0M-(2-1)M 大小的文件,0 < x < (#-1)


例如:分别新建六个以自身大小为名字后缀为.out的文件,0.out(0M)、1.5.out(1.5M)、2.out(2M)、2.5.out(2.5M)、3.out(3M)、3.5.out(3.5M)而后用这三种方式查找,结果以下:

wKioL1MRxVfQE0PCAAHzvl6VRAE350.jpg

(1)、find -size 2M: 查找的结果是两个文件,居然还有一个1.5M的文件,这是正常的,由于这次搜索的区间是:(2-1)M < x < 2M

(2)、find -size -2M: 查找的结果是一个0k的文件,居然没有把那个1.5M的文件搜索出来,由于这次搜索的区间是:0 < x < (2-1)M

(3)、find -size +2M: 查找出了全部大于2M的且不等于2M的文件,由于这次搜索的区间就是大于2M的文件:x > 2M


五、根据时间戳查找

#以天为单位
-atime: 查找某天范围内被访问过的文件
-mtime: 查找某天范围内被修改过的文件
-ctime: 查找某天范围内元数据被修改过的文件
#以分钟为单位
-amin: 查找某分钟范围内被访问过的文件
-mmin: 查找某分钟范围内被修改过的文件
-cmin: 查找某分钟范围内元数据被修改过的文件

说明:这六个参数也能够带加减号使用。

以-atime为例:

-atime 2: 并非精确到2天,而是表示区间在过去2天至3一内:#天< x < (#+1)天

-atime +2: 表示的是大于2+1天访问过:x > (#+1)天

-atime -2: 表示的是2天以内:0< x < #

以下图所示:

wKioL1MR2mLgc8nhAABlAKCraWw235.jpg



六、根据权限查找

-perm: 根据某类或某个权限查找

说明:-perm能够指定u、g、o三个权限位的权限来查找文件,也能够带上加减号使用。

-perm 644: 当不带符号时,表示的是精确匹配三个权限,只处为精确匹配 644 。

-perm +644: 当带有加号时,表示的是任何一类用户的任何一位权限匹配便可,经常使用于查找某类用户的某特定权限是否存在。此处能够匹配:u=r|w 或者 g=r 或者 o=r

-perm -644: 表示每类用户的任何一位权限匹配,每类用户的指定要检查的权限位都匹配。此处能够匹配:64四、744

以下图所示:

wKiom1MR3ueRaAqvAAGJGDC399Q137.jpg

四个文件权限分别是 a.txt(744)、b.txt(644)、c.txt(444)、d.txt(244)

(1)、find -perm 644:查找结果为精确查的644权限文件。

(2)、find -perm +644: 查找结果是全部。此处就算是200、400也能被匹配出。所以加号经常使用来查找某类用户的特定权限是否存在。

(3)、find -perm -644: 查找结果是 64四、744


3、find命令的处理动做

经常使用处理动做:

-print: 打印在标准输出上
-ls: 以长格式输出各文件信息,至关于ls -l
-exec COMMAND {} \; : 对查找到的文件执行指定的命令
-ok COMMANE {} \; : 和上面的区别是,至关于交互式的-exec,对文件的执行会先询问用户;
#find把查找到的全部文件一次性地传递给 -exec 所指定的命令,命令后面接花括号做占位符,且占位符两边必须有空格,空格后接反斜线加分号。格式:-exec ls {} \;
|xargs COMMAND:把查找结果逐条传给xargs 后面的命令执行

一、find命令的默认处理动做就是-print,打印数据。

二、-ls则至关于把查找到的数据经过ls命令显示详情。

wKiom1MR5tWxbdMmAAFbZH3bdZc345.jpg


三、-exec后面接的是命令名,能够把查找到的数据传给后面的命令执行。

wKiom1MR4knxrzJTAAKthZvZ6LY828.jpg

说明:上图对查找到的文件传给后面的cat命令执行,两个花括号做占符,表明的是前面的文件的文件名,花括号后面接反斜线分号。


四、-ok和-exec是同样的,不一样的是若是执行的操做是需要交互式询问用户时,-ok会在对文件执行前会先询问用户。

五、|xargs和-exec也是执行用户自定义的命令,不一样的是find是把查询到的结果无论多少一次性所有传给-exec执行,而对于xargs则是逐条传递。第二个不一样点是,-exec能够引用结果文件的文件名,而xargs则不能够,因此各有各的用处。

wKioL1MR5l2gtCL-AACzC0Ozrd8452.jpg

相关文章
相关标签/搜索