天天看点

Linux文件查找find命令用法

一、含义

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&gt; # &gt;=#天内改变的文件

<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,如需转载请自行联系原作者

继续阅读