专门的文件查找工具—-find
find命令用来在某个目录及其子目录中查找特定的文件。find命令很强大,它实时的搜索目录树。
常见用法示例:
find path -option [-print] [-exec -ok command] {} \;
#print将查找到的文件输出到标准输出
#exec command {}\;将查找到的文件执行command操作。{}和 \之间有空格
#ok 和 exec相同,区别在于操作前要询问用户,是交互式的
查找条件如下图:
多个处理动作之间用逻辑关系来连接:-a(与) -o(或) !(非)
-name filename 区分大小写
-iname filename 不区分大小写
(为了演示需要,在当前目录下创建两个文件 passwd 和PASSWD)
可以清楚的看到-name 区分大小写;-iname不区分大小写
2 根据文件属主、属组
-user username 根据属主
-group groupname 根据属组
-uid 根据指定UID
-gid 根据指定GID
-nouser 指定没有属主的文件
-nogroup 指定没有属组的文件
(为了演示需要,把passwd的属组改为RedHat ;把PASSWD的属主改为redhat;id -u redhat 为501)
3 根据文件类型
-type b/c/d/f/l/p 查是块设备、字符设备、目录、普通文件、符号链接、管道
(为passwd 创建一个链接为pas)
-type的其他选项,用法相同
4 根据文件大小
-size nk 大小为1-nk的文件
-size +nk 大于nk的文件
5 根据文件的时间状态
解释什么是atime ctime mtime
atime (access time):最后一次访问文件的时间
mtime(medify time):最后一次修改文件的时间
ctime(change time):最后一次改变文件(改变的是原数据即属性)的时间
如:记录该文件的inode节点被修改的时间。touch 命令除了-d -t选项外都会改变改时间,而且chmod,chown等命令也能改变该值
三者之间的关系
当修改mtime时,ctime必须随着改变,因为文件大小等属性;有人说atime 也一定会改变,要想修改文件必须先访问;其实是不对的,不必访问文件就能修改内容:如#echo “change it” >> /etc/inittab ,inittab文件内容会改变,但并没有访问文件,所以atime没有改变
查看三者的命令
stat filename 可以查看三者的时间值
ls -l filename 查看文件修改时间
ls -lc filename 查看文件状态改动时间
ls -lu filename 查看文件访问时间
修改三者的命令
touch [option] [[CC]YY]MMDDhhmm[.ss]
options:
-t 后面可接时间,其格式如上所述
-a 仅修改access time
-c 仅修改时间而不建立文件
-m 仅修改mtime
201206241045.30 表示时间为:2012年6月24日10点45分30秒
(拷贝/etc/inittab 到当前目录下,作为例子)
对于-type的用法如下
-atime/-ctime/-mtime 单位是天
-amin/-cmin/-mmin 单位是分
-amin/-cmin/-mmin n/+n/-n 刚好n天/超过n天/n天之内
查找当前目录下5分钟之内ctime 改变的文件
6 根据文件访问权限
find -perm mode
find -perm -mode
find -perm /mode
那么这三者之间有什么区别呢?解释之前先简单说一下linux中文件权限位的概念。在linux中文件或目录有3个权限r,w,x分别代表读、写、执行。而一个文件或目录的属性中又包括属主u、属组g、其他o三个部分。
属主 属组 其他
rwx rwx rwx
用户在其拥有权限上的位上设置为1,没有的权限的位设置为0.如果将每个部分的这些权限位看成是二进制数,每个部分可以用3位二进制数表示,最大值为7,表示可读、可写、可执行。
现在来看一下find -perm
find -perm mode 表示严格匹配,也是就你的文件权限位转换成对应的十进制数与mode一摸一样,才算匹配成功,如果mode给的数字不足3位,那么前面自动添加0
find -perm -mode 表示mode中转换成二进制的1在文件权限位里面必须匹配,比如:mode=644 那么转换成二进制为110 100 100 ,而被查找的文件的的权限位在1的部分必须完全匹配,而0则不管。例如被查找的文件为111 111 111 那么是匹配成功,而100 100 100 则匹配失败。所以-mode就是匹配比mode 权限更充足和完善的文件
find -perm /mode 与-mode的区别是它只需要其中任意一个1的部分被匹配即可
可以看到 a ab abc 的权限分别为600 640 666
find -perm 640 是做精确匹配,只会匹配到640即 ab
find -perm -640 做比640更充足的匹配,当然666是满足的,即 ab abc
find -perm /640 是要任意的一组权限中1的位置上有一个符合即可,因此a ab abc 都会匹配出来
OK find的命令就总结到这儿了,你们是不是看明白了。共同学习 共同进步