1. 程式人生 > 實用技巧 >linux檔案與目錄(四)

linux檔案與目錄(四)

檔案搜尋命令:find

命令名稱:find
命令所在路徑:/bin/find
執行許可權:所有使用者
語法:find [搜尋範圍][匹配條件]
功能描述:檔案搜尋
常用選項
-amin<分鐘>:查詢在指定時間曾被存取過的檔案或目錄,單位以分鐘計算;

-anewer<參考檔案或目錄>:查詢其存取時間較指定檔案或目錄的存取時間更接近現在的檔案或目錄;

-atime<24小時數>:查詢在指定時間曾被存取過的檔案或目錄,單位以24小時計算;

-cmin<分鐘>:查詢在指定時間之時被更改過的檔案或目錄;

-cnewer<參考檔案或目錄>查詢其更改時間較指定檔案或目錄的更改時間更接近現在的檔案或目錄;

-ctime<24小時數>:查詢在指定時間之時被更改的檔案或目錄,單位以24小時計算;

-daystart:從本日開始計算時間;

-depth:從指定目錄下最深層的子目錄開始查詢;

-expty:尋找檔案大小為0 Byte的檔案,或目錄下沒有任何子目錄或檔案的空目錄;

-exec<執行指令>:假設find指令的回傳值為True,就執行該指令;

-false:將find指令的回傳值皆設為False;

-fls<列表檔案>:此引數的效果和指定“-ls”引數類似,但會把結果儲存為指定的列表檔案;

-follow:排除符號連線;

-fprint<列表檔案>:此引數的效果和指定“-print”引數類似,但會把結果儲存成指定的列表檔案;

-fprint0<列表檔案>:此引數的效果和指定“-print0”引數類似,但會把結果儲存成指定的列表檔案;

-fprintf<列表檔案><輸出格式>:此引數的效果和指定“-printf”引數類似,但會把結果儲存成指定的列表檔案;

-fstype<檔案系統型別>:只尋找該檔案系統型別下的檔案或目錄;

-gid<群組識別碼>:查詢符合指定之群組識別碼的檔案或目錄;

-group<群組名稱>:查詢符合指定之群組名稱的檔案或目錄;

-help或——help:線上幫助;

-ilname<範本樣式>:此引數的效果和指定“-lname”引數類似,但忽略字元大小寫的差別;

-iname<範本樣式>:此引數的效果和指定“-name”引數類似,但忽略字元大小寫的差別;

-inum<inode編號>:查詢符合指定的inode編號的檔案或目錄;

-ipath<範本樣式>:此引數的效果和指定“-path”引數類似,但忽略字元大小寫的差別;

-iregex<範本樣式>:此引數的效果和指定“-regexe”引數類似,但忽略字元大小寫的差別;

-links<連線數目>:查詢符合指定的硬連線數目的檔案或目錄;

-iname<範本樣式>:指定字串作為尋找符號連線的範本樣式;

-ls:假設find指令的回傳值為Ture,就將檔案或目錄名稱列出到標準輸出;

-maxdepth<目錄層級>:設定最大目錄層級;

-mindepth<目錄層級>:設定最小目錄層級;

-mmin<分鐘>:查詢在指定時間曾被更改過的檔案或目錄,單位以分鐘計算;

-mount:此引數的效果和指定“-xdev”相同;

-mtime<24小時數>:查詢在指定時間曾被更改過的檔案或目錄,單位以24小時計算;

-name<範本樣式>:指定字串作為尋找檔案或目錄的範本樣式;

-newer<參考檔案或目錄>:查詢其更改時間較指定檔案或目錄的更改時間更接近現在的檔案或目錄;

-nogroup:找出不屬於本地主機群組識別碼的檔案或目錄;

-noleaf:不去考慮目錄至少需擁有兩個硬連線存在;

-nouser:找出不屬於本地主機使用者識別碼的檔案或目錄;

-ok<執行指令>:此引數的效果和指定“-exec”類似,但在執行指令之前會先詢問使用者,若回答“y”或“Y”,則放棄執行命令;

-path<範本樣式>:指定字串作為尋找目錄的範本樣式;

-perm<許可權數值>:查詢符合指定的許可權數值的檔案或目錄;

-print:假設find指令的回傳值為Ture,就將檔案或目錄名稱列出到標準輸出。格式為每列一個名稱,每個名稱前皆有“./”字串;

-print0:假設find指令的回傳值為Ture,就將檔案或目錄名稱列出到標準輸出。格式為全部的名稱皆在同一行;

-printf<輸出格式>:假設find指令的回傳值為Ture,就將檔案或目錄名稱列出到標準輸出。格式可以自行指定;

-prune:不尋找字串作為尋找檔案或目錄的範本樣式;

-regex<範本樣式>:指定字串作為尋找檔案或目錄的範本樣式;

-size<檔案大小>:查詢符合指定的檔案大小的檔案;

-true:將find指令的回傳值皆設為True;

-typ<檔案型別>:只尋找符合指定的檔案型別的檔案;

-uid<使用者識別碼>:查詢符合指定的使用者識別碼的檔案或目錄;

-used<日數>:查詢檔案或目錄被更改之後在指定時間曾被存取過的檔案或目錄,單位以日計算;

-user<擁有者名稱>:查詢符和指定的擁有者名稱的檔案或目錄;

-version或——version:顯示版本資訊;

-xdev:將範圍侷限在先行的檔案系統中;

-xtype<檔案型別>:此引數的效果和指定“-type”引數類似,差別在於它針對符號連線檢查

按檔名查詢常用操作
# find /etc -name init #在etc目錄下查詢init的檔案
/etc/sysconfig/init
# find /etc -name *init* # *號表示萬用字元只要檔名包含init都匹配出來
# find /etc -name init* #以所有以init開頭全部匹配出來
# find /etc -name init??? #匹配init後面三個字元不清楚一個問號表示一個字元
# find /etc -iname init #不區分大小寫
# find /etc -name init* -type f #以etc目錄下init開頭的檔案全部列出來
# find /etc -name init* -type d #以etc目錄下init開頭的目錄全部列出來
# find /etc -name init* -type l #以etc目錄下init開頭的軟連線全部列出來
-inum根據inode查詢
# touch "11 22" #建立一個檔案
# rm 11 22 #刪除這時候是無法刪除的
rm: 無法刪除"11": 沒有那個檔案或目錄
rm: 無法刪除"22": 沒有那個檔案或目錄
# ls -i #這時候列出inode
37676584 11 22 33582978 anaconda-ks.cfg
# find . -inum 37676584 -exec rm {} \; #用find來查詢(.是在當前目錄查詢)查詢然後刪除

注:千萬不要在伺服器高峰期用find查詢,查詢範圍越小越好,能不再跟分割槽就不再根分割槽查詢,搜尋條件越精準越好。

根據檔案大小查詢
+n大於 -n小於 n等於

# find / -size +100M #在根搜尋所有大於100M的檔案

要查詢大於50M小於20M 這兩個條件必須同時滿足
-a 兩個條件同時滿足
-o 兩個條件滿足任意一個即可
# find /etc -size +5M -a -size -20M #在etc目錄下查詢大於5M小於20M的檔案

# find /etc -size +5M -0 -size -20M #在etc目錄下查詢大於5M或者小於20M的檔案
根據所有者來查詢
# find / -user php-fpm #根據所有者查詢

# find / -group php-fpm #根據所屬組查詢
根據時間屬性查詢
-amin 訪問時間 access  訪問時間有cat tail less等等
-cmin 檔案屬性 change 檔案的屬性改了有chmod
-mmin 檔案內容 modify 檔案裡面的內容被改了

# find /etc -amin -30 #在etc目錄下30分鐘以內訪問檔案有哪些

# find /etc -cmin -30 #在etc目錄下30分鐘以內被改的檔案屬性有哪些

# find /etc -mmin -30 #在etc目錄下30分鐘以內被修改檔案內容有哪些
在etc下查詢inittab檔案並顯示詳細資訊
# find /etc -name inittab -exec ls -l {} \;  #查詢命令顯示詳細資訊出來
-rw-r--r--. 1 root root 511 10月 31 2018 /etc/inittab

# find /etc -name init* -type f -exec ls -l {} \;
-rw-r--r--. 1 root root 511 10月 31 2018 /etc/inittab
-rw-r--r--. 1 root root 798 10月 31 2018 /etc/sysconfig/init
-rwxr-xr-x. 1 root root 5419 8月  24 2018 /etc/sysconfig/network-scripts/init.ipv6-global
-rw-r--r--. 1 root root 30 11月  3 2018 /etc/selinux/targeted/contexts/initrc_context

# find /etc -name init* -type f -ok ls -l {} \; #一個個顯示
< ls ... /etc/inittab > ? y #y檢視詳細
-rw-r--r--. 1 root root 511 10月 31 2018 /etc/inittab
< ls ... /etc/sysconfig/init > ? n #n不看
< ls ... /etc/sysconfig/network-scripts/init.ipv6-global > ? y #看
-rwxr-xr-x. 1 root root 5419 8月  24 2018 /etc/sysconfig/network-scripts/init.ipv6-global
< ls ... /etc/selinux/targeted/contexts/initrc_context > ? n #不看

檔名字尾

bz2 ------bzip2的壓縮檔案

.gz ------gzip的壓縮檔案

.tar ------tar打包檔案(是包檔案不是壓縮檔案)

.tbz------tar打包並用bzip壓縮檔案

.tgz-----tar打包並用gzip壓縮的檔案

.html/.htm-----HTML檔案

.jpg-----JPEG圖象檔案

.png-----PNG圖象檔案

.txt------純文字檔案

.conf-------配置檔案

.lock-------LOCK檔案(用來判斷一個檔案或裝置是否被使用)

.rpm------REDHATPackage.Manager檔案(套件包或軟體包)

.c -------C源程式程式碼檔案

.cpp------C++源程式程式碼檔案

.h -------C或C++程式的標頭檔案

.o------程式目標檔案

.pl------perl指令碼檔案

.so-----類庫檔案

Linux和windows互傳檔案

xshell下使用,putty不可用
安裝外掛
# yum intsall -y lrzsz
Windows向linux傳檔案
#rz
linux向Windows傳檔案
# sz 1.txt