首页
学习
活动
专区
工具
TVP
发布

文件查找命令之locate,find

文件查找:

在文件系统上查找符合条件的文件

文件查找命令:

locate:非实时查找( 数据库查找)

find:实时查找

locate:

查询系统上预建的文件索引数据库

/var/lib/mlocate/mlocate.db

依赖于事先构建的索引

索引的构建是在系统较为空闲时自动进行( 周期性 任务),管理员 手动更新数据库(updatedb)

索引构建过程需要遍历整个根文件系统,极消耗资源

工作特点:

• 查找速度快

• 模糊查找

• 非实时查找

• 搜索的是文件的全路径,不仅仅是文件名

• 可能只搜索用户具备读取和执行权限的目录

locate 命令

locate KEYWORD

-i:执行不区分大小写的搜索

-n N:只列举前N 个匹配项目

-b:只匹配路径中的基名

-c:只显示统计多少个符合条件的路径

-r:能基于基本正则表达式来编写命令

locate foo

• 搜索名称或路径中带有“foo ”的文件

locate -r ‘.foo$’

• 使用Regex 来搜索以“.foo ”结尾的文件

find

实时查找工具,通过遍历指定路径完成文件查找;

工作特点:

• 查找速度略慢

• 精确查找

• 实时查找

• 可能只搜索用户具备读取和执行权限的目录

用法:

find [OPTION]... [ 查找路径] [ 查找条件] [ 处理动作]

查找路径:

指定具体目标路径,默认为当前目录

查找条件:

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

处理动作:

对符合条件的文件做操作,默认输出至屏幕

查找条件

表达式:选项和测试

根据文件名和inode 查找:

-name " 文件名称":支持使用glob *, ?, [], [^]

-iname " 文件名称":不区分字母大小写

-inum n:按inode 号查找

-samefile name:相同inode 号的文件

-links n:链接数为n 的文件

-regex "PATTERN":以PATTERN(正则表达式)匹配整个文件路径字符串,而不仅仅是文件名称ID

根据属主、属组查找:

-user USERNAME:查找属主为指定用户(UID) 的文件

-group GRPNAME:查找属组为指定组(GID) 的文件

-uid UserID:查找属主为指定的UID 号的文件

-gid GroupID:查找属组为指定的GID 号的文件

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

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

根据文件类型查找:

-type TYPE

f:普通文件

d:目录文件

l:符号链接文件

s:套接字文件

b:块设备文件

c:字符设备文件

p:管道文件

组合条件:

与:-a

或:-o

非:-not !

德· 摩根 定律:

(非 A) 或 (非 B) = 非(A 且 B)

(非 A) 且 (非 B) = 非(A 或 B)

示例:

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

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

find 示例

find -name snow.png

搜索名为snow.png 的文件

find -iname A.png

不分大小写查找名为A.png 、a.png、 A.PNG 等等的文件

find / -name “.txt”

查找根目录下后缀名为txt的文件

find /var –name "log*"

查找var目录下包含log的文件

find -user test -group test

搜索被用户test 以及组群test所拥有的文件

其它示例:

find -user test -not -group test

find -user test -o -user test

find -not ( -user test -o -user test )

find / -user test -o -uid 500

找出/tmp 目录下,属主不是root ,且 文件名 不以f 开头的 文件

find /tmp ( -not -user root -a -not -name 'f' ) -ls

find /tmp -not ( -user root -o -name 'f' ) –ls

排除目录

示例:查找/etc/ 下,除/etc/sane.d 目录的其它所有.conf 后缀的文件

find /etc -path ‘/etc/sane.d’ -a -prune -o -name “*.conf” -print

根据文件大小来查找:

-size [+,-]#unit

常用单位:k, M, G

如:6k 表示(5k,6k]

-#unit :[0到#-1]

如:-6k 表示[0到5k]

+#unit :(#和大于#)

如:+6k 表示(6k或大于6k )

根据时间戳

以天为单位(time):

-atime [+|-]# 访问时间

+#:表示(#+1)天之外被访问

-#:表示#天内被访问过的

#:表示小于(#+1)大于或者#天的时间段被访问过

-ctime:改变时间

-mtime:修改时间

以分钟为单位(min)

-amin

-mmin

-cmin

根据权限查找:

-perm [+|-]MODE

MODE:精确匹配

+MODE:任何一类用户的任何一位权限匹配即可,常用于查找某类用用户的某特定权限是否存在

-MODE:每类用户的指定要检查的权限位都匹配

示例:

find -perm 755,会匹配权限模式恰好是755 的文件

只要当任意人有写权限时,find -perm +222 就会匹配

只有当每个人都有写权限时,find -perm -222 才会匹配

只有当其它人(other )有写权限时,find -perm -002才会匹配

处理动作:

-print:默认,打印在标准输出上

-ls:以长格式输出各文件信息,类似于ls -l

-delete:删除查找到的文件

-fls file:查找到的所有文件的长格式信息保存至指定文件中

-exec COMMAND {} ;:对查找到的文件指定的命令

-ok COMMAND {} ;:交互式,对查找到的每个文件执行由COMMAND 指定的命令

find |xargs COMMAND: find把查找到的所有文件一次性地传递给-exec执行

{}:用于引用查找到的文件名称自身

参数代换:xargs

用于产生某个命令的参数 xargs 入可以读入stdin的数据,并且以空格符或回车符将stdin的数据分隔成为arguments

注意:文件名或者是其他意义的名词内含有空格符的情况

有些命令不能接受过多参数 ,命令执行可能会失败,xargs可以解决

示例:

find | xargs COMMAND

find /sbin -perm +7000 | xargs ls -l

示例:

find -name “*.conf” -exec cp {} {}.orig ;

备份配置文件,添加.orig 这个扩展名

find /tmp -ctime +3 -user joe -ok rm {} ;

提示删除存在时间超过3天以上的joe 的临时文件

find ~ -perm -002 -exec chmod o-w {} ;

在你的主目录中寻找可被其它用户写入的文件

find /data –type f -perm 644 -name “*.sh” –exec chmod 755 {} ;

find /home –type d -ls

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180201A0H0DX00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券