詳解Linux指令與檔案的搜尋

程式猿就是我發表於2021-04-28

 

我們在管理Linux伺服器時通常會進行搜尋檔案及目錄操作,下面我們就開始瞭解一下linux目錄結構的相關知識。

 

博主再奉上一套零基礎入門Linux視訊,帶你從入門到精通

 

https://www.bilibili.com/video/BV1Li4y1V7pG

 

 

 

指令檔名的搜尋

1. which(尋找可執行檔案)

命令:which 【-a】 command

-a : 將所有有PATH目錄中可以找到的指令均列出

例1: 搜尋ifconfig這個指令的完整檔名

例2:找出which的檔名

竟然會有兩個 which ,其中一個是 alias 這玩意兒呢!那是啥?

那就是所謂的“命令別名”,意思是輸入 which 會等於後面接的那串指令啦!

例3:找出history這個指令的完整檔名

在上圖我們發現history這個指令招不到,我們的root命令是可以執行history這個命令的

注意點:

which這個指令是找的PATH這個環境變數所規範的路徑,但是有的指令是是bash內建的指令,所有which搜尋不到,那麼要搜尋bash的指令就需要使用type

 

檔案檔名的搜尋

在linux下有三個指令來搜尋檔名

  • find
  • whereis
  • locate

1. whereis(只能在特定目錄尋找檔名)

whereis 主要是針對 /bin /sbin 下面的可執行檔案, 以及 /usr/share/man 下面的 man page 檔案

引數

  • -l :可以列出 whereis 會去查詢的幾個主要目錄而已
  • -b :只找 binary 格式的檔案
  • -m :只找在說明文件 manual 路徑下的檔案
  • -s :只找 source 來原始檔
  • -u :搜尋不在上述三個專案當中的其他特殊檔案

whereis這個命令可以搜尋到的檔案可以使用whereis -l來檢視

這個圖沒有擷取完,可以自己去試著檢視

 

 

 

2. localte

  • -i :忽略大小寫的差異;
  • -c :不輸出檔名,僅計算找到的檔案數量
  • -l :僅輸出幾行的意思,例如輸出五行則是 -l 5
  • -S :輸出 locate 所使用的資料庫檔案的相關資訊,包括該資料庫紀錄的檔案/目錄數量等
  • -r :後面可接正規表示式的顯示方式

例1:找出passwd的檔案,只列出5個

例2:尋找我們自己建立的檔案

確實很方便的

 

3. locate的尋找速度

由於locate指令是直接在已建立的資料庫/var/lib/mlocate裡邊的資料,所以是很快的。

關於這個資料庫是每天都會更新一次的

 

4. 關於locate資料庫更新

這個資料庫是每天都會更新一次的,但是有個問題就是假如你新建立了一個檔案,但是沒有達到這個更新時間,那麼就查不到的,下面我們來試驗一下

上圖會發現是搜尋不到的。

那麼我們就到了我們的updatedb這個指令上場了,這個時候就可以查到了

 

5. find指令時間相關的查詢

find指令的用法就非常多了下來我們一點一點的解析

與時間相關的引數

  • -mtime n :n 為數字,意義為在 n 天之前的“一天之內”被更動過內容的檔案;
  • -mtime +n :列出在 n 天之前(不含 n 天本身)被更動過內容的檔案檔名;
  • -mtime -n :列出在 n 天之內(含 n 天本身)被更動過內容的檔案檔名。
  • -newer file :file 為一個存在的檔案,列出比 file 還要新的檔案檔名

例1:找出系統24小時內有過改動的檔案

find / -mtime 0

  • +4代表大於等於5天前的檔名:ex> find /var -mtime +4
  • -4代表小於等於4天內的檔案檔名:ex> find /var -mtime -4
  • 4則是代表4-5那一天的檔案檔名:ex> find /var -mtime 4

 

6. find指令使用者或者群組檔案的查詢

  • -uid n :n 為數字,這個數字是使用者的帳號 ID,亦即 UID ,這個 UID 是記錄在/etc/passwd 裡面與帳號名稱對應的數字
  • -gid n :n 為數字,這個數字是群組名稱的 ID,亦即 GID,這個 GID 記錄在/etc/group,
  • -user name :name 為使用者帳號名稱喔!例如 dmtsai
  • -group name:name 為群組名稱喔,例如 users ;
  • -nouser :尋找檔案的擁有者不存在 /etc/passwd 的人!
  • -nogroup :尋找檔案的擁有群組不存在於 /etc/group 的檔案!當你自行安裝軟體時,很可能該軟體的屬性當中並沒有檔案擁有者,

這是可能的!在這個時候,就可以使用 -nouser 與 -nogroup 搜尋。

例1:搜尋/learn下面屬於kaka使用者的檔案

例2:搜尋屬於kaka群組的檔案

例3:搜尋不屬於任何人的檔案

find / -nouser

 

7. 搜尋檔名稱跟許可權的檔案

  • -name filename:搜尋檔名稱為 filename 的檔案;
  • -size [±]SIZE:搜尋比 SIZE 還要大(+)或小(-)的檔案。這個 SIZE 的規格有:c: 代表 Byte, k: 代表 1024Bytes。所以,要找比 50KB還要大的檔案,就是“ -size +50k ”
  • -type TYPE :搜尋檔案的型別為 TYPE 的,型別主要有:一般正規檔案 (f), 裝置檔案 (b, c),目錄 (d), 連結檔案 (l), socket (s), 及 FIFO (p) 等屬性。
  • -perm mode :搜尋檔案許可權“剛好等於” mode 的檔案,這個 mode 為類似 chmod的屬性值,舉例來說, -rwsr-xr-x 的屬性為 4755 !
  • -perm -mode :搜尋檔案許可權“必須要全部囊括 mode 的許可權”的檔案,舉例來說,我們要搜尋 -rwxr–r-- ,亦即 0744 的檔案,使用 -perm -0744,當一個檔案的許可權為 -rwsr-xr-x ,亦即 4755 時,也會被列出來,因為 -rwsr-xr-x 的屬性已經囊括了 -rwxr–r-- 的屬性了。
  • -perm /mode :搜尋檔案許可權“包含任一 mode 的許可權”的檔案,舉例來說,我們搜尋-rwxr-xr-x ,亦即 -perm /755 時,但一個檔案屬性為 -rw-------也會被列出來,因為他有 -rw… 的屬性存在!

例1:找出檔名為kaka.php的檔案

 

例2:找出檔名包含kaka的檔案

 

例3:找出learn下的目錄

 

 關於perm特殊許可權的搜尋就不寫了,沒有多大的意義

————————————————

相關文章