一、含义
find是linux命令,可以将系统内符合expression的文件列出来。指定文件按名称、类别、时间、大小、权限等不同属性组合时,只有完全相符的才会被列出来。
相对于locate查找命令,find具有精确匹配、实时查找的优势,但是同时由于需要遍历指定路径下的文件,所以查找速度慢,比较耗费系统资源。
二、find命令
find [option] [查找路径] [查找条件] [处理动作]
查找路径:默认当前目录
查找条件:默认为查找指定路径下的所有文件
处理动作:默认为显示
查找条件:
-name "文件名称":根据文件名称进行查找,支持文件名通配(globbing)
1
2
3
4
<code>#查找/etc/下文件名为network的文件</code>
<code>[Linux]</code><code>#find /etc/ -name "network"</code>
<code>/etc/sysconfig/network</code>
<code>/etc/rc.d/init.d/network</code>
-iname "文件名称":查找时忽略大小写
<code>[Linux]</code><code>#find /tmp/ -iname abc</code>
<code>/</code><code>tmp</code><code>/</code><code>Abc</code>
<code>/</code><code>tmp</code><code>/</code><code>abc</code>
-u username:根据文件属主查找
5
<code>[Linux]</code><code>#find /tmp/ -user hadoop</code>
<code>/</code><code>tmp</code><code>/</code><code>abc.tar.xz</code>
<code>/</code><code>tmp</code><code>/</code><code>etc</code>
<code>/</code><code>tmp</code><code>/</code><code>etc</code><code>/</code><code>netconfig</code>
<code>[Linux]</code><code>#</code>
-g groupname:根据文件属组查找
6
<code>[Linux]</code><code>#find /tmp/ -group hadoop</code>
-uid UID:根据文件UID查找
<code>[Linux]</code><code>#find /tmp/ -uid 500</code>
<code>/</code><code>tmp</code><code>/</code><code>1M</code><code>.txt</code>
<code>/</code><code>tmp</code><code>/</code><code>1.5M</code><code>.txt</code>
-gid GID:根据文件GID查找
<code>[Linux]</code><code>#find /tmp/ -gid 501</code>
<code>/</code><code>tmp</code><code>/</code><code>2M</code><code>.txt</code>
<code>/</code><code>tmp</code><code>/</code><code>2.1M</code><code>.txt</code>
-nouser:查找没有属主的文件
<code>[Linux]</code><code>#find /tmp/ -nouser</code>
<code>/</code><code>tmp</code><code>/</code><code>myMBR</code>
<code>/</code><code>tmp</code><code>/</code><code>3M</code><code>.txt</code>
<code>/</code><code>tmp</code><code>/</code><code>512K</code><code>.txt</code>
-nogroup:查找没有属组的文件
<code>[Linux]</code><code>#find /tmp/ -nogroup</code>
对查找条件可以组合一起使用:
-a:与;同时满足
<code>#查找用户为root,且组为hadoop的文件</code>
<code>[Linux]</code><code>#find /tmp/ -user root -a -group hadoop</code>
-o:或;至少一个满足
<code>[Linux]</code><code>#find /tmp/ -nouser -o -user stu7</code>
-not|!:非;取反
7
8
9
10
11
<code>[Linux]</code><code>#find /tmp/ -not -user root</code>
type:根据文件类型查找文件
f:普通文件
d:目录文件
b:块设备
c:字符设备
l:符号链接
<code>[Linux]</code><code>#find /dev/ -type l</code>
<code>/</code><code>dev</code><code>/</code><code>myvg</code><code>/</code><code>mylv</code>
<code>/</code><code>dev</code><code>/</code><code>myvg</code><code>/</code><code>snap</code><code>-</code><code>mylv</code>
<code>/</code><code>dev</code><code>/</code><code>dvd</code>
<code>/</code><code>dev</code><code>/</code><code>cdrom</code>
<code>/</code><code>dev</code><code>/</code><code>md</code><code>/</code><code>station73.magelinux.com:</code><code>5</code>
<code>/</code><code>dev</code><code>/</code><code>MAKEDEV</code>
<code>/</code><code>dev</code><code>/</code><code>core</code>
s:套接字
<code>[Linux]</code><code>#find /dev/ -type s</code>
<code>/</code><code>dev</code><code>/</code><code>log</code>
p:管道
-size:根据文件大小查找
-size [+|-]#Unit{K|M|G}
#Unit:精确匹配到#到#-1个单位内的文件
<code>[Linux]</code><code>#find /tmp/ -size 2M</code>
+#Unit:匹配大于#个单位的文件
<code>[Linux]</code><code>#find /tmp/ -size +2M</code>
-#Unit:匹配大小为#-1个单位之外的文件
<code>[Linux]</code><code>#find /tmp/ -size -2M</code>
<code>/</code><code>tmp</code><code>/</code>
<code>/</code><code>tmp</code><code>/</code><code>scripttest</code>
<code>/</code><code>tmp</code><code>/</code><code>rc.sysinit</code>
根据时间戳查找:
以天为单位(time):支持[+|-]
-atime:访问时间
+#:表示(#+1)天之外访问过的文件
<code>[Linux]</code><code>#find /tmp/ -atime +2</code>
<code>/</code><code>tmp</code><code>/</code><code>script</code>
-mtime:修改时间
-#:表示#天之内被修改过的文件
12
13
14
<code>[Linux]</code><code>#find /tmp/ -mtime -2</code>
<code>/</code><code>tmp</code><code>/</code><code>network</code>
<code>/</code><code>tmp</code><code>/</code><code>NetworkManager</code>
<code>/</code><code>tmp</code><code>/</code><code>.ICE</code><code>-</code><code>unix</code>
-ctime:改变时间
#:表示大于#+1> # >=#天内改变的文件
<code>[Linux]</code><code>#find /tmp/ -ctime 1</code>
以分钟为单位(min):支持[+|-]
用法与以天为单位是一样的;就不再举例说明
-amin [+|-]#
-mmin [+|-]#
-cmin [+|-]#
根据权限查找:
-perm [+|-]MODE
MODE:精确匹配
<code>#匹配权限精确为444的文件</code>
<code>[Linux]</code><code>#find /tmp/ -perm 444</code>
+MODE:任何一类用户的任何一位权限匹配;通常查找某类用户的某特定权限是否存在
<code>#查找其他用户是否有写权限,0代表不查找</code>
<code>[Linux]</code><code>#find /tmp/ -perm +002</code>
-MODE:每类用户的指定要检查的权限位都匹配
<code>#查找每类用户都有写权限的</code>
<code>[Linux]</code><code>#find /tmp/ -perm -222</code>
处理动作:
-print:打印在标准输出上
-ls:以长格式输出匹配文件的信息
<code>[Linux]</code><code>#find /tmp/ -perm -222 -ls</code>
<code>262145</code> <code>4</code> <code>drwxrwxrwt </code><code>6</code> <code>root root </code><code>4096</code> <code>Mar </code><code>1</code> <code>14</code><code>:</code><code>23</code> <code>/</code><code>tmp</code><code>/</code>
<code>262146</code> <code>4</code> <code>drwxrwxrwt </code><code>2</code> <code>root root </code><code>4096</code> <code>Mar </code><code>1</code> <code>13</code><code>:</code><code>48</code> <code>/</code><code>tmp</code><code>/</code><code>.ICE</code><code>-</code><code>unix</code>
-exec COMMAND {} \;:对匹配到的文件执行指定的命令
<code>[Linux]</code><code>#find /tmp/ -iname "*.txt" -exec mv {} {}x \;</code>
<code>[Linux]</code><code>#find /tmp/ -iname "*.txtx"</code>
<code>/</code><code>tmp</code><code>/</code><code>512K</code><code>.txtx</code>
<code>/</code><code>tmp</code><code>/</code><code>1M</code><code>.txtx</code>
<code>/</code><code>tmp</code><code>/</code><code>3M</code><code>.txtx</code>
<code>/</code><code>tmp</code><code>/</code><code>ccc.txtx</code>
<code>/</code><code>tmp</code><code>/</code><code>1.5M</code><code>.txtx</code>
<code>/</code><code>tmp</code><code>/</code><code>2.1M</code><code>.txtx</code>
<code>/</code><code>tmp</code><code>/</code><code>2M</code><code>.txtx</code>
-ok COMMAND {} \;:同于-exec,但是是交互式操作
find ...| xargs COMMAND
<code>[Linux]</code><code>#find /tmp/ -iname "*.txtx" | xargs ls -lh</code>
<code>-</code><code>r</code><code>-</code><code>-</code><code>r</code><code>-</code><code>-</code><code>r</code><code>-</code><code>-</code> <code>1</code> <code>centos gentoo </code><code>1.6M</code> <code>Mar </code><code>1</code> <code>11</code><code>:</code><code>45</code> <code>/</code><code>tmp</code><code>/</code><code>1.5M</code><code>.txtx</code>
<code>-</code><code>r</code><code>-</code><code>-</code><code>r</code><code>-</code><code>-</code><code>r</code><code>-</code><code>-</code> <code>1</code> <code>centos root </code><code>1.0M</code> <code>Mar </code><code>1</code> <code>11</code><code>:</code><code>43</code> <code>/</code><code>tmp</code><code>/</code><code>1M</code><code>.txtx</code>
<code>-</code><code>rw</code><code>-</code><code>r</code><code>-</code><code>-</code><code>r</code><code>-</code><code>-</code> <code>1</code> <code>root gentoo </code><code>2.1M</code> <code>Mar </code><code>1</code> <code>11</code><code>:</code><code>44</code> <code>/</code><code>tmp</code><code>/</code><code>2.1M</code><code>.txtx</code>
<code>-</code><code>rw</code><code>-</code><code>r</code><code>-</code><code>-</code><code>r</code><code>-</code><code>-</code> <code>1</code> <code>root gentoo </code><code>2.0M</code> <code>Mar </code><code>1</code> <code>11</code><code>:</code><code>43</code> <code>/</code><code>tmp</code><code>/</code><code>2M</code><code>.txtx</code>
<code>-</code><code>r</code><code>-</code><code>-</code><code>r</code><code>-</code><code>-</code><code>r</code><code>-</code><code>-</code> <code>1</code> <code>stu7 stu7 </code><code>3.0M</code> <code>Mar </code><code>1</code> <code>11</code><code>:</code><code>43</code> <code>/</code><code>tmp</code><code>/</code><code>3M</code><code>.txtx</code>
<code>-</code><code>rw</code><code>-</code><code>r</code><code>-</code><code>-</code><code>r</code><code>-</code><code>-</code> <code>1</code> <code>514</code> <code>515</code> <code>512K</code> <code>Mar </code><code>1</code> <code>11</code><code>:</code><code>44</code> <code>/</code><code>tmp</code><code>/</code><code>512K</code><code>.txtx</code>
<code>-</code><code>rw</code><code>-</code><code>r</code><code>-</code><code>-</code><code>r</code><code>-</code><code>-</code> <code>1</code> <code>root root </code><code>0</code> <code>Mar </code><code>1</code> <code>14</code><code>:</code><code>23</code> <code>/</code><code>tmp</code><code>/</code><code>ccc.txtx</code>
三、具体实例
1、查找/var/目录属主为root且属组为mail的所有文件;
<code>[Linux]</code><code>#find /var/ -user root -a -group mail</code>
<code>/</code><code>var</code><code>/</code><code>spool</code><code>/</code><code>mail</code>
2、查找/usr目录下不属于root、bin或hadoop的所用文件;
<code>[Linux]</code><code>#find /usr/ -not \( -user root -o -user bin -o -user hadoop \) |less</code>
<code>/</code><code>usr</code><code>/</code><code>libexec</code><code>/</code><code>abrt</code><code>-</code><code>action</code><code>-</code><code>install</code><code>-</code><code>debuginfo</code><code>-</code><code>to</code><code>-</code><code>abrt</code><code>-</code><code>cache</code>
<code>/</code><code>usr</code><code>/</code><code>local</code><code>/</code><code>apache</code><code>/</code><code>cgi</code><code>-</code><code>bin</code><code>/</code><code>test</code><code>-</code><code>cgi</code>
<code>/</code><code>usr</code><code>/</code><code>local</code><code>/</code><code>apache</code><code>/</code><code>cgi</code><code>-</code><code>bin</code><code>/</code><code>printenv.wsf</code>
<code>/</code><code>usr</code><code>/</code><code>local</code><code>/</code><code>apache</code><code>/</code><code>cgi</code><code>-</code><code>bin</code><code>/</code><code>printenv.vbs</code>
<code>/</code><code>usr</code><code>/</code><code>local</code><code>/</code><code>apache</code><code>/</code><code>cgi</code><code>-</code><code>bin</code><code>/</code><code>printenv</code>
3、查找/etc/目录下最近一周内其内容修改过的,且不属于root或hadoop的文件;
<code>[Linux]</code><code>#find /etc/ -atime -7 -not \( -user root -o -user hadoop \)</code>
<code>/</code><code>etc</code><code>/</code><code>keystone</code><code>/</code><code>policy.json</code>
4、查找当前系统上没有属主或属组,且最近1个月内曾被访问过的文件;
<code>[Linux]</code><code>#find /tmp/ -atime -30 -a \( -nouser -o -nogroup \)</code>
5、查找/etc/目录下大于1M且类型为普通文件的所有文件;
<code>[Linux]</code><code>#find /etc/ -size +1M -a -type f</code>
<code>/</code><code>etc</code><code>/</code><code>selinux</code><code>/</code><code>targeted</code><code>/</code><code>modules</code><code>/</code><code>active</code><code>/</code><code>policy.kern</code>
<code>/</code><code>etc</code><code>/</code><code>selinux</code><code>/</code><code>targeted</code><code>/</code><code>policy</code><code>/</code><code>policy.</code><code>24</code>
<code>/</code><code>etc</code><code>/</code><code>gconf</code><code>/</code><code>gconf.xml.defaults</code><code>/</code><code>%</code><code>gconf</code><code>-</code><code>tree.xml</code>
6、查找/etc/目录所有用户都没有写权限的文件;
<code>[Linux]</code><code>#find /etc/ -not -perm +222</code>
<code>/</code><code>etc</code><code>/</code><code>pam.d</code><code>/</code><code>cups</code>
<code>/</code><code>etc</code><code>/</code><code>openldap</code><code>/</code><code>certs</code><code>/</code><code>password</code>
<code>/</code><code>etc</code><code>/</code><code>shadow</code>
<code>/</code><code>etc</code><code>/</code><code>dbus</code><code>-</code><code>1</code><code>/</code><code>system.d</code><code>/</code><code>cups.conf</code>
<code>/</code><code>etc</code><code>/</code><code>shadow</code><code>-</code>
<code>/</code><code>etc</code><code>/</code><code>ld.so.conf.d</code><code>/</code><code>kernel</code><code>-</code><code>2.6</code><code>.</code><code>32</code><code>-</code><code>358.el6</code><code>.x86_64.conf</code>
<code>/</code><code>etc</code><code>/</code><code>gshadow</code>
<code>/</code><code>etc</code><code>/</code><code>rc.d</code><code>/</code><code>init.d</code><code>/</code><code>lvm2</code><code>-</code><code>monitor</code>
<code>/</code><code>etc</code><code>/</code><code>rc.d</code><code>/</code><code>init.d</code><code>/</code><code>blk</code><code>-</code><code>availability</code>
<code>/</code><code>etc</code><code>/</code><code>rc.d</code><code>/</code><code>init.d</code><code>/</code><code>lvm2</code><code>-</code><code>lvmetad</code>
<code>/</code><code>etc</code><code>/</code><code>sudoers</code>
7、查找/etc/目录下至少有一类用户没有写权限;
<code>[Linux]</code><code>#find /etc/ -not -perm -222 | less</code>
<code>/</code><code>etc</code><code>/</code><code>pam.d</code>
<code>/</code><code>etc</code><code>/</code><code>pam.d</code><code>/</code><code>system</code><code>-</code><code>auth</code><code>-</code><code>ac</code>
<code>/</code><code>etc</code><code>/</code><code>pam.d</code><code>/</code><code>config</code><code>-</code><code>util</code>
<code>/</code><code>etc</code><code>/</code><code>pam.d</code><code>/</code><code>runuser</code><code>-</code><code>l</code>
<code>/</code><code>etc</code><code>/</code><code>pam.d</code><code>/</code><code>remote</code>
<code>/</code><code>etc</code><code>/</code><code>pam.d</code><code>/</code><code>setup</code>
<code>/</code><code>etc</code><code>/</code><code>pam.d</code><code>/</code><code>gdm</code><code>-</code><code>fingerprint</code>
<code>/</code><code>etc</code><code>/</code><code>pam.d</code><code>/</code><code>system</code><code>-</code><code>config</code><code>-</code><code>users</code>
<code>/</code><code>etc</code><code>/</code><code>pam.d</code><code>/</code><code>password</code><code>-</code><code>auth</code><code>-</code><code>ac</code>
8、查找/etc/init.d/目录下,所有用户都有执行权限且其它用户有写权限的文件;
<code>[Linux]</code><code>#find /etc/init.d/ -perm -113</code>
find相对较占用系统资源,所以建议不要经常使用,不过当别人不小心进了你的服务器,这时查找就会方便很多的。
本文转自Mr_陈 51CTO博客,原文链接:http://blog.51cto.com/chenpipi/1365559,如需转载请自行联系原作者