文件查找相關: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 22:41
下一篇 2016-04-05 22:46

相關推薦

  • 第一周作業-02

    Linux的命令格式 命令的語法通用格式:    ~]# COMMAND OPTIONS ARGUMENTS        COMMAND: 發起一命令:請求內核將某個二進制程序運行為一個進程;            程序 –&…

    Linux干貨 2016-09-19
  • 第三周作業

      1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 who | cut -d" " -f1 | sort -u who | cut -d" " -f1 | uniq 2、取出最后登錄到當前系統的用戶的相關信息。    who | tail -1 …

    Linux干貨 2016-11-19
  • 兩張盤合并做yum源

    第一步 先把兩張光盤都連接到系統中 連接上iso文件后重啟電腦 這時桌面會顯示已將連接上的iso文件   然后創建兩個文件夾分別掛載這兩個光盤   mkdir centos6.9-{1,2} 創建兩個文件夾 df 查看系統硬盤   然后把兩個光盤分別掛載到文件中 mount -o ro,loop /dev/sr0 centos6…

    2017-07-12
  • 文件通配符練習

    課后資料補充 * : 通配符,代表任意字符(0到多個)? : 通配符,代表一個字符# : 注釋/ : 跳轉符號,將特殊字符或通配符還原成一般符號| : 分隔兩個管線命令的界定; : 連續性命令的界定~ : 用戶的根目錄$ : 變量前需要加的變量值! : 邏輯運算中的&q…

    Linux干貨 2016-08-08
  • 關于大型網站技術演進的思考(一):存儲的瓶頸(1)

    原文出處: 夏天的森林  前不久公司請來了位互聯網界的技術大牛跟我們做了一次大型網站架構的培訓,兩天12個小時信息量非常大,知識的廣度和難度也非常大,培訓完后我很難完整理出全部聽到的知識,今天我換了個思路是回味這次培訓,這個思路就是通過本人目前的經驗和技術水平來思考下大型網站技術演進的過程。 首先我們要思考一個問題,什么樣的網站才是大型網…

    Linux干貨 2015-02-26

評論列表(1條)

  • stanley
    stanley 2016-04-05 22:43

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

欧美性久久久久