linux 命令與檔案的查詢

tthero00boo發表於2013-10-25

查命令: which ; type 

查檔案: whereis 與 locate 利用資料庫 ,find 掃描磁碟

which 

根據$PATH變數定義的目錄,來查詢可執行命令,並輸出完整路徑
選項或引數:
-a :將所有由 PATH 目錄中可以找到的命令均列出,而不止第一個被找到的命令名稱
但which無法查出bash內建命令如cd,這個可以通過 type cd(cd is a shell builtin)

type 

type命令用來顯示指定命令的型別。一個命令的型別可以是如下之一

  • alias 別名
  • keyword 關鍵字,Shell保留字
  • function 函式,Shell函式
  • builtin 內建命令,Shell內建命令
  • file 檔案,磁碟檔案,外部命令
  • unfound 沒有找到

它是Linux系統的一種自省機制,知道了是那種型別,我們就可以針對性的獲取幫助。比如內建命令可以用help命令來獲取幫助,外部命令用man或者info來獲取幫助。

常用引數

type命令的基本使用方式就是直接跟上命令名字。

type -a可以顯示所有可能的型別,比如有些命令如pwd是shell內建命令,也可以是外部命令。

type -p只返回外部命令的資訊,相當於which命令。

type -f只返回shell函式的資訊。

type -t 只返回命令的型別

whereis [-bmsu] 檔案或目錄名

選項與引數:
-b    :只找 binary 格式的檔案
-m    :只找在說明檔 manual 路徑下的檔案
-s    :只找 source 來原始檔
-u    :搜尋不在上述三個專案當中的其他特殊檔案

locate [-ir] 部分名稱

選項與引數:
-i  :忽略大小寫的差異;
-r  :後面可接正規表示法的顯示方式

whereis 和 locate 比較適用找一些固有的檔案

都是通過已建立的資料庫 /var/lib/mlocate/的資訊來進行查詢
並不是真正去掃描磁碟,所以速度很快,但查詢結果不一定準確
會發現可以找到已經刪除的檔案,或mv重新命名但查出的是原檔名,或找不到剛剛建立的檔案

因為mlocate,一般每天升級資料庫一次,可locate mlocate,發現/etc/cron.daily/mlocate.cron
當然也可手動升級updatedb,但是掃描磁碟很慢,建議慎重

updatedb:根據 /etc/updatedb.conf 的配置去搜尋系統硬碟內的檔名,並升級 /var/lib/mlocate 內的資料庫檔案;

find   

-name檔案
告訴find要找什麼檔案;要找的檔案包括在引號中,可以使用萬用字元(*和?)
-type x 
匹配所有型別為x的檔案。x是c(字元特殊),b(塊特殊),d(目錄),p(有名管道),l(符號連線),s(套接檔案)或f(一般檔案)
-user使用者號
匹配所有使用者序列號是前面所指定的使用者序列號的檔案,可以是數字型的值或使用者登入名。
-print 
顯示整個檔案路徑和名稱。一般來說,都要用-print,如果沒有這個引數,則find命令進行所要求的搜尋是沒有顯示結果的

find的使用例項:
  $ find . -name 'my*'
搜尋當前目錄(含子目錄,以下同)中,所有檔名以my開頭的檔案。
  $ find . -name 'my*' -ls
搜尋當前目錄中,所有檔名以my開頭的檔案,並顯示它們的詳細資訊。
  $ find . -type f -mmin -10
搜尋當前目錄中,所有過去10分鐘中更新過的普通檔案。如果不加-type f引數,則搜尋普通檔案+特殊檔案+目錄。

[acm][min/time]
a -access ;c -changed(status) ;m -modified
min 分鐘 ; time 天數

amin n 查詢n分鐘以前被訪問過的所有檔案.
atime n 查詢n天以前被訪問過的所有檔案.
cmin n 查詢n分鐘以前檔案狀態被修改過的所有檔案.
ctime n 查詢n天以前檔案狀態被修改過的所有檔案.
mmin n 查詢n分鐘以前檔案內容被修改過的所有檔案.
mtime n 查詢n天以前檔案內容被修改過的所有檔案.

find / -mtime 4 與 find / -mtime +/-4

               
   
  ---------------------------------------------&gt
   |     |     |     |     |     |     |     |
   7     6     5     4     3     2     1     now

[root@localhost eg]# find / -name 'add.c' -exec ls -l {} \;
-rw-r--r-- 1 root root 68 May 17 14:53 /root/Documents/eg/add.c

{}是代表find的結果
-exec 一直到 \; 是關鍵字,代表 find 額外動作的開始 (-exec) 到結束 (\;) ,在這中間的就是 find 命令內的額外動作
;因為可能有特殊意義,所以反斜槓\跳脫特殊字元

2.find xargs
$ find / -user oracle -mmin -2 -print 1>~/x3 2>/dev/null
$ find / -name 'inventory' -type d -print 1>~/find2.t 2>/dev/null

$ find . -mmin +720 -print| xargs rm -rf     #+720 720m之前, -720 表示720m以內...
嘛,要刪之前最好再看一下... 
$ find . -mmin +720 -print|ll

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28859270/viewspace-774995/,如需轉載,請註明出處,否則將追究法律責任。

相關文章