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结尾的文件。
因而可知,find命令不写组合条件默认为 -a (与)
(2)、查找系统上/tmp/test/目录下属主不为root且文件名为不以.txt结尾的文件。
当前目录全部文件:
使用find查找的三种方式:
第一种方式:使用-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]"
四、根据文件大小查找
-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)而后用这三种方式查找,结果以下:
(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 < #
以下图所示:
六、根据权限查找
-perm: 根据某类或某个权限查找
说明:-perm能够指定u、g、o三个权限位的权限来查找文件,也能够带上加减号使用。
-perm 644: 当不带符号时,表示的是精确匹配三个权限,只处为精确匹配 644 。
-perm +644: 当带有加号时,表示的是任何一类用户的任何一位权限匹配便可,经常使用于查找某类用户的某特定权限是否存在。此处能够匹配:u=r|w 或者 g=r 或者 o=r
-perm -644: 表示每类用户的任何一位权限匹配,每类用户的指定要检查的权限位都匹配。此处能够匹配:64四、744
以下图所示:
四个文件权限分别是 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命令显示详情。
三、-exec后面接的是命令名,能够把查找到的数据传给后面的命令执行。
说明:上图对查找到的文件传给后面的cat命令执行,两个花括号做占符,表明的是前面的文件的文件名,花括号后面接反斜线分号。
四、-ok和-exec是同样的,不一样的是若是执行的操做是需要交互式询问用户时,-ok会在对文件执行前会先询问用户。
五、|xargs和-exec也是执行用户自定义的命令,不一样的是find是把查询到的结果无论多少一次性所有传给-exec执行,而对于xargs则是逐条传递。第二个不一样点是,-exec能够引用结果文件的文件名,而xargs则不能够,因此各有各的用处。