天天看點

Linux入坑筆記(七、Linux 檔案搜尋)findlocatewhichgrep

鼠年大吉!

Linux入坑筆記(七、Linux 檔案搜尋)findlocatewhichgrep

文章目錄

基本文法:find [搜尋範圍] [選項]

Linux入坑筆記(七、Linux 檔案搜尋)findlocatewhichgrep

find指令是在Linux系統中用來進行檔案搜尋用的最多的指令,功能特别強大。但是盡量少用find指令去執行搜尋任務,就算要搜尋也應該盡量的縮小範圍,也不要在伺服器使用高峰期進行檔案搜尋,因為搜尋也是很占系統資源的。這就在進行Linux檔案整理的時候,盡量規範化,什麼檔案放在什麼目錄下都要有比較好的約定。

find 【搜尋目錄】【-name或者-iname】【搜尋字元】:-name和-iname的差別一個區分大小寫,一個不區分大小寫

  • ①、find /etc -name init (精準搜尋,名字必須為 init 才能搜尋的到)
  • ②、find /etc -iname init (精準搜尋,名字必須為 init或者有字母大寫也能搜尋的到)
  • ③、find /etc -name *init (模糊搜尋,以 init 結尾的檔案或目錄名)
  • ④、find /etc -name init??? (模糊搜尋,? 表示單個字元,即搜尋到 init___)
Linux入坑筆記(七、Linux 檔案搜尋)findlocatewhichgrep

比如:在根目錄下查找大于 100M 的檔案

find / -size +204800      
Linux入坑筆記(七、Linux 檔案搜尋)findlocatewhichgrep

這裡 +n 表示大于,-n 表示小于,n 表示等于

 1 資料塊 == 512 位元組 ==0.5KB,也就是1KB等于2資料塊

  100MB == 102400KB==204800資料塊

  • ①、在home目錄下查詢所屬組為 root 的檔案
find /home -group root      

*  ②、在home目錄下查詢所有者為 root 的檔案

find /home -user root      
Linux入坑筆記(七、Linux 檔案搜尋)findlocatewhichgrep

find 【路徑】【選項】【時間】

選項有下面三種:

  • -amin 通路時間
  • -cmin 檔案屬性被更改
  • -mmin 檔案内容被修改

時間:+n,-n,n分别表示超過n分鐘,n分鐘以内和n分鐘

範例:在 /etc 目錄下查找5 分鐘内被修改過屬性的檔案和目錄

find /etc -cmin -5      

  • -type 根據檔案類型查找:f表示檔案,d表示目錄,l表示軟連結

範例:查找 /home 目錄下檔案類型是目錄的

find /home -type d      
  • -inum 根據i節點查找

範例:查找 /tmp 目錄下i節點為400342的檔案或目錄

find /tmp -inum 400342      
Linux入坑筆記(七、Linux 檔案搜尋)findlocatewhichgrep

這裡有兩個參數:

  • ①、-a 表示兩個條件同時滿足(and)
  • ②、-o 表示兩個條件滿足任意一個即可(or)

範例:查找/etc目錄下大于80MB同時小于100MB的檔案

 find /etc -size +163840 -a -size -204800      

locate指令其實是find -name的另一種寫法,但是要比後者快得多,原因在于它不搜尋具體目錄,而是搜尋一個資料庫/var/lib/locatedb,這個資料庫中含有本地所有檔案資訊。Linux系統自動建立這個資料庫,并且每天自動更新一次,是以使用locate指令查不到最新變動過的檔案。為了避免這種情況,可以在使用locate之前,先使用updatedb指令,手動更新資料庫。

文法:locate/slocate [選項] [參數]

選項:

  • -d<目錄>或–database=<目錄>:指定資料庫所在的目錄;
  • -u:更新slocate資料庫;
  • –help:顯示幫助;
  • –version:顯示版本資訊

參數:

查找字元串:要查找的檔案名中含有的字元串。

範例:搜尋etc目錄下所有以sh開頭的檔案

locate /etc/sh      
Linux入坑筆記(七、Linux 檔案搜尋)findlocatewhichgrep

which指令用于查找并顯示給定指令的絕對路徑,環境變量PATH中儲存了查找指令時需要周遊的目錄。which指令會在環境變量$PATH設定的目錄裡查找符合條件的檔案。也就是說,使用which指令,就可以看到某個系統指令是否存在,以及執行的到底是哪一個位置的指令。

文法:which [選項] [參數]

  • -n<檔案名長度>:制定檔案名長度,指定的長度必須大于或等于所有檔案中最長的檔案名;
  • -p<檔案名長度>:與-n參數相同,但此處的<檔案名長度>包含了檔案的路徑;
  • -w:指定輸出時欄位的寬度;
  • -V:顯示版本資訊。

指令名:指令名清單。

範例:查找檔案、顯示指令路徑

which pwd      
Linux入坑筆記(七、Linux 檔案搜尋)findlocatewhichgrep

grep(global search regular expression(RE) and print out the line,全面搜尋正規表達式并把行列印出來)是一種強大的文本搜尋工具,它能使用正規表達式搜尋文本,并把比對的行列印出來。

  • -a 不要忽略二進制資料。
  • -A<顯示列數> 除了顯示符合範本樣式的那一行之外,并顯示該行之後的内容。
  • -b 在顯示符合範本樣式的那一行之外,并顯示該行之前的内容。
  • -c 計算符合範本樣式的列數。
  • -C<顯示列數>或-<顯示列數> 除了顯示符合範本樣式的那一列之外,并顯示該列之前後的内容。
  • -d<進行動作> 當指定要查找的是目錄而非檔案時,必須使用這項參數,否則grep指令将回報資訊并停止動作。
  • -e<範本樣式> 指定字元串作為查找檔案内容的範本樣式。
  • -E 将範本樣式為延伸的普通表示法來使用,意味着使用能使用擴充正規表達式。
  • -f<範本檔案> 指定範本檔案,其内容有一個或多個範本樣式,讓grep查找符合範本條件的檔案内容,格式為每一列的範本樣式。
  • -F 将範本樣式視為固定字元串的清單。
  • -G 将範本樣式視為普通的表示法來使用。
  • -h 在顯示符合範本樣式的那一列之前,不标示該列所屬的檔案名稱。
  • -H 在顯示符合範本樣式的那一列之前,标示該列的檔案名稱。
  • -i 忽略字元大小寫的差别。
  • -l 列出檔案内容符合指定的範本樣式的檔案名稱。
  • -L 列出檔案内容不符合指定的範本樣式的檔案名稱。
  • -n 在顯示符合範本樣式的那一列之前,标示出該列的編号。
  • -q 不顯示任何資訊。
  • -R/-r 此參數的效果和指定“-d recurse”參數相同。
  • -s 不顯示錯誤資訊。
  • -v 反轉查找。
  • -w 隻顯示全字元合的列。
  • -x 隻顯示全列符合的列。
  • -y 此參數效果跟“-i”相同。
  • -o 隻輸出檔案中比對到的部分。

範例:

在目前目錄中,查找字尾有 file 字樣的檔案中包含 test 字元串的檔案,并列印出該字元串的行:

grep test *file       

查找指定目錄/etc/acpi 及其子目錄(如果存在子目錄的話)下所有檔案中包含字元串"update"的檔案,并列印出該字元串所在行的内容:

grep -r update /etc/acpi       
Linux入坑筆記(七、Linux 檔案搜尋)findlocatewhichgrep