鼠年大吉!
文章目錄
基本文法:find [搜尋範圍] [選項]
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___)
比如:在根目錄下查找大于 100M 的檔案
find / -size +204800
這裡 +n 表示大于,-n 表示小于,n 表示等于
1 資料塊 == 512 位元組 ==0.5KB,也就是1KB等于2資料塊
100MB == 102400KB==204800資料塊
- ①、在home目錄下查詢所屬組為 root 的檔案
find /home -group root
* ②、在home目錄下查詢所有者為 root 的檔案
find /home -user root
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
這裡有兩個參數:
- ①、-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
which指令用于查找并顯示給定指令的絕對路徑,環境變量PATH中儲存了查找指令時需要周遊的目錄。which指令會在環境變量$PATH設定的目錄裡查找符合條件的檔案。也就是說,使用which指令,就可以看到某個系統指令是否存在,以及執行的到底是哪一個位置的指令。
文法:which [選項] [參數]
- -n<檔案名長度>:制定檔案名長度,指定的長度必須大于或等于所有檔案中最長的檔案名;
- -p<檔案名長度>:與-n參數相同,但此處的<檔案名長度>包含了檔案的路徑;
- -w:指定輸出時欄位的寬度;
- -V:顯示版本資訊。
指令名:指令名清單。
範例:查找檔案、顯示指令路徑
which pwd
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