您的位置:首页 > 运维架构 > Linux

2大文件查找命令实例

2017-11-05 12:23 106 查看
说明:本文所有案例均在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结尾的文件



#!:表否定

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



4、找出/etc目录下面以任意个数字结尾的文件



上例中,

- “”. “”表示单个字符;

- “”* “”表示前个字符出现次数>=0;

- “”.* “”表示任意个任意字符;

- more 表示从第一页开始分频浏览;

- * | *表示管道

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



1、列出/etc/目录下面以.conf结尾的软链接



2、搜索出深度距离当前目录至少2个字目录的所有文件



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

UNIX/Linux文件系统下每个文件都有3种时间戳:

访问时间atime :access,最近一次访问时间;

修改时间mtime:modify,文件最后一次修改时间;

变化时间ctime:change,文件数据元(例如权限等)最后一次修改时间;


时间戳timestamp:可唯一标识某一时间点的字符序列,包含在inode中;

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

搜索在/目录下最近100天访问过的所有目录



#最近n天:-n

#恰好n天前:n

#超过n天内:+n

#超过n分钟:-amin +n

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



搜索/etc目录下面大于1G的目录



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

-perm 权限

-user USER 文件的拥有者

-gid|group 文件所属组


区分文件的权限和目录的权限?



1、当前目录下权限不是644的



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



由上图可以看出,文件所属组已经改变!!!

上例中,

- {}用于与-exec选项结合使用,代表当前查到的符合条件的文件名;

- exec可以由ok代替,两者区别在于ok会给出类似< chown … /tmp/etc-23:08:01 > ? 这种是否执行相应操作的提示;

- “”;“”可以实现在-exec 之后接受多条命令,用* \ * 表示转义;(此现象在shell脚本中普遍存在)

2、找出/etc目录下面以任意个数字结尾的文件并将其遇到到/tmp目录下



七、其他常用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学习大军中小小的一员,技术水平有限,文中难免出现不妥或者错讹,欢迎大家在评论区多多指正,共同进步,不尽感激!

原创不易,转载请务必保留出处
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  centos linux