十、find命令;文件名後綴
格式:find [路徑] [參數]。
常用參數:
-atime +n/-n:表示訪問或執行時間大於或小於n天的文件。
-ctime +n/-n:表示寫入、更改iNode屬性(如更改所有者、權限或者鏈接)的時間大於或小於n天的文件。
-mtime +n/-n:表示寫入時間大於或小於n天的文件,該參數用得很多。
示例命令:
# find /tmp4_6/ -mtime -1
上例中,-mtime -1表示,mtime在1天之內的文件,單位是天。而-mtime +10表示mtime在10天以上的文件。還有用法:-mmin -10,表示mtime在10分鐘內的文件。有時候也可以不加+或-,比如-mtime 10,這表示正好為10天,此用法比較少。
atime(access time):是在讀取文件或者執行文件時更改的。
ctime(change time):是在寫入文件、更改所有者、權限或鏈接設置時隨iNode內容的更改而更改的。
mtime(modified time):是在寫入文件時隨文件內容的更改而更改的。
iNode(索引節點):用來存放檔案及目錄的基本信息,包含時間信息、文檔名、所有者以及所屬組等。是Unix中的一種數據結構,本質是結構體,在文件系統創建時生成,且個數有限。Linux下,可用df -i來查看各分區的iNode總數及使用情況。
因此,更改文件的內容即會更改mtime和ctime,但是文件的ctime可能會在mtime未發生任何變化時更改。例如,更改了文件的權限,但是文件內容無變化。
stat命令:查看文件的具體信息。
如何獲得文件atime、ctime和mtime?使用stat命令可列出這三個信息。示例:
# stat 123
文件:"123"
大小:28 塊:0 IO 塊:4096 目錄
設備:803h/2051d Inode:8389038 硬鏈接:3
權限:(2755/drwxr-sr-x) Uid:( 0/ root) Gid:( 1000/ user1)
環境:unconfined_u:object_r:admin_home_t:s0
最近訪問:2018-01-31 20:28:22.516934992 +0800 (atime)
最近更改:2018-01-31 20:28:12.092935176 +0800 (mtime)
最近改動:2018-01-31 20:28:12.092935176 +0800 (ctime)
創建時間:-
atime不一定在訪問文件之後被修改,因為在使用ext3文件系統時,如果mount使用noatime參數,那麽就不會更新atime的信息。總之,這三個time屬性值都放在了iNode中。若mtime、atime被修改,那麽iNode就一定會改,既然iNode改了,那ctime也跟著會改動。
-name filename:表示直接查找該文件名的文件,該選項比價常用,示例命令:
# find . -name test2 //.表示當前目錄,當前目錄在/tmp4_6下面
# find . -name "test*" //支持用*通配
-type filetype:表示通過文件類型查找文件。filetype包含了f、b、c、d、l、s等類型,示例命令:
# find . -type d
find -type [fbcdls]各類型都代表什麽意思?
d(directory):目錄
f:普通文件、二進制文件、文本文檔
l:軟鏈接文件
s:socket文件
c:字符串設備
b:塊設備
找文件的硬鏈接,先查看文件的iNode號,再命令:
# find / -inum inode號
在find的同時把文件列出來,示例命令格式:
# find /root/ -type f -mmin 120 -exec ls -l {} \;
{}表示find出來的文件列表,把文件列表裏的文件都ls -l出來。
# find /root/ -type f -mmin 150 -exec mv {} {} .bak \;
將150分鐘以內的文件都改名加一個.bak。
# find /root/ -type f -size -10k -exec ls -lh {} \;
將小於10k的文件都列出來,也可改為大於10k,單位也可改為M,必須帶單位。
-o:或者。
whereis命令:通過預先生成的一個文件列表庫查找與給出的文件名相關的文件,格式:whereis [-bms] [文件名稱],各選項含義如下:
-b:只查找二進制文件。
-m:只查找幫助文件(在man目錄下的文件)
-s:只查找源代碼文件。
locate命令:類似於whereis,也是通過查找預先生成的文件列表庫來告訴用戶要查找的文件在哪裏,後面直接跟文件名。若沒有這個命令,需安裝mlocate軟件包。
# yum install -y mlocate
初次運行這個命令會報錯,因為系統還沒有生成那個文件列表庫。可使用updatedb命令立即生成(或更新)這個庫。若你的服務器上正在執行重要的業務,那最好不要運行這個命令,因為一旦運行,服務器的壓力會增大。默認情況下,該數據庫每周更新一次。若使用locate命令搜索一個文件,而該文件正好是在兩次更新時間段內創建的,那肯定得不到結果。我們可以到文件/etc/updated.conf中配置這個數據庫生成(或更新)的規則。
locate所搜索到的文件列表,不管是目錄名還是文件名,只要包含我們要搜索的關鍵詞,都會列出來,所以locate不適合精準搜索。因此不常用。
二、文件名後綴
Linux系統中,文件的後綴名沒有具體意義,加或不加都無所謂。為了區分,習慣在定義文件名時加一個後綴名。
1.sh:shell腳本
2.tar.gz:壓縮包
my.cnf:配置文件
test.zip:壓縮文件
早期Unix系統文件名最多允許14個字符,新的Unix和Linux系統,文件名最長可達255個字符。
十、find命令;文件名後綴