Linux經常使用命令之文件查找which、find、locate命令講解

在以前的課程中,咱們介紹了Linux系統的經常使用文件處理命令和權限管理命令,今天咱們繼續來學習Linux操做系統的其餘處理命令。數據庫

一、文件搜索命令 which 命令解釋vim

  • 命令名稱:which
  • 命令所在路徑: /usr/bin/which
  • 執行權限:全部用戶
  • 命令功能:顯示系統命令所在目錄
  • 語法:which [命令名稱]

使用舉例

好比咱們想要查找 ls 命令所在目錄:windows

$ which ls學習

image

注意:which命令只能用於查找命令所在路徑,不能查找普通文件,好比想用該命令查找名爲ffile1的文件,執行 which file1以後是會提示no file:操作系統

image

相關命令

which 命令功能相似的命令 whereis,使用方法和which同樣,好比查找 chmod命令所在位置:命令行

$ whereis chmod3d

二、文件搜索命令 find 命令解釋unix

  • 命令名稱:find
  • 命令所在路徑: /usr/bin/find
  • 執行權限:全部用戶
  • 命令功能:在指定目錄下查找任何文件或目錄
  • 語法:find [搜索路徑] [參數] [查找關鍵字]

其實這條命令有點相似於在咱們windows系統裏面查找文件,只不過在Linux裏面是用命令行來查找而已。find命令中,參數有幾十種,咱們介紹經常使用的幾種。code

使用舉例

1、根據文件名來查找:好比我想在/etc目錄查找名爲dnf的文件

$ find /etc -name dnfblog

你們能夠看到,爲我找出了2個名爲dnf的文件。這裏提醒一下你們,這裏查找是全匹配查找,並非模糊查找,意思是這裏只會爲我查找名稱全名爲dnf的文件,而不是查找名稱包含dnf的文件。

image

可是在有些狀況下,咱們確實須要進行模糊查找,好比忘記了文件的全名,可能只記得文件名是dnf開頭,那麼咱們能夠用一個通配符 * 來進行查找:

$ find /etc -name dnf*

image

你們能夠看到,爲我查找出來了5個以dnf開頭的文件,其中包含了全名是dnf的文件,所以咱們能夠清楚 * 號是匹配任意字符。

還有一種狀況,好比我清晰的記得文件是dnf開頭的,文件全名有8個字符,後面5個字符不記得了。在這種狀況下,咱們能夠用 ? 來進行輔助查找,一個?匹配一個字符:

$ find /etc -name dnf?????

image

咱們能夠看到,爲我查找出了2個文件名爲dnf開頭,全名是8個字符的文件。

注意:使用 find 查找文件,佔用系統的資源越少越好,所以咱們在查找的時候,定位路徑越精確越好,查找的關鍵字越全越好。並且最好不要在系統根目錄下面查找,這樣會全盤掃描,會消耗系統的大量資源。

2、根據文件大小來查找: -size

這裏文件大小通常都是以block數據庫塊來計算的,一個數據塊=512字節,所以1KB=2個數據塊。好比咱們要查找文件大小爲1M的文件:

$ find /etc -size +2048

你們注意,在數字2048前面我用了一個+號,表示文件大於1M。若是是小於1M,咱們能夠用-號:

$ find /etc -size -2048

  • 根據文件的全部者查找: -user

好比我要查找全部者爲系統用戶chuan的用戶的文件:

$ find /etc -user chuan

3、根據時間來查找

這個屬性有點複雜,能夠按照天來查找,也能夠按照分支來查找:

天:ctime,atime,mtime

分鐘:cmin,amin,mmin

  • c-change:表示文件的屬性被修改,包含全部者、所屬組、權限
  • a-access:表示被訪問、瀏覽過
  • m-modify:表示文件的內容被修改過

這裏還有個要注意的,就和咱們在使用-size屬性同樣,有-+的輔助, - 表示以內,+ 超過。好比咱們查找2分鐘內被修改過的文件:

$ find /etc -mmin -2

4、根據文件類型來查找:-type

經常使用的類型有二進制文件 f,軟連接文件 l,目錄 d。好比咱們要查找類型爲f的文件:

$ find /etc -type f

若是咱們想要在/home路徑查找名稱爲 up開頭的目錄,該如何查找呢?這裏咱們就要用到Linux查找的鏈接符:

  • -a and 邏輯與鏈接
  • -o or 邏輯或連接

那麼咱們的命令能夠寫成:

$ find /home -name up* -a -type d

5、鏈接執行符:-exec

在上一個說到根據文件類型來查找的時候,咱們有用到查找鏈接符 -a-o,這裏再介紹一個相對複雜一點的鏈接符 -exec。意思是:在執行命令查找完以後,再接着對執行結果進行操做。

好比咱們查找 /var/log 目錄下面文件名爲 dnf 開頭的文件,並列出這些文件的屬性:

$ find /var/log -name dnf* -exec ls -l {} \;

image

你們確定很疑惑這條命令中 {} \; 是什麼意思,其實這個是固定格式,你們記住就好了。{} 表示 find 查詢的結果

三、locate 命令使用詳解

  • 命令名稱:locate
  • 指令英文原義:list files in databases
  • 命令所在路徑: /usr/bin/find
  • 執行權限:全部用戶
  • 命令功能:尋找文件或目錄
  • 語法:locate [查找關鍵字]

該命令在unix系統裏面不提供,只有Linux系統纔有

使用舉例

好比要查找 service 的文件:

$ locate service

執行這條命令,你們會發現查找速度很是快,比 find 命令查找文件快多了。那有些同窗就會說,我就用 locate 命令查找文件,幹嗎還要 find 命令呢?

爲解答這個問題,咱們先建立一個新的文件,好比我在 test 目錄新建一個 file3的文件,而後再執行命令 $ locate file3,發現並無查找結果,可是這個文件缺失是存在的。

image

這是爲何呢?由於執行 locate 命令查找,是經過Linux文件數據庫去查找,並非掃描磁盤,所以查找速度會要比 find 查找快不少。而我剛新建的文件,並無同步到Linux的文件數據庫裏面去,所以經過 locate 是查找不到的。那麼咱們如何把新建的文件同步到Linux文件數據庫呢?有兩種方式:

  • 等待Linux系統自動執行任務
  • 手動執行同步命令

因此接下來咱們來說解Linux的另一個命令:updatedb

四、updatedb 命令使用詳解

  • 命令名稱:updatedb
  • 指令英文原義:update the slocate database
  • 命令所在路徑: /usr/bin/updatedb
  • 執行權限:全部用戶
  • 命令功能:創建系統目錄文件的數據庫
  • 語法:updatedb

$ updatedb

image

五、grep 命令使用詳解

  • 命令名稱:grep
  • 命令所在路徑: /bin/grep
  • 執行權限:全部用戶
  • 命令功能:在文件中搜索字符串匹配的行並輸出
  • 語法:grep [指定字符] [源文件]

注意:這個命令並非搜索文件,而是在文件中搜索匹配的字符串,並輸出這一行。可是 grep 的做用不只僅如此,後面教程中咱們會繼續介紹該命令的使用。

使用舉例

好比我要查找 /etc/services 文件裏面的 tftp相關的,若是咱們直接用以前學習的命令好比 catvimmore等命令,發現文件內容太長,太難找了,這種狀況下咱們執行:

$ grep tftp service

image

以上4種命令就是咱們平常中使用最多的文件搜索相關的命令以及使用方法。

image

相關文章
相關標籤/搜索