find、locate、Gnome文件查找工具

查找命令:

        locate:非实时查找
        find:实时查找
        Gnome:图形化搜索工具

locate:

描述:
查询系统上预建的文件索引数据库/var/lib/mlocate/mlocate.db,一天更新一次
更新数据库:
updatedb
特点:
依赖于事先构建的索引。索引的构建是在系统较为空闲时自动进行(周期性任务),管理员手动也可更新数据库。索引构建过程需要遍历整个根文件系统,极消耗资源
查找速度快
模糊查找
非实时查找
搜索的是文件的全路径,不仅仅是文件名
可能只搜索用户具备读取和执行权限的目录
格式:
locate KEYWORD
选项:
-i:忽略大小写
-n #:只列举前#个匹配项目
-r:使用正则表达式
实例:
例:搜索名称或路径中带有”conf”的文件
# locate conf
例:使用Regex来搜索以”.conf”结尾的文件
# locate -r ‘\.conf$’

find:

解释:
实时查找工具,通过遍历指定路径完成文件查找
工作特点:
查找速度略慢
精确查找
实时查找
可能只搜索用户具备读取和执行权限的目录

格式:
find [OPTION]… [查找路径] [查找条件] [处理动作]

查找路径:
指定具体目标路径;默认为当前目录,并且递归搜索
查找条件:
描述:
指定的查找标准,可以文件名、大小、类型、权限等标准进行;默认为找出指定路径下的所有文件

指定搜索层级:
-maxdepth level:最大搜索目录深度,指定目录为第一级
-mindepth level:最小搜索目录深度

例:最大第三层,最小两层(2-3层)
# find /etc -maxdepth 3 -mindepth 2 -name “network”
例:只在第二层寻找:
# find /etc -maxdepth 2 -mindepth 2 -name “network”

根据文件名和inode查找:
-name “文件名称”:支持使用glob
通配符:*,?,[],[^]
例:# find -name “*.txt”
-iname “文件名称”:不区分字母大小写
-inum n:按inode号查找
例:# find / -inum 2 -ls
-samefile name:相同inode号的文件
-links n:链接数为n的文件s
-regex “PATTERN”:以PATTERN匹配整个文件路径字符串,而不仅仅是文件名称
例:# find /root -regex “.*\.txt”
# find /root -regex “.*\.\(txt\|sh\)$”

根据属主、属组查找:
-user USERNAME:查找属主为指定用户的文件
例:寻找home下不是wang的并且不是.sh结尾的文件
# find /home ! \( -user wang -o -name “*.sh” \)
-group GRPNAME:查找属组为指定组的文件
-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)

根据文件大小查找:
-size [+|-]#UNIT
常用单位:k,M,G,c(byte)
#UNIT:(#-1,#]
如:6k表示(5k,6k]
-#UNIT:[0,#-1]
如:-6k表示[0,5k]
+#UNIT:(#,∞)
如:+6k表示(6k,∞)

根据时间戳:
以”天”为单位:
-atime [+|-]#,
#:[#,#+1)
+#:[#+1,∞]
-#:[0,#)
-mtime
-ctime
以”分钟”为单位:
-amin
-mmin
-cmin

根据权限查找:
-perm [/|-]MODE
MODE:精确权限匹配
/MODE:
任何一类(u,g,o)对象的权限中只要能一位匹配即可,或关系,+从centos7开始淘汰
-MODE:每一类对象都必须同时拥有指定权限,与关系0表示不关注
tip:
find -perm 755会匹配权限模式恰好是755的文件
任合一人有写权限时,find -perm +222就会匹配
只有当每个人都有写权限时,find -perm -222才会匹配
其他人other有写权限时,find -perm -002才会匹配

根据文件大小来查找:
-size [+|-]#UNIT
常用单位:k,M,G,c(byte)
#UNIT:(#-1,#]
如:6k 表示(5k,6k]
-#UNIT:[0,#-1]
如:-6k表示[0,5k]
+#UNIT:(#,∞)
如:+6k表示(6k,∞)

根据时间戳:
以”天”为单位:
-atime [+|-]#
#:[#,#+1)
+#:[#+1,∞]
-#:[0,#)
-mtime
-ctime
以”分钟”为单位:
-amin
-mmim
-cmin

根据权限查找:
-perm [/|-]MODE
MODE:精确权限匹配
/MODE:任何一类(u,g,o)对象的权限中只要能以为匹配即可,或关系,+从centos 7开始淘汰
-MODE:每一类对象都必须同时拥有指定权限,与关系0表示不关注
find -perm 755
会匹配权限模式恰哈是755的文件
只要当任意人都有写权限时,find -perm +222就会匹配
只有当每个人都有写权限时,find -perm -222才会匹配
只有当其他人other都有写权限时,find -perm -002才会匹配

处理动作:
描述:
对符合条件的文件做操作,默认输出至屏幕
选项:
-print:默认的处理动作,显示至屏幕
-ls:类似”ls -l”
-delete:删除查找到的文件
-fls file:查找到的所有文件的长格式信息保存至指定文件中
-ok COMMAND {} \;:对查找到的每个文件执行由COMMAND指定的命令,对于每个文件执行命令之前,都会交互式要求用户确认
-exec COMMAND {} \;:对查找到的每个文件执行由COMMAND指定的命令
{}:用于引用查找到的文件名称自身
find传递查找到的文件至后面指定的命令时,查找到所有符合条件的文件一次性传递给后面的命令

参数替换xargs:
描述:
由于很多命令不支持管道”|”传递参数,而日常工作中有这个必要,所以就有了xargs命令
xargs用于产生某个命令的参数,xargs可以读入stdin的数据,并且以空格符或回车符将stdin的数据分割成为arguments
格式:
find | xargs COMMAND
tip:注意,文件名或其它意义的名词内含有空格符的情况
有些命令不能接受过多的参数,命令执行可能会失败,xargs可以解决

示例:
ls f* | xargs rm
find /sbin -perm +700 | ls -l //这个命令是错误的
find /sbin -perm +7000 | xargs ls -l
例:备份配置文件,添加.orig这个扩展名
# find -name “*.conf” -exec cp {} {}.orig \;
例:提示删除存在时间超过3天以上的joe的临时文件
# find /tmp -ctime +3 -user joe -ok rm {} \;
例:在主目录中寻找可被其它用户写入的文件
# find ~ -perm -002 -exec chmod o-2 {} \;
例:# find /data -type f -perm 644 -name “*.sh” -exec chmod 755 {} \;
例:# find /home -type d -ls

实例:
例:# find -name snow.png
例:# find -iname snow.png
例:# find / -name “*.txt”
例:# find /var -name “*log”
例:# find -user joe -group joe
例:# find -user joe -not -group joe
例:# find -user joe -o -user jane
例:# find -not \( -user joe -o -user jane \)
例:# find / -user joe -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”
解释:
-prune:排除
例:查找根下除了/app下所有的.sh结尾的文件
# find / -path ‘/app’ -a -prune -o -name “*.sh”

例:查找/etc下,除/etc/sane.d和/etc/fonts两个目录的其它所有.conf后缀的文件
# find /etc \( -path ‘/etc/sane.d’ -o -path ‘/etc/fonts’ \) -a -prune -o -name “*.conf”

例:查找根下除了/app和/usr以外的所有.sh后缀的文件
# find / \( -path ‘/app’ -o -path ‘/usr’ \) -a -prune -o -name “*.sh”

tip:注意查找排除的时候目录后面不要加”/”,否则查找失败

Gnome:
描述:
图形化搜索工具,可搜索命令、内容、用户/组、大小、修改时间

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/88974

(2)
Pkin°Pkin°
上一篇 2017-11-26 21:26
下一篇 2017-11-26

相关推荐

  • N25第三周作业

    .列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登陆多次,则只显示一次即可。 此题主要考察命令who,cut,sort以及管道的基本用法:who:列出当前已登陆的用户名,登陆设备名,时间以及ip地址。 cut:    顾名思义就是截取之意, -d 指定要截取信息的分隔符,此处是以空格为分隔符,-f指定要截取的字段,此…

    Linux干货 2016-12-20
  • Gitlab代码管理仓库安装部署

    GitLab是利用 Ruby on Rails一个开源的版本管理系统,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。它拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查…

    2016-07-26
  • iptables练习

    iptables实战 1.开启防火墙 systemctl start firewalld 2.清空所有的默认规则,定义自己的规则 iptables -F 查看此时的iptables iptables -nL Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD…

    2017-06-24
  • tcp通讯的服务器和客户端解析

    服务器端编程步骤, 1.创建Socket对象,下文中的socket都表示一个socket对象 2.绑定IP地址和端口,服务器的IP和端口 3.开始监听,将在指定的端口上监听,listen() 如果对方申请连接这个IP和端口,将被听到,这个过程 4.获取用于传输数据的Socket对象 socket.accept() ->(socket object,ad…

    Linux干货 2018-01-01
  • 用户和组的简介

     在第二周的学习中,关于用户和组是一个难点,也是重点,本篇博客则是对用户和组的简单阐述,如有错误或不足还请各位大牛指出,在此谢过! 1、用户 # 1.1用户的定义      通过前面对Linux 多用户的理解,我们明白Linux 是真正意义上的多用户操作系统,所以我们能在Linux系统中建若干用户(…

    Linux干货 2017-07-22
  • 显示历史命令时间

        历史命令中默认是不显示时间的,如果我们想要在使用history命令时显示时间可以通过设置环境变量来实现。     HISTTIMEFORMAT变量的具体参数与date命令中的类似,可以参数date命令的对日期时间格式时行修改。    &nbs…

    Linux干货 2015-05-02