Linux之查找命令find簡介

查找命令find簡介

 

 Linux使用過程中難免會遇到查找功能,類似于Windows中的搜索功能,如果想要找某個文件在什么地方,什么格式的文件等等。在Linux中我們可以使用find、locatewhich、whereis等命令。接下來我們就簡單說一下如何使用這幾個命令查找文件。

一、which

which命令的作用是,在PATH變量指定的路徑中,搜索某個系統命令的位置,并且返回第一個搜索結果。也就是說,使用which命令,就可以看到某個系統命令是否存在,以及執行的到底是哪一個位置的命令。

實例:1.png

二、Whereis

whereis命令只能用于程序名的搜索,而且只搜索二進制文件(參數-b)、man說明文件(參數-m)和源代碼文件(參數-s)。如果省略參數,則返回所有信息。2.png

三、Locate

locate命令其實是"find -name"的另一種寫法,但是要比后者快得多,原因在于它不搜索具體目錄,而是搜索一個數據庫(/var/lib/mlocate/mlocate.db),這個數據庫中含有本地所有文件信息。Linux系統自動創建這個數據庫,并且每天自動更新一次,所以使用locate命令查不到最新變動過的文件。為了避免這種情況,可以在使用locate之前,先使用updatedb命令,手動更新數據庫。

實例:3.png

因為Locate命令必須在數據庫定時更新或者手動updatedb后才可以查找最近操作過的文件,且如果系統比較大則創建索引所需時間比較長,locate查找文件名時在路徑中包含也會被查找出來,查找結果模糊,所以我們在此不再多說,重點說一下find的用法。

四、find(重點)

find是最常見和最強大的查找命令,你可以用它找到任何你想找的文件。根據文件的各種屬性去找到相對應文件;支持實時查找,精準查找,精確匹配,缺點是速度較locate慢,但是功能強大,是我們日常最常使用的命令之一。

1、find的基本用法

find  [option]… [查找路徑] [查找條件] [處理動作]     

             查找路徑:默認為當前目錄

             查找條件:默認為指定路徑下的所有文件

             處理動作:默認為顯示至屏幕

2、查找條件:

      2.1 -name "文件名稱" :支持使用globbing字符;

                    *:任意長度的任意字符

                    ?:任意單個字符

                    []:指定范圍內的字符

                    [^]:指定范圍外的字符

      2.2 -iname "文件名稱" :查找時忽略大小寫,

      2.3 -user username :根據文件的屬主查找;

             例如:查找/var/目錄屬主為root且屬組為mail的所有文件4.png

      2.4 -group grpname :根據文件的屬組查找;find /home -user openstack –ls

      2.5 -nogroup 查找無有效所屬組的文件,即該文件所屬的組在/etc/groups中不存在

            -nouser 查找無有效屬主的文件,即該文件的屬主在/etc/passwd中不存在。5.png

      2.6  組合條件查找:

                   與: -a

                   :  -o

                   非; -not  !取反

      例如:查找/home/目錄下不屬于rootbin的并且是鏈接類型的文件6.png

      2.7  -type 查找某一類型的文件,如:

                    b – 塊設備文件

                    d – 目錄

                    c – 字符設備文件

                    p – 管道文件

                    l – 符號鏈接文件

                    f – 普通文件

                    s – socket文件

      2.8  根據文件的大小查找:size [+ | -]# UNIT

             UNIT單元可以為:KM、G

             find /var/log -size 2k      1<x<=2  的為2k

             #unit:  #-1 < x <= #  #表示查找的范圍為小于#且大于#-1單位內大小的文件

           -#unit:  x<=#-1           -#表示的其實是#-1范圍內的文件       如: -2k    1.1是不符合的,其實是x<=1k的文件

             +#unit: x>#               +#表示的是大于#號的文件          如:      +2k   2.1, 2.4符合條件7.png

      2.9  根據時間戳查找:

             以天為單位:

             -[ atime |mtime |ctime ]    [+ | -]#

             +#:  x>= (#+1)            +#表示#+1天之前被訪問過的文件

             -# x< #             -#表示小于#天之內的訪問過的文件    例如: -2:最近一次訪問時間為在兩天之內

             #:  # <= x < #+1     #表示在##+1天之內訪問過的文件

             以分鐘為單位:同上

             -amin   -mmin   -cmin

             說明:Linux的文件有三個時間,分別是訪問時間、修改時間、狀態改動時間,分別對應的是atime(也就是access  time)、mtimemodify time)、ctimechange    time)。這  三個時間有所不同。

   atime:當文件的內容被訪問的時候,比如使用命令cat,這時候訪問時間會改變。

   mtime:當文件的內容被改變的時候,比如用vi編輯器編輯之后保存,這時候修改時間會被改變。

   ctime:當文件的屬性或者權限被改變的時候,這時候狀態改變時間會被改變。

   可以用stat  文件名來查看這三個時間。

   實例:查找/test目錄下最近一周內其內容修改過的,且不屬于rootbin的文件8.png

2.10  根據權限查找:-perm [+|-] mode

             mode mode 精確匹配

             +mode: 任何一類用戶的權限,只要能包含對其指定任何一位權限即可,以屬主為例;

             -mode: 每類用戶指定的檢查權限都匹配,為三類用戶所有指定的檢查權限都包含;9.png

2.11  處理動作:

             -print :默認處理動作,顯示

             -ls :

             -exec command {} \;      -exec find命令對匹配的文件執行該參數所給出的其他linux命令,注意{}\;之間的空格;

             -ok – exec的作用相同,只不過和會人交互而已,OK執行前會向你確認是不是要執行。10.png

2.12  find :一次性查找所有符合條件的所有文件,并一同傳遞給-exec-ok后面的指定的命令;但是有些命令不能接受過長的參數;此時使用另一種方式;

                           find | xargs command

例如:當我們去刪除比較多的文件是:比如本地目錄下的/media/rehat/Packages中的rpm包時,如果執行find ./ -name “*.rpm” | rm –rf 時,將不執行任何操作;11.png

以上find等查找命令的一些使用操作,實際使用過程中find使用頻率很高,遇到問題在與大家分享,如有不正之處,敬請指正!!!謝謝。

 

原創文章,作者:wxdz_2004(古雨秋),如若轉載,請注明出處:http://www.www58058.com/4485

(1)
wxdz_2004(古雨秋)wxdz_2004(古雨秋)
上一篇 2015-05-18
下一篇 2015-05-18

相關推薦

  • 玩轉Nginx之一:基礎概念

    Nginx web服務器:http協議 http協議:html,MIME(多用途互聯網郵件拓展) major/minor text/html,text/plain,image/jpeg web資源:URL(scheme://server:port/path/to/source) 方法:GET,HEAD(相應首部)讀取資源 POST提交表單 PUT上傳數據 D…

    Linux干貨 2016-10-29
  • Week1: Linux 初步

    1. 描述計算機的組成及其功能 一個完整的計算機系統由硬件系統和軟件系統兩大部分組成 馮諾依曼體系下的計算機五大部件 CPU:運算器、控制器、寄存器、緩存(一二三級緩存)) 存儲器:內存 RAM(Random-Access Memory) Input:輸入指令、提供數據 Output: 輸出數據加工后的結果 要點:計算機中的信息(程序和數據)以二進制方式表示…

    Linux干貨 2016-12-04
  • N24_阿龍弟弟 學習計劃/目標/宣言

    嗨,大家好,這是我的第一篇文章。很高興來到馬幫門徒這個大家庭。 學習計劃:沒有自己的計劃,跟著馬哥課程的進度來吧,以周為單位,確保每周任務完成; 學習目標:掌握應有的運維能力,做一名合格的Linux運維工程師,提升自我價值,過更好的生活; 學習宣言:Be a better man(Not Only Linux)!

    Linux干貨 2016-10-25
  • 終于成為馬幫的成員了

    終于成為馬幫的成員了

    Linux干貨 2016-09-18
  • Linux上命令使用格式及如何獲取幫助信息

    Linux系統上命令使用: 命令本身是一個可執行的程序文件,二進制格式的文件,有可能會調用共享庫文件,發起一條命令,請求內核將某一個二進制程序運行為一個進程。   命令的語法格式:   ~]#COMMAND(命令)   OPENTIONS(選項)   ARGUMENTS(參數) command 命令…

    Linux干貨 2016-10-30
  • Linux 內存管理

    1.Linux 進程在內存數據結構      可以看到一個可執行程序在存儲(沒有調入內存)時分為代碼段,數據段,未初始化數據段三部分:      1) 代碼段:存放CPU執行的機器指令。通常代碼區是共享的,即其它執行程序可調用它。假如機器中有數個進程運行相同的一個程序,那么它們就…

    Linux干貨 2015-04-13

評論列表(2條)

  • stanley
    stanley 2015-05-18 17:46

    東郭的標簽可以用極為專業來形容不過分

    • wxdz_2004(古雨秋)
      wxdz_2004(古雨秋) 2015-05-18 21:41

      @stanley是哪篇文章的標簽?

欧美性久久久久