1. 程式人生 > >Linux時間引數與find命令

Linux時間引數與find命令

1.Linux時間引數

LInux下的每個檔案都會記錄著許多的時間引數,其中有三個主要的變動時間,分別是mtime,ctime,atime。那麼這三個時間引數又代表著什麼樣的意義呢?怎麼可以看得到它們?下面就來介紹一下。

首先我們可以用一條命令來得到一個檔案的某些引數:


我們對當前資料夾下的一個clean檔案執行了stat命令,用來檢視這個檔案的一些資訊。可以看到下面列出來的Access,Modify,Change這三行就是我們的三個時間了,分別為atime,mtime和ctime。

modification time (mtime):
該檔案的內容資料變更時,就會更新這個時間!內容資料指的是檔案的內容,而不是檔案
屬性或許可權喔!

status time (ctime):
該檔案的狀態改變時,就會更新這個時間,舉例來說,像是許可權與屬性被更改
了,都會更新這個時間啊。

access time (atime):
當該檔案的內容被取用時,就會更新這個讀取時間 (access)。舉例來說,我們使用 cat 去讀
取 /etc/man.config , 就會更新該檔案的atime 了。

然後我們再來對剛剛那個檔案ls一下:


可以看到,在預設的情況下,ls提示的資訊中的時間其實就是mtime啦!也就這這個檔案上次被更動的時間。

檔案的時間是很重要的引數,因為如果檔案的時間有錯誤的話,可能會造成程式不能正常工作哦!比如編譯檔案make命令的執行就與具體檔案的時間引數有關哦。更具體的資訊可以自行去檢視make命令的相關知識。總之這裡你需要知道的是時間引數很重要,不能出錯。

比如我們萬一發現了一個來自未來的檔案,那麼該如何讓這個檔案的時間變為現在呢?那就是用touch命令了:


(ps:一個檔案會是來自未來嗎?會!比如因為某些錯誤的設定,你的系統時間快了一些,而在此期間你建立了一些檔案後,又將系統時間改為了正確的時間,那麼這些檔案不就是來自未來了嗎?)

最後這裡要說的是,我們平常用的比較多的時間也就是這個mtime了,因為我們關心的常常是這個檔案是什麼時候被改動的。

2.find命令

Linux下有一條相當優秀的查詢命令find。但是不太常用,因為它有兩個缺點,一速度慢,二費硬碟。通常情況下,我們都是先使用whereis

或者locate來檢查,如果真的找不到了,才用find來查詢。因為whereis和locate是利用資料庫來搜尋資料,而find卻是實打實的搜尋硬碟了。但這也成為了它最大的優點,只要有,沒有它找不到的(前提是擁有相應的許可權)!下面只講一下find的用法。

Linux下find命令在目錄結構中搜索檔案,並執行指定的操作。Linux下find命令提供了相當多的查詢條件,功能很強大大。由於find具有強大的功能,所以它的選項也很多,其中大部分選項都值得我們花時間來了解一一下。即使系統中含有網路文檔案系統( NFS),find命令在該文檔案系統中同樣有效,只你具有相應的許可權。 在執行一個非常消耗資源的find命令時,很多人都傾向於把它放在後臺執行,因為遍歷一個大的檔案系統可能會花費很長的時間(這裡是指30G位元組以上的檔案系統)。

1.命令的格式

find pathname -options [-print -exec -ok ...]

2.命令功能

用於在檔案樹種查詢檔案,並作出相應的處理(可能訪問磁碟)

3.命令引數

pathname:find命令所查詢的目錄路徑。例如用 . 來表示當前目錄,用/來表示根目錄等等。


執行這條命令之後,find就會搜尋到當前目錄下與clean關鍵字有相關的檔案。

-print:find命令將匹配的檔案輸出到標準輸出。

當然預設的輸出也是標準輸出了。

-exec:find命令對匹配的檔案執行該引數所給出的shell命令。

上面的例子中,find命令匹配到了當前目錄下的所有普通檔案,並在-exec選項中使用ls -l命令將它們列出。

-ok: 和-exec的作用相同,只不過以一種更為安全的模式來執行該引數所給出的shell命令,在在執行每一個命令之前,都會給出提示,讓使用者來確定是否執行。

4.命令選項:

-name : 按照檔名查詢檔案。

-perm :按照檔案許可權來查詢檔案。

-prune : 使用這一選項可以使find不在當前指定的目錄中查詢,如果同時使用-depth選項,那麼-prune將被find命令忽略(-depth就在下邊講到)。

-user : 按照檔案屬主來查詢檔案。

-group :按照檔案所屬的組來查詢檔案。

-mtime -n +n :按照檔案的更改時間來查詢檔案,-n表示檔案更改時間距現在n天以內,+n表示檔案更改時間距現在n天以前。find命令還有-atime和-ctime選項,但它們都和-mtime 選項用法相同。

-nogroup :查詢無有效所屬組的檔案,即該檔案所屬的組在/etc/groups中不存在。

-nouser :查詢無有效屬主的檔案,即該檔案的屬主在/etc/passwd中不存在。

-newer file1      !file2 :查詢更改時間比檔案file1新但比檔案file2舊的檔案。

-type :查詢某一型別的檔案,諸如:

b - 塊裝置檔案。

d - 目錄。

c - 字元裝置檔案。

p - 管道檔案。

l - 符號連結檔案。

f - 普通檔案

-size n :[c]  查詢檔案長度為n塊的檔案,帶有c時表示檔案長度以位元組計。

-depth :在查詢檔案時,首先查詢當前目錄中的檔案,然後再在其子目錄中查詢。

-fstype :查詢位於某一型別檔案系統中的檔案,這些檔案系統型別通常可以在配置檔案/etc/fstab中找到,該配置檔案中包含了本系統中有關檔案系統的資訊。

-mount :在查詢檔案時不跨越檔案系統mount點。

-follow :如果find命令遇到符號連結檔案,就跟蹤至連結所指向的檔案。

-cpio :對匹配的檔案使用cpio命令,將這些檔案備份到磁帶裝置中。

另外還有幾個小例子

1. -按時間來查詢檔案,-n指n天以內,+n指n天以前:在/logs目錄中查詢更改時間在5天以前的檔案並刪除它們:

2. Linux用find命令查詢檔案大小為XX的檔案的辦法

例如:一個檔案4096個位元組,可以這樣:

即查詢大於4095位元組小於4097位元組的檔案。其中的c也可以換位k,代表kB:

代表查詢當前目錄下大於0k小於2k的檔案。