您的位置:首页 > 其它

find命令的用法

2013-03-09 14:18 190 查看
linux中find命令的用法

一、我们知道grep,egrep,fgrep是查找文本的,下面我们就来了解一下用于查找文件的命令。文件查找:locate ,find,find命令非常强大,在这里我只是把find的部分命令和功能说了一下,如find的功能:在目录结构中搜索文件,并执行指定的操作。此命令提供了相当多的查找条件,功能很强大。又如find语法:find起始目录寻找条件操作  说明:find命令从指定的起始目录开始,递归地搜索其各个子目录,查找满足寻找条件的文件并对之采取相关的操作,以下就是find命令的用法及其功能

1、locate:

非实时,模糊匹配,查找是根据全系统文件数据库进行的;手动生成文件数据库:updatedb,速度快

2、find:

实时、精确、支持众多查找标准、遍历指定目录中的所有文件完成查找,查找非常准确但速度慢

格式:find 查找路径 查找标准 查找到以后的处理运作

查找路径:默认为当前路径

查找标准:默认为指定路径下的所有文件

查找到后的处理运作:默认为显示

3、find匹配标准:

-name‘FILENAME’:对文件名做精确匹配

如:find /etc -name 'passwd'

文件名通配:

*;任意长度的任意字符

?:匹配其前面的字符一次或0次

[]:匹配指定范围内的任意单个字符

-iname:文件名匹配时不区分大小写

-regex PATTERN:基于正则表达式进行文件名匹配

-user USERNAME:根据属主查找

如查找/tmp下属主是hadoop的文件:find /tmp -user hadoop

-group GROUPNAME:根据属组查找

-uid UID:根据UID查找

如 find /tmp -uid 2003

-gid GID:根据GID查找

-nouser:查找没有属主的文件

如查找/tmp下没有属主的文件:find /tmp -nouser

-nogroup;查找没有属组的文件

-type: 类型查找 f(普通文件),d目录),c(字符设备),b(块设备),

l(链接文件),s(套接字文件),p(管道)

如 find /tmp -type s

-size [+|-]#K、#G、#M :大小查找

+K:大于k的

-K:小于K的

K:精确查找大小为K的

如find /tmp -size 1K -ls(精确查找)

二、为了便于查找,我们可不可以把有些命令组合起来,帮助我们快速查找文件呢?

这个当然可以啦,下面我们来了解一下组合命令的使用;

1、组合条件:

-a:与

-o: 或 优先级最低

-not:非 优先级最高

如find /tmp -not -type d:查找非目录,

如查找/tmp/test 属主不是user也不是user2的

find /tmp -not -user user1 -a -not -user user2,也可以写成

find /tmp -not \(-user user1 -o -user user2\)。(运用的摩根定律)

如查找/tmp下不是目录,并且还不能是套接字类型的文件

find /tmp -not -type d -a -not -type s

-mtime:修改时间(单位天)([+-]# +:至少#天 -:#天之内)

-ctime:改变时间 find ./ -mtime -5

-atime:访问时间

-mmin:修改时间((单位分钟)

-cmin:改变时间

-amin:访问时间

-perm MODE:精确匹配 ,根据权限查找

-perm /MODE:有一个匹配就行

如find ./ -perm /644

-perm -MODE:文件权限能完全包含此MODE时才能显示

find ./ -perm -001 :查找其他文件有执行权限的

2、运作:

-print:(默认)显示,将查找到的文件输出到标准输出

-ls :类似ls-l的形式显示每一个文件的详细信息

-ok COMMAND {} \:每一次操作都需要用户确认

-exec COMMAND {} \:不需要用户确认

find ./ -perm -006 -exec chmod o-w {} \;

find ./ -perm -020 -exec mv {} {}.new\; 改名字,只要引用文件的文件名就要用{}

查找家目录下所有以.sh结尾,并且所有用户都具有执行权限,把其他用户的执行权限去掉

find ./ -name "*.sh" -a -perm -111 -exec chmod o-x {} \;

-xargs:从标准输入接收命令并执行

find /etc -size +1M | xargs echo >> /tmp/etc.largefiles

3、下面我们来运用一下find命令

1)、查找/var目录下属主为root并且属组为mail的所有文件;

看到这个题目你的思路是什么?我首先会想到要用组合条件:与关系-a ,查看属主用-user,

属组用-group,那这个题就迎刃而解啦,非常简单

find /var -user root -a -group mail

2)、查找/usr目录下不属于root,bin,或student的文件;

用到了组合条件的非、与(-not,-a)

find /usr -not -user root -a -not -user bin -a -not -user student

3)、查找/etc目录下最近一周内内容修改过且不属于root及student用户的文件;

这里有几个关键词:“最近一周、内容修改过、且、不属于”“ -mtime -7 、-not 、-a"

find /etc -mtime -7 -not -user root -a -not -user student

4)、查找当前系统上没有属主或属组且最近1天内曾被访问过的文件,并将其属主属组均修改为root;

这题和上题类似,但比它要求多了,要求要修改属主属组用chown,也用到了-exec,切记用{} \ ;结尾

find / \( -nouser -o -nogroup \) -a -atime -1 -exec chown root:root {} \;

5)、查找/etc目录下大于1M的文件,并将其文件名写入/tmp/etc.largefiles文件中;

用到了-size大小,还有我们前面学到的输出重定向中的>>追加,也可以用-xargs,但要用命令管道,

相比之下还是第一种比较容易理解

find /etc -size +1M >> /tmp/etc.largefiles

find /etc -size +1M | xargs echo >> /tmp/etc.largefiles

6)、查找/etc目录下所有用户都没有写权限的文件,显示出其详细信息;

修改权限用-perm,首先我们先想到所有用户都没有写权限为222,并且都要满足用-perm -222

如果取反为 -not -perm /222

find /etc -not -perm /222 -ls

怎么样你都作对了吗?呵呵,这就是find命令的功能,其实并不难

只要能熟练掌握并运用了find命令,你会发现它的功能要远远超出你的想象。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  find命令