本文將對find和locate進行詳細講解
命令簡介
-
名稱:whereis
功能:定位文件所在的目錄
用法:whereis shell命令
注意:whereis是根據環境變量PATH來查找文件的,而PATH通常設置成存放命令的那些路徑,如/bin、/usr/bin等。因此whereis的用途僅限于定位shell命令所在的位置。
-
名稱:find
功能:查找文件
用法:find -name 文件名
-
名稱:locate
功能:查找文件或目錄
用法:locate 文件名或目錄名
說明:locate默認是不被安裝的,它的包名叫:mlocate 可以直接使用yum安裝即可。locate也是系統中查找文件的方法,但它并不是從磁盤中實時查找文件,而是到由updatedb命令產生的信息庫中查找相應的文件和目錄。
注意:如果locate找不到某個文件,但確定該文件存在時,是由于updatedb生成的信息庫已經過時。此時你只需要以root的身份執行updatedb命令,重新建立整個系統所有文件和目錄的資料庫。
命令詳解之find
-
前言
由于find具有強大的功能,所以它的選項也很多。find命令是一個非常消耗資源的命令,我們用它的時候要習慣于把它放在后臺執行,因為遍歷一個大的文件系統可能會花很長的時間。
-
命令格式
一、find命令的一般形式為:
find pathname -options [-print -exec -ok …]
二、find命令的參數:
pathname:find命令所查找的目錄路徑。用.來表示當前目錄,用/來表示系統根目錄。
-print:find命令將匹配的文件輸出到標準輸出。
-exec:find命令對匹配的文件執行該參數所給出的shell命令。
格式:'command' {} \; #注意{}和\;之間有空格!
-ok:在執行每一個命令之前,都會給出提示,讓用戶確定是否執行。和-exec的作用相同。
三、find命令選項:
-name:按照文件名查找文件。
-perm:按照文件權限查找文件。
-prune:使find命令不在當前指定的目錄中查找。
-user:按照文件屬主查找文件。
-nouser:查找無有效屬主的文件,即該文件的屬主在/etc/passwd中不存在。
-group:按照文件屬組查找文件。
-nogroup:查找無有效屬組的文件,即該文件所屬的組在/etc/groups中不存在。
-mtime -n|+n:按照文件的更改時間來查找文件。
-n:表示文件更改時間距現在n天以內。
+n:表示文件更改時間距現在n天以前。
-newer file1 ! file2:查找更改時間比文件file1新但比文件file2舊的文件。
-type:查找某一類型的文件。
-size n [c][/c]:查找文件長度為n塊文件,帶有c時表示文件長度以字節計算。
-depth:在查找文件時,首先查找當前目錄中的文件,然后再在其子目錄中查找。
-fstype:查找位于某一類型文件系統中的文件,這些文件系統類型通??梢栽谂渲梦募?etc/fstab中找到,該配置文件中包含了本系統中有關文件系統的信息。
-mount:在查找文件時不跨越文件系統mount點。
-follow:如果find命令遇到符號鏈接文件,就跟蹤至鏈接所指向的文件。
-cpio:對匹配的文件使用cpio命令,將這些文件備份到磁帶設備中。
四、使用exec或ok來執行shell命令
exec選項后面跟隨著所要執行的命令或腳本,格式:'command' {} \;
為了使用exec選項,必須要同時使用print選項。如果驗證find命令,會發現該命令只輸出從當前路徑起的相對路徑及文件名。
例如:為了用ls -l命令列出所匹配到的文件,可以把ls -l命令放在find命令的-exec選項中。
[root@localhost ~]# find . -type f -exec ls -l {} \; -rw-r--r--. 1 root root 18 May 20 2009 ./.bash_logout -rw-------. 1 root root 38 Feb 26 14:04 ./.lftp/rl_history -rw-------. 1 root root 12428 Mar 26 19:41 ./.bash_history -rw-r--r--. 1 root root 129 Dec 4 2004 ./.tcshrc -rw-r--r--. 1 root root 9562 Feb 23 05:48 ./install.log -rw-------. 1 root root 35 Feb 24 11:41 ./.lesshst -rw-------. 1 root root 1122 Feb 23 05:48 ./anaconda-ks.cfg -rw-r--r--. 1 root root 176 May 20 2009 ./.bash_profile -rw-r--r--. 1 root root 176 Sep 23 2004 ./.bashrc -rw-r--r--. 1 root root 100 Sep 23 2004 ./.cshrc -rw-r--r--. 1 root root 3161 Feb 23 05:47 ./install.log.syslog -rw-------. 1 root root 4205 Mar 25 12:10 ./.viminfo
在上面例子中,find命令匹配到了當前目錄下的所有普通文件,并在-exec選項中使用ls -l命令將它們列出。
在shell中用任何方式刪除文件之前,應當先查看相應的文件,使用-exec選項執行rm命令時,它會在刪除之前先給出提示。如下:
[root@localhost /]# find . -name "*.conf" -mtime +1 -ok rm {} \; < rm ... ./usr/share/dracut/modules.d/98syslog/rsyslog.conf > ?
按y鍵刪除文件,按n鍵不刪除。
同樣還能使用grep命令。如下:
[root@localhost /]# find /etc -name "passwd" -exec grep "root" {} \; root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin
上面的例子中,find命令首先匹配所有文件名為passwd的文件,然后執行grep命令看看這些文件中是否存在一個root用戶。
五、find命令其他用法
1、根據文件特征查詢:
-amin n:查找系統中最后n分鐘訪問的文件
-atime n:查找系統中最后n*24小時訪問的文件
-cmin n:查找系統中最后n分鐘被改變狀態的文件
-ctime n:查找系統中最后n*24小時被改變狀態的文件
-false:查找系統中總是錯誤的文件
-empty:查找系統中空白的文件,或空白的文件目錄,或目錄中沒有子目錄的目錄
-fstype type:查找系統中存在于指定文件系統的文件,例如:ext2
-gid n:查找系統中文件數字組ID為n的文件
-group gname:查找系統中文件屬于gname文件組,并且指定組和ID的文件
find命令功能強大,我并沒有更加詳細的說明。參考有關Linux有關書籍可以知道所有find命令的查找函數。
命令詳解之locate
locate讓使用者可以很快速的搜尋檔案系統內是否有指定的檔案。其方法是先建立(使用updatedb命令)一個包括系統內所有檔案名稱及路徑的數據庫,之后尋找時就只需要查詢這個數據庫,而不必實際深入系統之中了。
在一般的distribution中,數據庫的建立都被放在contab中自動執行。一般使用者在使用時是要用下面的命令即可。
[root@localhost /]# locate your_file_name
-
參數說明
-
注意updatedb的問題
-u,-U:建立數據庫,-u會由根目錄開始,-U則可以指定開始的位置。
-e:將目錄排除在尋找的范圍之外。
-l:如果是1,則啟動安全模式。在安全模式相愛,使用者不會看到權限無法看到的文件。
-f:將特定的檔案系統排除在外。
-q:安靜模式,不會顯示任何錯誤訊息。
-n:至多顯示n個輸出。
-o:指定數據庫存的名稱。
-d:指定數據庫的路徑。
-h:顯示輔助訊息。
-v:顯示更多訊息。
-V:顯示程序的版本信息。
updatedb的進程在運行時,會非常多的占用系統資源
原創文章,作者:黑白子,如若轉載,請注明出處:http://www.www58058.com/13667
寫標簽是個好習慣,markdown可多參考頂置文章