天天看點

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,如需轉載請自行聯系原作者

繼續閱讀