“一切皆文件”是 Linux的哲学思想之一, 这条命令可以统计当前linux系统中有多少文件ls -R / |wc -l &建议放在后台执行,因为你的系统文件很多则会消耗很多时间,你可以看见这个结果是庞大的,linux的系统中的文件实在是太多了,怎么样才能快速而且精确的在linux系统找出你想要的文件呢?Linux 的find命令提供了很强大的功能,学好find命令的使用,可以给你节省大量花费在找文件的时间。
find的基本语法格式:
find [查找位置] [查找标准] [处理动作]
查找位置:默认为当前目录,可以指定多个目录,多个之间用空格
查找标准:默认为查找指定目录下的所有文件
处理动作:显示到标准输出,默认为print
剖析find的查找标准可分为哪些:
1)文件名
-name "文件名称" : 根据文件名查找,支持glob
<a target="_blank" href="http://blog.51cto.com/attachment/201307/112613593.png"></a>
-iname "文件名称",根据文件名查找,不区分大小写
<a target="_blank" href="http://blog.51cto.com/attachment/201307/112736368.png"></a>
2)文件的属主、属组
-user "USERNAME" : 根据属主查找
-group "GROUP" : 根据属组查找
-uid "UID" : 根据UID查找
-gid "GID" : 根据GID查找
-nouser : 查找没有属主的文件
-nogroup : 查找没有属组的文件
<a target="_blank" href="http://blog.51cto.com/attachment/201307/113036813.png"></a>
1
2
3
4
5
6
7
8
<code>[root@Redhat6 /]</code><code># find / -nouser -nogroup #没有属主,也没有属组</code>
<code>/tmp/user1dir</code>
<code>[root@Redhat6 /]</code><code># ls -ld /tmp/user1dir/ #验证查找的文件是否符合要求,文件没有用户表示属主和属组,但会以ID号来表示</code>
<code>drwxrwxr-x 2 500 500 4096 Jul 23 10:36 </code><code>/tmp/user1dir/</code>
<code>[root@Redhat6 /]</code><code># find / -user root -gid 500 #查找用户为root,gid为500</code>
<code>[root@Redhat6 /]</code><code># ls -ld /tmp/user1dir/</code>
<code>drwxrwxr-x 2 root 500 4096 Jul 23 10:36 </code><code>/tmp/user1dir/</code>
3)文件的类型
-type
f 文件
d 目录
b 块设备
c 字符设备
l 符合链接文件
p 命令管道文件
s 套接字文件
<a target="_blank" href="http://blog.51cto.com/attachment/201307/113633257.png"></a>
4)文件的大小
-size
#[k|M|G]:#表示数字,匹配的时候为模糊匹配
+#[k|M|G]:+#表示大于,匹配的结果大于#
-#[k|M|G] :-#表示小于,匹配的结果是小于#
<a target="_blank" href="http://blog.51cto.com/attachment/201307/120502830.png"></a>
<a target="_blank" href="http://blog.51cto.com/attachment/201307/121148430.png"></a>
5)文件修改时间
-atime [+|-]# :访问时间,默认为天,#表示#天的这个时间点,+#表示至少有#天没访问 , -#表示#天之内没访问
-mtime [+|-]# : 修改时间,#表示#天的这个时间点没有被修改,+#表示至少有#天没有修改 , -#表示#天之内没有修改
-ctime [+|-]# : 改变时间,#表示#天的这个时间点没有被改变,+#表示至少有#天没有被改变 , -#表示#天之内没有被改变
-amin [+|-]# : 时间为分钟,#表示#分钟的这个时间点没有被访问,+#表示至少有#分钟没有被访问 , -#表示#分钟之内没访问
-mmin [+|-]# :时间为分钟,#表示#分钟的这个时间点没有被修改,+#表示至少有#分钟没有被修改 , -#表示#分钟之内没有被修改
-cmin [+|-]# :时间为分钟,#表示#分钟的这个时间点没有被改变,+#表示至少有#分钟没有被改变 , -#表示#分钟之内没有被改变
<a target="_blank" href="http://blog.51cto.com/attachment/201307/122843920.png"></a>
<a target="_blank" href="http://blog.51cto.com/attachment/201307/124303783.png"></a>
6)文件权限
-perm [+|-] MODE
不带[+|-]表示精确权限匹配,
+表示任何一类用户的任何一位权限匹配
- 表示每类用户的每位权限都匹配
<a target="_blank" href="http://blog.51cto.com/attachment/201307/135422987.png"></a>
<a target="_blank" href="http://blog.51cto.com/attachment/201307/135758724.png"></a>
<a target="_blank" href="http://blog.51cto.com/attachment/201307/141955529.png"></a>
<a target="_blank" href="http://blog.51cto.com/attachment/201307/142435106.png"></a>
find在查找标准时支持组合查找条件,在使用组合查找条件时要考虑优先级,优先级为顺序为非→与→或,在组合参数是想改变优先级可以用()来提升优先级。
-a (and) 与默认是与
-o (or) 或
-not,! 非
find的处理动作可以是:
-print 默认为输出
-ls 显示查找到的文件的详细信息
-ok COMMAND \; 要确认
-exec COMMAND \; 其中COMMAND中有对查找到的文件进行操作时,用{}来替代查找到的 文件,\;表示使用-exec的结束符,是固定格式; 使用-exec来出来查找的文件时,还可以通过管道送给xargs命令来解决,xargs在执行命令时,如果有对文件进行操作则用-i选项,{}也表示要操作的文件。
9
10
11
12
13
14
15
16
17
18
<code>1、查找</code><code>/var</code><code>目录下属主为root并且属组为mail的所有文件;</code>
<code>find</code> <code>/var</code> <code>-user root -group mail</code>
<code>2、查找</code><code>/usr</code><code>目录下不属于root,bin,或student的文件;</code>
<code>find</code> <code>/usr</code> <code>-not \( -user root -o -user bin -o -user student \)</code>
<code>find</code> <code>/usr</code> <code>-not -user root -a -not -user bin -a -not -user student</code>
<code>3、查找</code><code>/etc</code><code>目录下最近一周内内容修改过且不属于root及student用户的文件;</code>
<code>find</code> <code>/etc</code> <code>-mtime -7 -a -not -user root -a -not -user student</code>
<code>find</code> <code>/etc</code> <code>-mtime -7 -a -not \( -user root -o -user student \)</code>
<code>4、查找当前系统上没有属主或属组且最近1天内曾被访问过的文件,并将其属主属组均修改为root;</code>
<code>find</code> <code>/ \( -nouser -o -nogroup \) -a -atime -1 -</code><code>exec</code> <code>chown</code> <code>root:root {} \;</code>
<code>5、查找</code><code>/etc</code><code>目录下大于1M的文件,并将其文件名写入</code><code>/tmp/etc</code><code>.largefiles文件中;</code>
<code>find</code> <code>/etc</code> <code>-size +1M -</code><code>exec</code> <code>echo</code> <code>{} >> </code><code>/tmp/etc</code><code>.largefiles \;</code>
<code>find</code> <code>/etc</code> <code>-size +1M >> </code><code>/tmp/etc</code><code>.largefiles</code>
<code>6、查找</code><code>/etc</code><code>目录下所有用户都没有写权限的文件,显示出其详细信息;</code>
<code>find</code> <code>/etc</code> <code>-not -perm +222</code>
<code>7、删除类型不是目录,而且没有属主的文件;</code>
<code>find</code> <code>/ -not -</code><code>type</code> <code>d -a -nouser -</code><code>exec</code> <code>rm</code> <code>-f {} \;</code>
<code>find</code> <code>/ -not -</code><code>type</code> <code>d -a -nouser | </code><code>xargs</code> <code>-i </code><code>rm</code> <code>-f {}</code>
<code></code>
本文转自 jie783213507 51CTO博客,原文链接:http://blog.51cto.com/litaotao/1261246,如需转载请自行联系原作者