2大文件查找命令实例

说明:本文所有案例均在centos6.8验证成功

本文索引如下

  • find
    • 语法
    • 实例
      • 一根据文件名或者正则表达式进行匹配
      • 二根据文件类型进行搜索
      • 三根据文件时间戳进行搜索
      • 四根据文件大小进行匹配
      • 五根据文件权限进行匹配
      • 六对找到的文件执行命令
      • 七其他常用expression
  • locate
    • 语法
    • 更新locate索引数据库
    • 工作原理
    • find和locate的异同点
  • 写在最后的话

find

find命令会在指定目录及其子目录下查找符合条件的特定文件

语法

find (PATH···) [experssion]#
#PATH(可接多个路径)
#experssion(参数)

实例

这里写图片描述注意:前方高能!一大波案例来袭~~~~

一、根据文件名或者正则表达式进行匹配

【expression】
-name FILENAME #文件名,可使用通配符
-iname FILENAME #ignore,忽略大小写
-regex PATTER #正则匹配文件名
-iregex PATTER #正则匹配文件名,忽略大小写

1、 列出/etc下所有以.conf结尾的文件
这里写图片描述
#所有用通配符 * 匹配

2、 列出/etc下所有不是以.conf结尾的文件
2大文件查找命令实例_第1张图片
#!:表否定

3、列出/etc下所有以.conf结尾的文件,并把输出结果重定向到/var/tmp/conf.find中
这里写图片描述

4、找出/etc目录下面以任意个数字结尾的文件
2大文件查找命令实例_第2张图片
上例中,
- “”. “”表示单个字符;
- “”* “”表示前个字符出现次数>=0;
- “”.* “”表示任意个任意字符;
- more 表示从第一页开始分频浏览;
- * | *表示管道

二、根据文件类型进行搜索

2大文件查找命令实例_第3张图片

1、列出/etc/目录下面以.conf结尾的软链接
这里写图片描述

2、搜索出深度距离当前目录至少2个字目录的所有文件
2大文件查找命令实例_第4张图片

三、根据文件时间戳进行搜索

UNIX/Linux文件系统下每个文件都有3种时间戳:
访问时间atime :access,最近一次访问时间;
修改时间mtime:modify,文件最后一次修改时间;
变化时间ctime:change,文件数据元(例如权限等)最后一次修改时间;

时间戳时间戳timestamp:可唯一标识某一时间点的字符序列,包含在inode中;
理解:学习过程中,我对这3个time曾傻傻的分不清楚,后来才明白,有的时候你只是修改了文件属性,并没有访问,这时使用ctime;有的时候呢,你只是访问文件查看了内容,这个时候使用atime;而又有的时候你修改了文件的内容,这个时候呢,使用mtime;其实很多情况下,这些time是可能重叠的,比如:要查找3天前创立的文件,我们既可以用atime也可以用ctime。

搜索在/目录下最近100天访问过的所有目录
2大文件查找命令实例_第5张图片
#最近n天:-n
#恰好n天前:n
#超过n天内:+n
#超过n分钟:-amin +n

四、根据文件大小进行匹配

2大文件查找命令实例_第6张图片

搜索/etc目录下面大于1G的目录
2大文件查找命令实例_第7张图片

五、根据文件权限进行匹配

-perm 权限
-user USER 文件的拥有者
-gid|group 文件所属组

这里写图片描述区分文件的权限和目录的权限?

这里写图片描述

1、当前目录下权限不是644的
2大文件查找命令实例_第8张图片

2、找出/etc目录下用户katy拥有的所有文件

useradd katy  #创建用户katy 
su katy  #进入katy
vim /etc/yidai #在/etc目录下创建文件yidai:
find /etc -type f -user katy #搜索/etc目录下katy拥有的文件

注意:
#创建文件的前提是有读、写的权限;
#执行文件的前提是有读、写、执行的权限;

这里写图片描述

六、对找到的文件执行命令

find PATH [exp···] -exec COMMAND \;

1、找出/tmp目录下所有root的文件,并把所有权更改为用户katy
2大文件查找命令实例_第9张图片
由上图可以看出,文件所属组已经改变!!!

上例中,
- {}用于与-exec选项结合使用,代表当前查到的符合条件的文件名;
- exec可以由ok代替,两者区别在于ok会给出类似< chown … /tmp/etc-23:08:01 > ? 这种是否执行相应操作的提示;
- “”;“”可以实现在-exec 之后接受多条命令,用* \ * 表示转义;(此现象在shell脚本中普遍存在)

2、找出/etc目录下面以任意个数字结尾的文件并将其遇到到/tmp目录下
2大文件查找命令实例_第10张图片

七、其他常用expression

-inum inode 编号(ls -i查看)
-delete 删除

locate

locate命令用于根据locate索引数据库查找文件,它的实质是find FILE -name,两者唯一区别是locate的搜索速度更快
如需下载locate,应该用yum install mlocate

语法

locate (选项) (参数)

这里写图片描述

更新locate索引数据库

updatedb #若没有及时更新数据库,会出现某些问题,其搜索结果也可能是滞后的;

工作原理

1、/usr/bin/updatedb
系统定期自动运行crontab程序,更新数据库;
2、/usr/bin/locate or mlocate
完成查询功能的程序;
3、/etc/uodatedb.conf
所需要查询的目录和文件的配置;
4、/var/lib/mlocate/mlocate.db
存放文件信息的文件;

find和locate的异同点

1、locate和find均可用于查找文件;
2、locate搜索速度更快;
3、locate的查找依赖于数据库;

写在最后的话

本人只是linux学习大军中小小的一员,技术水平有限,文中难免出现不妥或者错讹,欢迎大家在评论区多多指正,共同进步,不尽感激!

原创不易,转载请务必保留出处

你可能感兴趣的:(linux系统)