文件查找相關:whereis、find和locate

    本文將對findlocate進行詳細講解

命令簡介

  • 名稱: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
    • 參數說明

     -u,-U:建立數據庫,-u會由根目錄開始,-U則可以指定開始的位置。

     -e:將目錄排除在尋找的范圍之外。

     -l:如果是1,則啟動安全模式。在安全模式相愛,使用者不會看到權限無法看到的文件。

     -f:將特定的檔案系統排除在外。

     -q:安靜模式,不會顯示任何錯誤訊息。

     -n:至多顯示n個輸出。

     -o:指定數據庫存的名稱。

     -d:指定數據庫的路徑。

     -h:顯示輔助訊息。

     -v:顯示更多訊息。

     -V:顯示程序的版本信息。

    • 注意updatedb的問題

     updatedb的進程在運行時,會非常多的占用系統資源

原創文章,作者:黑白子,如若轉載,請注明出處:http://www.www58058.com/13667

(0)
黑白子黑白子
上一篇 2016-04-05
下一篇 2016-04-05

相關推薦

  • httpd2.4 應用

    練習:  (1)基于主機名實現三個虛擬主機     (2) 每虛擬主機使用獨立的訪問日志和錯誤日志 (3) 第三個虛擬主機的/admin要進行用戶訪問認證  (4) 在第二個虛擬主機上提供/status; (5) 在第三個虛擬主機提供路徑別名/bbs,訪問其它文件系統路徑; (6) 嘗試使用混合類型…

    Linux干貨 2016-10-09
  • N25期–第十五周作業

    1、 總結sed和awk的詳細用法; 2、刪除/boot/grub/grub.conf文件中所有行的行首的空白字符; # sed ‘s@^[[:space:]]\+@@’ /boot/grub/grub.conf 3、刪除/etc/fstab文件中所有以#開頭,后跟至少一個空白字符的行的行首的#和空白字符; # sed ‘s@^#[[:space:]]*@@…

    Linux干貨 2017-05-08
  • grep的使用,正則表達式

    文本處理grep ? ? grep :根據模式去搜索文本,并將匹配到的文本顯示出來 pattern(模式):文本字符和正則表達式的元字符組合而成的匹配條件 正則表達式:(REGular EXPression)正則表達式就是處理字符串的方法,通過一些特殊字符的輔助,讓用戶輕松方便的達到查找、刪除、修改特定字符串的處理程序 grep 的用法 ? ? name: …

    Linux干貨 2017-11-25
  • gawk基礎及進階

    GUN awk: 文本處理三工具:grep,sed,awd grep,egrep,fgrep:文本過濾工具:pattern sed:行編輯器 模式空間、保持空間 awk:報告生成器,格式化文本輸出; AWK:Aho,Weinberger,Kernighan –> New AWK,NAWK GNU awk,gawk gawk – …

    Linux干貨 2017-05-22
  • 國際標準OSI七層模型和事實標準TCP/IP四層模型

    我們知道,標準分為三種:國際標準、國家標準和事實標準。那我們學習的兩個重要模型:OSI和TCP/IP模型分別屬于國際標準和事實標準,接下來我們來總結一下兩種模型的分層及功能還有異同: 一:國際標準OSI模型 OSI:(Open System Interconnect) 開放系統互連,總共分為七層,從下到上順序為:物理層(physical)、數據鏈路層(dat…

    2017-09-02
  • 路漫漫其修遠兮第十周

    1、請詳細描述CentOS系統的啟動流程(詳細到每個過程系統做了哪些事情) 從dawning大濕兄那里借來的圖,如下: 啟動過程 (PC架構) POST –> Boot Sequence(BIOS) –> Boot Loader (MBR)–>GRUB—> Kernel(ramdisk) &#821…

    Linux干貨 2017-02-24

評論列表(1條)

  • stanley
    stanley 2016-04-05 22:43

    寫標簽是個好習慣,markdown可多參考頂置文章

欧美性久久久久