说明:本文所有案例均在centos6.8验证成功
本文索引如下
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 表示从第一页开始分频浏览;
- * | *表示管道
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
-perm 权限
-user USER 文件的拥有者
-gid|group 文件所属组
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目录下
-inum inode 编号(ls -i查看)
-delete 删除
locate命令用于根据locate索引数据库查找文件,它的实质是find FILE -name,两者唯一区别是locate的搜索速度更快
如需下载locate,应该用yum install mlocate
locate (选项) (参数)
updatedb #若没有及时更新数据库,会出现某些问题,其搜索结果也可能是滞后的;
1、/usr/bin/updatedb
系统定期自动运行crontab程序,更新数据库;
2、/usr/bin/locate or mlocate
完成查询功能的程序;
3、/etc/uodatedb.conf
所需要查询的目录和文件的配置;
4、/var/lib/mlocate/mlocate.db
存放文件信息的文件;
1、locate和find均可用于查找文件;
2、locate搜索速度更快;
3、locate的查找依赖于数据库;
本人只是linux学习大军中小小的一员,技术水平有限,文中难免出现不妥或者错讹,欢迎大家在评论区多多指正,共同进步,不尽感激!
原创不易,转载请务必保留出处