11文件查找find和locate

有些时候我们是想要在系统中查找某个具体的文件,却不知道路径在哪里,只是知道其中的某些特性,比如大小或者名字什么的。这时候就要用到查找工具啦。

在文件系统上查找符合条件的文件命令有两个,locate和find,其中locate是非实时查找即数据库查找。而find是实时查找

locate:

用法:locate [OPTION]… [PATTERN]…

【option】

-i  不区分大小写

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

-r 使用扩展正则表达式 查询 

locate foo 搜索名称或路径中带有foo的文件

locate -r '\.foo$' 使用扩展正则表达式来搜索以 ".foo" 结尾的文件

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

/var/lib/mlocate/mlocate.db 

依赖于实现构建的索引,

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

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

工作特点:

查找速度快(只查找数据库中有的数据)

模糊查找

非实时查找(在索引构建之后创建的文件时不能找到的)

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

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

find:

find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path…] [expression]

即:find [option] [查找路径] [查找条件] [处理动作] 

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

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

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

【查找条件】

根据文件名和inode查找:

-name “文件名称”: 支持使用glob (文件名通配符) *,?,[],[^]

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

inum n  按inode号查找

-samefile name 相同inode号的文件

-links n 链接数为n的文件

-regex “PATTERN”:以pattern匹配整个文件路径字符串,而不仅仅是文件名称

根据属主属组查找:

-user username:

-group groupname:

-uid userid:

-gid groupid:

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

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

根据文件类型查找:

-type type:  f,d,l,s,b,c,p 

根据组合条件查找:

-a  -o  -not=!

根据文件大小来查找:

-size [+|-]#UNIT   (k,M,G)

#UNIT (#-1,#] –> 如6k 即(5k,6k] 5k到6k 但不包括5k

-#UNIT:[0,#-1] –>如6k 即[0,5k]

+#UNIT:(#,∞)  大于# 但不包括#

根据时间戳查找:

以 【天】为单位

-atime[+|-]#  :  [0,#) [#,#+1) [#+1,∞]

-mtime[+|-]#  :

-ctime[+|-]#  :

以【分钟】为单位

-amin[+|-]#  :

-mmin[+|-]#  :

-cmin[+|-]#  :

根据权限查找:

-perm [/|-] mode

mode : 精确匹配,不能多不能少

/mode 或+mode : 或关系 ugo中 只要有一个匹配即可

-mode : ugo必须至少拥有或比mode更多权限

【处理动作】

-print:默认处理动作

-ls:类似于对查找到的文件执行 ls -l

-delete:删除查找到的文件

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

-ok commond {} \; 对查找到的每个文件执行有commond指定的命令,每个文件执行前都要交互式确认

-exec commond {} \; 对查找到的每个文件执行有commond指定的命令

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

例:

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 {} \;

•在 /data 目录中 找出所有 以.sh 结尾没有执行全选的文件 增加执行权限

find /home -type d -ls 

找出所有/home 目录下的 目录 列出详细信息

find /var -u root -g mail 

find /var not \(-user root -o -user lp -o -user gdm \)

find /var -ctime -7 -not \( -user root -o -user postfix \)

find / -nouser -nogroup -atime -7 

find /etc -size +1M -type f 

find /etc -not \( -perm +222 \)

find /etc -not \( -perm -222 \)

find /etc/init.d -perm /113 

find /etc -path '/etc/sane.d' -a -prune -o -name "*.conf" -print

find /etc -path '/etc/front*' -prune -o -path '/etc/hu*' -prune -o -path '/etc/lib*' -prune -o -path '/etc/se*' -prune -o -path '/etc/init' -prune -o -name "*.conf" -print

–joker的部落阁

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

(0)
jokerjoker
上一篇 2016-11-27
下一篇 2016-11-27

相关推荐

  • 文本处理-vim编辑器

    命令格式、(1)模式、(2)关闭文件、(3)可视化模式、(4)使用多个“窗口”、(5)定制vim的工作特性、(6)示例

    2018-03-13
  • 利用 yum 查找某个命令属于哪个包

    当我们在安装一个不熟悉的命令是,会遇到个问题:Error: Nothing to do 而你又不知道该命令的是属于哪个rom包,莫慌~我们可以借助一个叫yum的基于rpm的软件包管理器。 以 dig 这个命令为例,当我安装它时会出现如下情况  [root@localhost ~]# yum install dig  Loaded plug…

    Linux干货 2016-03-27
  • 管道及重定向

    管道及重定向 1、重定向 在Linux中有时我们在命令的执行过程中,不想将执行结果显示到屏幕上,或者将其结果输出到其他位置 这时就需要重定向来解决这个问题了 首先了解一下Linux中的3种I/O设备: 0:标准输入 1:标准输出 2:标准错误输出 输出重定向:> >> 输入重定向: < << >:将标准输出重定向到文…

    Linux干货 2017-07-28
  • 第十二周作业

    1、请描述一次完整的http请求处理过程;     1)建立或处理连接:接收请求或拒绝请求;     2)接收请求:接收来自于网络的请求报文中对某资源的一次请求的过程;接收请求的方式通常是并发访问响应模型;     3)处理请求:对请求报文进行解析,并获取请求的资源及请求方法等相关信息,解析后的报文…

    2017-03-27
  • LVM逻辑卷管理练习

         小编今天要讲的内容是如何创建逻辑卷,然后扩展它、缩减它。LVM 的重点就在于可以弹性的调整文件系统的容量!所以,下面练习开始。 1、创建一个至少有两个PV组成的大小为20G的名为testvg的 VG;要求PE大小为16MB, 而后在卷组中创建大小为5G的逻 辑卷testlv;挂载至/users目录。 ①准备两个10G的…

    2017-08-26
  • linux小小小入门。

      ❀用户登录:     ❤root用户 这是一个特殊的管理账户,也被称为超级账户,root已经接近完整的系统控制。但是对系统的损害有非常广泛的能力。(一般情况下不会登录root)     ❤普通用户 权限有限,损害能力较小。 ❀终端terminal:     ❤设备终端 键盘,鼠标,显示器     &#x…

    Linux干货 2018-03-26