一分鐘學一個 Linux 命令

2023-06-15 06:00:37

前言

大家好,我是 god23bin。歡迎來到《一分鐘學一個 Linux 命令》系列,每天只需一分鐘,記住一個 Linux 命令不成問題。今天需要你花兩分鐘時間來學習下,因為今天要介紹的是兩個常用的搜尋命令:findgrep 命令。

find

什麼是 find 命令?

find 命令用於在指定的目錄下搜尋檔案和目錄。它提供了豐富的搜尋條件和選項,可以根據檔名、檔案型別、檔案大小、修改時間等屬性進行搜尋。find 命令通常用於查詢特定檔案或根據條件進行批次操作。

find命令通常進行的是從根目錄 / 開始的全盤搜尋,所以不要在高峰時期使用 find 命令。

如何使用 find 命令?

find 命令的使用相對較複雜,但掌握了基本語法後,你就能靈活使用它。

基本語法:

find 目錄路徑 [選項引數] [搜尋條件]
  • 目錄路徑:指定要查詢的目錄路徑。
  • 選項引數:用於指定匹配條件,例如檔名、型別。
  • 搜尋條件:用於指定要搜尋的檔案和目錄,滿足這個條件的就會被搜尋出來。

舉例說明

假設我們想找到在 /opt/games 目錄下所有以 .txt 擴充套件名結尾的檔案,則可以使用以下命令:

find /opt/games -name "*.txt"

這將在 /opt/games 目錄及其子目錄中搜尋所有以 .txt 結尾的檔案,並將它們列出。

如果要在當前目錄及其子目錄中查詢所有以 .txt 結尾的文字檔案,則可以使用以下命令:

find . -name "*.txt"

常用選項引數

  • -name:按檔名進行匹配。
  • -type:按檔案型別進行匹配。
  • -size:按檔案大小進行匹配。
  • -user:按檔案所屬使用者進行匹配。
  • -mtime:(modified)按檔案最後內容的修改時間進行匹配。
  • -perm:(permission)按檔案許可權進行匹配。

例子

  1. 搜尋 /home 目錄及其子目錄中包含 god23bin 結尾的目錄和檔案:
find /home -name "*god23bin*"

  1. 搜尋 /opt/games 目錄下的所有型別為目錄的檔案(注意:目錄也是一種特殊的檔案
find /opt/games -type d

  1. 查詢 /boot 目錄及其子目錄下所有大小大於 1MB 的檔案:
find /boot -size +1M

  1. 查詢 /home 目錄及其子目錄下所有屬於 god23bin 這個使用者的檔案(目錄):
find /home -user god23bin

  1. 搜尋 /opt 目錄及其子目錄下最近 7 天內發生過修改的檔案(目錄):
find /opt -mtime +7

按許可權進行匹配

這裡先說下,-perm 後面的內容使用數位或符號來表示檔案許可權,舉個例子 /u+rw,這裡的 /u 表示使用者(所有者)許可權,rw 表示具有讀寫許可權,中間的 + 用來表示「具有」

還有其他幾個字母:/g,組(group)許可權;/o,(other)其他使用者許可權;/a,(all)所有使用者許可權。

讀寫可執行:r(read),w(write),x(execute)

- 表示沒有:比如 /u-rw,指使用者沒有讀寫許可權

  1. 搜尋當前目錄及其子目錄下所有具有讀寫許可權的檔案(目錄):
find /opt -perm /u+rw

  1. 搜尋當前目錄及其子目錄下其他使用者具有讀寫許可權的目錄:
find /opt -type d -perm /o+rw

grep

什麼是 grep 命令?

grep 命令是 global regular expression print 的縮寫,用於在檔案、多個檔案或輸入流中進行正則匹配,它會匹配我們在命令列中指定的「文字模式」(Pattern),並將結果輸出列印。

換句話說,它會按我們提供的文字模式去搜尋檔案的內容。

如何使用 grep 命令?

grep 命令的使用非常簡單,你只需在終端中輸入 grep,並指定要搜尋的模式和檔名。

基本語法:

grep [選項引數] 文字模式 檔名

舉例說明

現在我們在 opt/games/gta6 目錄下,有一個名為 readme.txt 的檔案,像搜尋裡面包含關鍵字 "VI" 的行,那麼可以使用以下命令:

grep "VI" readme.txt

這將在檔案中查詢包含 "VI" 的行,並將其列印輸出。

當然,文字模式可以不用加雙引號,也是可行的:

grep VI readme.txt

常用選項引數

  • -i:(ignore)忽略大小寫進行匹配。
  • -n:(number)顯示匹配行的行號。
  • -v:(reverse)反向匹配,列印不包含模式的行。
  • -r:(recursive)遞迴搜尋指定目錄及其子目錄下的檔案。

例子

  1. readme.txt 中搜尋 "vi",忽略大小寫:
grep -i "vi" readme.txt

  1. readme.txt 中搜尋 http ,顯示所在的行號:
grep -n http readme.txt

  1. show.txt 中進行反向匹配,列印不包含文字模式 「」 的行:
grep -v 我 show.txt

  1. 當前目錄及其子目錄中遞迴搜尋包含關鍵字 go 的行:

在標準輸入流中搜尋指定模式

Linux 中的標準輸入輸出、重定向、管道符-簡書

基本寫法:

command | grep pattern

這裡,command 是生成輸出的命令,pattern 是要搜尋的模式,| 是管道符,可以將兩個命令分隔開,|左邊命令的輸出就會作為 | 右邊命令的輸入

比如在讀取 show.txt 的時候搜尋 god23bin

cat show.txt | grep god23bin

這種用法,我一般是在大量紀錄檔輸出中想找到錯誤資訊的時候會用到:

tail -2000f project-test.log | grep -i error

總結

現在,通過兩分鐘的快速學習,相信你已經學費了 findgrep 命令的基本使用了!

find 主要用於搜尋檔案和目錄,而 grep 命令主要用於搜尋檔案的內容。當然,這裡實際上還只是冰山一角,剩下的交給你去探索吧!

如果你對其他 Linux 命令也感興趣,敬請期待我後續的文章。謝謝大家的閱讀!

最後的最後

希望各位螢幕前的靚仔靚女們給個三連!你輕輕地點了個贊,那將在我的心裡世界增添一顆明亮而耀眼的星!

咱們下期再見!