一、linux可以用于查找的相關指令(本次重點在于說明find用法)
1、find:
是最為強大的查找指令,可以查找到你所想要找的所有檔案
2、locate
同樣也是一個檔案查找指令,locate指令其實是"find-name"的另一種寫法,但是要比後者快得多,原因在于它不搜尋具體目錄,而是搜尋一個資料庫,這個資料庫中含有本地所有檔案資訊。Linux系統自動建立這個資料庫,并且每天自動更新一次,是以使用locate指令查不到最新變動過的檔案。
3、whereis
whereis指令隻能用于程式名稱的搜尋,而且隻搜尋二進制檔案(參數-b)、man說明檔案(參數-m)和源代碼檔案(參數-s)。如果省略參數,則傳回所有資訊。
1
2
<code>[root@localhost ~]</code><code># whereis yum</code>
<code>yum: </code><code>/usr/bin/yum</code> <code>/etc/yum</code> <code>/etc/yum</code><code>.conf </code><code>/usr/share/man/man8/yum</code><code>.8.gz</code>
4、which
which指令的作用是,在PATH環境變量指定的路徑中,搜尋某個系統指令的位置,并且傳回第一個搜尋結果。也就是說,使用which指令,就可以檢視某個系統指令是否存在,以及執行的到底是哪一個位置的可執行檔案(即指令)
<code>[root@localhost ~]</code><code># which yum</code>
<code>/usr/bin/yum</code>
5、type
type指令其實不能算查找指令,它是用來查找某個指令到底是由shell自帶的,還是由shell外部的獨立二進制檔案提供的。
<code>[root@localhost ~]</code><code># type yum</code>
<code>yum is </code><code>/usr/bin/yum</code>
從以上各指令的功能可以看出,雖然在linux中有諸多可以用于查找的指令,但能夠基于檔案(指令也是一個可執行檔案之一)層次查找的隻有find與locate,兩者差別也比較明顯。
find與loacte的差別
find:
優點:可實時查找,精确比對
缺點:範圍周遊,速度慢
locate:
優點:查找速度快
缺點:依賴于資料庫、非實時查找
二、find 用法
格式:
find [options] [查找路徑] [查找條件] [處理動作]
查找路徑:預設為目前目錄
查找條件:預設為查找指定路徑下的所有檔案
處理動作:預設為顯示
1、條件查找(支援檔案名通配)
-name "File_name"
按名稱查找
3
4
5
6
7
8
<code>#查找/var/lib目錄下,名字為rpm的目錄或檔案</code>
<code>[root@localhost lib]</code><code># pwd</code>
<code>/var/lib</code>
<code>[root@localhost lib]</code><code># find -name "rpm"</code>
<code>.</code><code>/rpm</code>
<code>[root@localhost lib]</code><code># ls -ld rpm/</code>
<code>drwxr-xr-x. 2 root root 4096 Feb 26 08:06 rpm/</code>
<code>[root@localhost lib]</code><code>#</code>
-name "*"
查找任意長度的任意字元
<code>#查找/var/lib目錄下以任意長度任意字元開頭以數字結尾的檔案或目錄</code>
<code>[root@localhost lib]</code><code># find -name "*5"</code>
<code>.</code><code>/yum/history/2014-02-23/5</code>
<code>.</code><code>/rpm/Sigmd5</code>
<code>[root@localhost lib]</code><code># ls -l rpm/Sigmd5</code>
<code>-rw-r--r--. 1 root root 77824 Feb 24 22:08 rpm</code><code>/Sigmd5</code>
<code>[root@localhost lib]</code><code># ls -ld yum/history/2014-02-23/5/</code>
<code>drwx------ 2 root root 4096 Feb 23 19:47 yum</code><code>/history/2014-02-23/5/</code>
-name "?"
包含任意單個定符
<code>#查找/var/log下名字以s開頭後面跟一個任意字元結尾的檔案或目錄</code>
<code>[root@localhost log]</code><code># find -name "s?"</code>
<code>.</code><code>/sa</code>
<code>[root@localhost log]</code><code># ls -ld sa</code>
<code>drwxr-xr-x. 2 root root 4096 Feb 26 00:00 sa</code>
-name "[]"
範圍内的任意字元
<code>#查找/var/log/sa下名字以sa開頭後跟兩個數字的目錄或檔案</code>
<code>[root@localhost sa]</code><code># pwd</code>
<code>/var/log/sa</code>
<code>[root@localhost sa]</code><code># find -name "sa[0-9][0-9]"</code>
<code>.</code><code>/sa23</code>
<code>.</code><code>/sa25</code>
<code>.</code><code>/sa26</code>
<code>.</code><code>/sa24</code>
-name "[^]"
範圍外的任意字元
9
10
11
12
13
14
15
<code>#查找目前目錄下名字不是小寫字母開頭的檔案或目錄</code>
<code>[root@localhost rpm]</code><code># pwd</code>
<code>/var/lib/rpm</code>
<code>[root@localhost rpm]</code><code># find -name "[^[:lower:]]*"</code>
<code>.</code>
<code>.</code><code>/Filedigests</code>
<code>.</code><code>/Sha1header</code>
<code>.</code><code>/Provideversion</code>
<code>.</code><code>/Dirnames</code>
<code>.</code><code>/Packages</code>
<code>.</code><code>/Obsoletename</code>
<code>.</code><code>/Providename</code>
<code>.</code><code>/Conflictname</code>
<code>.</code><code>/Requirename</code>
<code>......</code>
-iname "File_name"
查找時不區分字元大小寫
16
17
<code>[root@localhost log]</code><code># pwd</code>
<code>/var/log</code>
<code>[root@localhost log]</code><code># find -iname "[a-z]*"</code>
<code>...</code>
<code>.</code><code>/anaconda</code><code>.syslog</code>
<code>.</code><code>/prelink</code>
<code>.</code><code>/prelink/prelink</code><code>.log</code>
<code>.</code><code>/dmesg</code><code>.old</code>
<code>.</code><code>/lastlog</code>
<code>.</code><code>/anaconda</code><code>.ifcfg.log</code>
<code>.</code><code>/cron</code>
<code>.</code><code>/dracut</code><code>.log</code>
<code>.</code><code>/messages</code>
<code>.</code><code>/ConsoleKit</code>
<code>.</code><code>/ConsoleKit/history</code>
<code>.</code><code>/cups</code>
<code>....</code>
-user UserName
根據屬主查找
<code>[root@localhost tmp]</code><code># pwd;ls -l</code>
<code>/tmp</code>
<code>total 92</code>
<code>-rwxr-xr-x 1 root root 48568 Feb 25 12:31 </code><code>cat</code>
<code>-rw-rw-r-- 1 docker docker 0 Feb 26 12:08 Device.c</code>
<code>-rw-rw-r-- 1 docker docker 0 Feb 26 12:08 device.h</code>
<code>-rw-rw-r-- 1 docker docker 0 Feb 26 12:08 device.txt</code>
<code>-rwx------. 1 root root 1195 Feb 23 19:26 ks-script-rxXCJd</code>
<code>-rwxr-xr-x. 1 root root 346 Feb 23 19:26 ks-script-rxXCJd.log</code>
<code>-rw-r--r-- 1 openstack openstack 720 Feb 26 09:23 mounts.txt</code>
<code>[root@localhost tmp]</code><code># find -user docker</code>
<code>.</code><code>/device</code><code>.h</code>
<code>.</code><code>/Device</code><code>.c</code>
<code>.</code><code>/device</code><code>.txt</code>
-group GroupName
根據屬組查找
<code>[root@localhost tmp]</code><code># ll</code>
<code>drwxr-xr-x 2 root root 4096 Feb 25 18:39 repo</code>
<code>-rw-r--r-- 1 root openstack 242 Feb 23 21:23 scprit.sh</code>
<code>drwxr-xr-x 2 root root 4096 Feb 25 22:53 script</code>
<code>-rw-r--r-- 1 root root 106 Feb 24 11:46 tast.txt</code>
<code>drwxr-xr-x 2 root root 4096 Feb 25 12:32 </code><code>test</code>
<code>-rw-r--r-- 1 root openstack 145 Feb 24 16:49 test2.sh</code>
<code>-rw-r--r-- 1 root openstack 125 Feb 24 16:56 test3.sh</code>
<code>-rw-r--r-- 1 root openstack 721 Feb 24 17:04 test4.sh</code>
<code>-rw-------. 1 root root 0 Feb 23 19:12 yum.log</code>
<code>[root@localhost tmp]</code><code># find -group openstack</code>
<code>.</code><code>/scprit</code><code>.sh</code>
<code>.</code><code>/test4</code><code>.sh</code>
<code>.</code><code>/test2</code><code>.sh</code>
<code>.</code><code>/test3</code><code>.sh</code>
<code>.</code><code>/mounts</code><code>.txt</code>
-uid UID
按照使用者的UID查找
<code>-rw-rw-r-- 1 502 502 0 Feb 26 12:08 Device.c</code>
<code>-rw-rw-r-- 1 502 502 0 Feb 26 12:08 device.h</code>
<code>-rw-rw-r-- 1 502 502 0 Feb 26 12:08 device.txt</code>
<code>-rwxr-xr-x. 1 root root 346 Feb 23 19:26 ks-script-rxXCJd.l</code>
<code>[root@localhost tmp]</code><code># find -uid 502</code>
<code>#當有使用者被删除了,那麼他的檔案屬組,将變成他之前的UID或GIU,</code>
<code>#UID與GID就是在這種情況下用來定位的,以便後好的處理這些檔案。</code>
<code>#當然存在的使用者也可使用UID或GID來查找.</code>
-gid GID
按照使用者的的GID查找
<code>[root@localhost tmp]</code><code># ls -l</code>
<code>-rw-r--r-- 1 501 501 720 Feb 26 09:23 mounts.txt</code>
<code>drwxr-xr-x 2 root root 4096 Feb 25 18:39 repo</code>
<code>-rw-r--r-- 1 root 501 242 Feb 23 21:23 scprit.sh</code>
<code>drwxr-xr-x 2 root root 4096 Feb 25 22:53 script</code>
<code>-rw-r--r-- 1 root root 106 Feb 24 11:46 tast.txt</code>
<code>drwxr-xr-x 2 root root 4096 Feb 25 12:32 </code><code>test</code>
<code>-rw-r--r-- 1 root 501 145 Feb 24 16:49 test2.sh</code>
<code>-rw-r--r-- 1 root 501 125 Feb 24 16:56 test3.sh</code>
<code>-rw-r--r-- 1 root 501 721 Feb 24 17:04 test4.sh</code>
<code>[root@localhost tmp]</code><code># find -gid 501</code>
-nouser
查無有效屬主的檔案,即檔案的屬主在/etc/passwd中不存在
18
19
20
21
22
23
24
25
<code>[root@localhost include]</code><code># pwd</code>
<code>/root/Download/httpd-2</code><code>.2.26</code><code>/include</code>
<code>[root@localhost include]</code><code># ll</code>
<code>total 404</code>
<code>-rw-r--r-- 1 501 games 1075 Jul 12 2006 ap_compat.h</code>
<code>-rw-r--r-- 1 root root 7371 Feb 24 20:29 ap_config_auto.h</code>
<code>-rw-r--r-- 1 501 games 6850 Nov 14 00:51 ap_config_auto.h.</code><code>in</code>
<code>-rw-r--r-- 1 501 games 9472 Apr 15 2011 ap_config.h</code>
<code>-rw-r--r-- 1 root root 2704 Feb 24 21:58 ap_config_layout.h</code>
<code>-rw-r--r-- 1 501 games 2784 Jul 12 2006 ap_config_layout.h.</code><code>in</code>
<code>-rw-r--r-- 1 501 games 4167 May 10 2007 ap_listen.h</code>
<code>-rw-r--r-- 1 501 games 9803 Jun 28 2013 ap_mmn.h</code>
<code>[root@localhost include]</code><code># find . -nouser</code>
<code>.</code><code>/http_request</code><code>.h</code>
<code>.</code><code>/util_xml</code><code>.h</code>
<code>.</code><code>/util_ldap</code><code>.h</code>
<code>.</code><code>/ap_mmn</code><code>.h</code>
<code>.</code><code>/ap_release</code><code>.h</code>
<code>./.indent.pro</code>
<code>.</code><code>/ap_config</code><code>.h</code>
<code>.</code><code>/util_script</code><code>.h</code>
<code>.</code><code>/httpd</code><code>.h</code>
<code>.</code><code>/ap_listen</code><code>.h</code>
<code>.</code><code>/ap_mpm</code><code>.h</code>
-nogroup
查無有效屬組的檔案,即檔案的屬組在/etc/group中不存在
<code>[root@localhost tmp]</code><code># pwd</code>
<code>-rwxr-xr-x 1 root root 48568 Feb 25 12:31 </code><code>cat</code>
<code>-rw-rw-r-- 1 502 502 0 Feb 26 12:08 Device.c</code>
<code>-rw-rw-r-- 1 502 502 0 Feb 26 12:08 device.h</code>
<code>-rw-rw-r-- 1 502 502 0 Feb 26 12:08 device.txt</code>
<code>-rwx------. 1 root root 1195 Feb 23 19:26 ks-script-rxXCJd</code>
<code>-rwxr-xr-x. 1 root root 346 Feb 23 19:26 ks-script-rxXCJd.log</code>
<code>[root@localhost tmp]</code><code># find -nogroup</code>
2、組合條件
-a
與,同時滿足(and)
<code>[root@localhost tmp]</code><code># find -user root -nogroup</code>
<code>[root@localhost tmp]</code><code># find -user root -a -nogroup</code>
-o
或(or)
<code>[root@localhost tmp]</code><code># find -nouser -o -nogroup</code>
-not, !
非,取反
<code>[root@localhost tmp]</code><code># find ! -user root</code>
<code>[root@localhost tmp]</code><code># find -not -user root</code>
3、檔案類型查找(type)
-type f
普通檔案
<code>#查找檔案類型為普通檔案屬主不是root使用者或沒有屬組的檔案</code>
<code>-rw-------. 1 root root 0 Feb 23 19:12 yum.log</code>
<code>[root@localhost tmp]</code><code># find -type f -not -user root -o -nogroup</code>
目錄
-type b
塊裝置
-type c
字元裝置
-type l
符号連結檔案
-type p
命名管道
-type s
套接
其它檔案類型查找方法與f用法相同。
4、檔案大小查找(-size [+|-]#),Unit(c:位元組,k:KB,M:MB,G:GB
-size #
指定大小(取值是不大于)
-size +#
大于#
<code>#查找/etc/下類型為普通檔案且大于2M</code>
<code>[root@localhost tmp]</code><code># find /etc/ -type f -size +2M</code>
<code>/etc/selinux/targeted/modules/active/policy</code><code>.kern</code>
<code>/etc/selinux/targeted/policy/policy</code><code>.24</code>
<code>[root@localhost tmp]</code><code># ls -lh /etc/selinux/targeted/modules/active/policy.kern /etc/selinux/targeted/policy/policy.24</code>
<code>-rw-r--r--. 1 root root 7.0M Feb 23 19:19 </code><code>/etc/selinux/targeted/modules/active/policy</code><code>.kern</code>
<code>-rw-r--r--. 1 root root 7.0M Feb 23 19:19 </code><code>/etc/selinux/targeted/policy/policy</code><code>.24</code>
-size: -#
小于#
5、時間戳查找
以天為機關(time):
-atime [+|-]#
-mtime [+|-]#
修改時間
-ctime [+|-]#
改變時間
通路時間
<code>#查找在系統中2天内通路的檔案</code>
<code>[root@localhost tmp]</code><code># find -atime -2</code>
<code>.</code><code>/script</code>
<code>.</code><code>/script/b</code><code>.sh</code>
<code>.</code><code>/script/yum_install</code><code>.sh</code>
<code>.</code><code>/script/show_uid</code><code>.sh</code>
<code>./.ICE-unix</code>
<code>.</code><code>/cat</code>
<code>.</code><code>/test</code>
<code>.</code><code>/repo</code>
<code>.</code><code>/repo/CentOS-Base</code><code>.repo</code>
以分鐘為機關(min)[+|-]#:
-amin [+|-]#
-mmin [+|-]#
<code>#查找在/tmp/script/5分鐘之内修改過的檔案</code>
<code>[root@localhost script]</code><code># find /tmp/script/ -mmin -5 |ls -l</code>
<code>total 12</code>
<code>-rw-r--r-- 1 root root 630 Feb 26 16:37 b.sh</code>
<code>-rw-r--r-- 1 root root 232 Feb 26 16:36 show_uid.sh</code>
<code>-rw-r--r-- 1 root root 795 Feb 26 16:36 yum_install.sh</code>
-cmin [+|-]#
6、權限查找
-perm [+|-]MODE
-perm MODE
精确比對
<code>#查找類型為普通檔案,權限為755的檔案</code>
<code>[root@localhost tmp]</code><code># ls -l [ktc]*</code>
<code>[root@localhost tmp]</code><code># find . -type f -perm 755</code>
<code>.</code><code>/ks-script-rxXCJd</code><code>.log</code>
-perm +MODE
任何一類使用者的任何一位權限比對;常用于查找某類使用者的某特定權限是否存在
<code>[root@localhost etc]</code><code># find /etc/sysconfig/ -type f -perm +744 |ls -l</code>
<code>total 1912</code>
<code>drwxr-xr-x. 3 root root 4096 Feb 23 19:15 abrt</code>
<code>drwxr-xr-x. 4 root root 4096 Feb 23 19:21 acpi</code>
<code>-rw-r--r--. 1 root root 46 Feb 26 12:16 adjtime</code>
<code>-rw-r--r--. 1 root root 1512 Jan 12 2010 aliases</code>
<code>-rw-r--r-- 1 root root 12288 Feb 23 19:27 aliases.db</code>
<code>drwxr-xr-x. 2 root root 4096 Feb 23 19:19 alsa</code>
<code>drwxr-xr-x. 2 root root 4096 Feb 24 22:08 alternatives</code>
<code>-rw-------. 1 root root 541 Nov 23 20:43 anacrontab</code>
<code>-rw-r--r--. 1 root root 148 May 15 2009 asound.conf</code>
<code>-rw-r--r--. 1 root root 1 Jan 30 2012 at.deny</code>
<code>-rw-r--r-- 1 root root 0 Feb 26 14:01 A.txt</code>
<code>.....</code>
-MODE
每類使用者的指定要檢查的權限位都比對
<code>#在/etc/查找類型為普通檔案,每一類使用者權限上都要比對</code>
<code>[root@localhost tmp]</code><code># find /etc/ppp/ -type f -perm -154 -ls</code>
<code>393983 4 -rwxr-xr-x 1 root root 3196 Oct 10 22:48 </code><code>/etc/ppp/ipv6-up</code>
<code>393978 4 -rwxr-xr-x 1 root root 386 Oct 10 22:48 </code><code>/etc/ppp/ip-down</code>
<code>393982 4 -rwxr-xr-x 1 root root 1687 Oct 10 22:48 </code><code>/etc/ppp/ipv6-down</code>
<code>393981 8 -rwxr-xr-x 1 root root 6517 Oct 10 22:48 </code><code>/etc/ppp/ip-up</code><code>.ipv6to4</code>
<code>393980 4 -rwxr-xr-x 1 root root 430 Oct 10 22:48 </code><code>/etc/ppp/ip-up</code>
<code>393979 4 -rwxr-xr-x 1 root root 3262 Oct 10 22:48 </code><code>/etc/ppp/ip-down</code><code>.ipv6to4</code>
7、處理動作:
列印在标準輸出上(預設);
-ls
以長格式輸出各檔案資訊
-exec COMMAND {} \;
對查找到的檔案執行指定的指令
<code>#查詢當天修改過的檔案</code>
<code>[root@localhost tmp]</code><code># find . -mtime -1 -type f -exec ls -l {} \;</code>
<code>-rw-rw-r-- 1 502 502 0 Feb 26 12:08 .</code><code>/device</code><code>.h</code>
<code>-rw-rw-r-- 1 502 502 0 Feb 26 12:08 .</code><code>/Device</code><code>.c</code>
<code>-rw-rw-r-- 1 502 502 0 Feb 26 12:08 .</code><code>/device</code><code>.txt</code>
<code>-rw-r--r-- 1 root root 629 Feb 25 18:32 .</code><code>/script/b</code><code>.sh</code>
<code>-rw-r--r-- 1 root root 794 Feb 25 22:53 .</code><code>/script/yum_install</code><code>.sh</code>
<code>-rw-r--r-- 1 root root 231 Feb 25 17:32 .</code><code>/script/show_uid</code><code>.sh</code>
<code>-rw-r--r-- 1 501 501 720 Feb 26 09:23 .</code><code>/mounts</code><code>.txt</code>
<code>-rw-r--r-- 1 root root 1926 Feb 25 18:37 .</code><code>/repo/CentOS-Base</code><code>.repo</code>
-ok COMMAND {} \;
互動式的-exec
<code>#查找類型為普通檔案,修改時間不大于兩天的檔案是否顯示</code>
<code>[root@localhost tmp]</code><code># find ./ -mtime -1 -type f -ok ls -l {} \;</code>
<code>< </code><code>ls</code> <code>... .</code><code>/device</code><code>.h > ? Y</code>
<code>< </code><code>ls</code> <code>... .</code><code>/Device</code><code>.c > ? Y</code>
<code>< </code><code>ls</code> <code>... .</code><code>/device</code><code>.txt > ? Y</code>
<code>< </code><code>ls</code> <code>... .</code><code>/script/b</code><code>.sh > ? Y</code>
<code>< </code><code>ls</code> <code>... .</code><code>/script/yum_install</code><code>.sh > ? Y</code>
<code>< </code><code>ls</code> <code>... .</code><code>/script/show_uid</code><code>.sh > ? Y</code>
find把查找到的所有檔案一次性地傳遞給-exec所指定的指令
<code>[root@localhost tmp]</code><code># ls -l *.doc</code>
<code>-rw-r--r-- 1 root root 0 Feb 26 16:53 fdsfd.doc</code>
<code>-rw-r--r-- 1 root root 0 Feb 26 16:52 WER.doc</code>
<code>[root@localhost tmp]</code><code># find /tmp -iname "*.doc " | rm -rf</code>
<code>[root@localhost tmp]</code><code># find /tmp -iname "*.doc" -exec mv {} {}x \;</code>
<code>[root@localhost tmp]</code><code># ls -l *.docx</code>
<code>-rw-r--r-- 1 root root 0 Feb 26 16:47 asdfadf.docx</code>
<code>-rw-r--r-- 1 root root 0 Feb 26 16:53 fdsfd.docx</code>
<code>-rw-r--r-- 1 root root 0 Feb 26 16:52 WER.docx</code>
<code>-rw-r--r-- 1 root root 0 Feb 26 16:47 xxx.docx</code>
注:find:把查找到的所有檔案一次性地傳遞給-exec所指定的檔案
管道傳遞的是字元串,不能使用檔案操作指令處理,
如果要用可以使用以下指令
<code>[root@localhost tmp]</code><code># touch asdf.c</code>
<code>[root@localhost tmp]</code><code># touch asdf.h</code>
<code>[root@localhost tmp]</code><code># touch asdf.so</code>
<code>[root@localhost tmp]</code><code># touch asdf.ppt</code>
<code>[root@localhost tmp]</code><code># touch asdf.doc</code>
<code>[root@localhost tmp]</code><code># touch study.dox</code>
<code>[root@localhost tmp]</code><code># find -mmin 1 | xargs rm -rf</code>
<code>[root@localhost tmp]</code><code># ls</code>
<code>#此處的-mmin 1表示修改時間到從1分鐘不到2分鐘之間的檔案删除,慎用,我剛才#就是+1,結果一分鐘之前的所有檔案就這麼沒了~~~~悲劇了!</code>
find |xargs COMMAND(查找大檔案很有用)
====================================完===================================================
本文轉自 jinlinger 51CTO部落格,原文連結:http://blog.51cto.com/essun/1363882,如需轉載請自行聯系原作者