感谢支持
我们一直在努力

find命令用法总结

专门的文件查找工具—-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的命令就总结到这儿了,你们是不是看明白了。共同学习 共同进步

赞(0) 打赏
转载请注明出处:服务器评测 » find命令用法总结
分享到: 更多 (0)

听说打赏我的人,都进福布斯排行榜啦!

支付宝扫一扫打赏

微信扫一扫打赏