1. 程式人生 > >LINUX學習—檔案系統及管理類命令

LINUX學習—檔案系統及管理類命令

Windows: PE
Linux: ELF
檔案系統:
rootfs:根檔案系統

FHS:規定Linux應該建立哪些目錄和檔案
ls / 可檢視根目錄下一級子目錄, 也可以ls /目錄名:可以檢視該目錄下一級子目錄
/boot: 系統啟動相關的檔案, 如核心、initrd,以及grub (bootloader)
/dev: 裝置檔案
裝置檔案:
塊裝置:隨機訪問,資料塊
字元裝置:線性訪問,按字元為單位
特殊檔案沒有大小,只有兩個裝置號(主裝置號major和次裝置號minor)
/etc: 配置檔案
/home:使用者家目錄,每個使用者的家目錄預設為/home/USERNAME
/root: 管理員的家目錄;
/lib: 庫檔案及核心模組檔案
/lib/modules: 核心模組檔案
靜態庫: .a
動態庫:.so (share object)
/media: 掛載點目錄,通常用於掛載移動裝置
/mnt: 掛載點目錄,額外的臨時檔案系統
/misc: 雜項
/opt:可選目錄,早期用於安裝第三方程式的安裝目錄,現在都放在/usr/local
/proc:偽檔案系統,啟動前是空的,但啟動后里面會有很多核心對映的檔案
/sys:偽檔案系統,跟硬體裝置相關的屬性對映檔案,關機後該目錄也是空的
/tmp:臨時檔案系統,每個月如果沒訪問 後會自動格式化,每個使用者都有存放檔案許可權,但每個人只能刪除自己檔案 ;
/var:可變化的檔案
/bin:可執行檔案,使用者命令
/sbin:可執行檔案,管理命令
/usr:全域性共享只讀檔案universal, shared, read-only
/usr/bin
/usr/sbin
/usr/lib
/usr/local:
/usr/local/bin
/usr/local/sbin
/usr/local/lib

命名規則:
1:嚴格區分大小寫;
2:長度不能超過255個字元;
3:不能使用/當檔名(路徑中有/,會導致系統讀取困難:),其他任何字元都可以用

相對路徑:
絕對路徑:

hwclock

硬體時鐘訪問工具,可以顯示當前時間、設定硬體時鐘的時間和設定硬體時鐘為系統時間,也可設定系統時間為硬體時鐘的時間。

獲得命令的使用幫助:
內部命令():  
    help COMMAND
外部命令:
    COMMAND--help

命令手冊:manual (幾乎所有命令都有手冊)
man COMMAND

whatis COMMAND :檢視命令在第幾章節
如果命令有多個章節,可以用man num COMMAND檢視

分章節:(共8章節)
1:使用者命令 (/bin, /usr/bin, /usr/local/bin)(普通使用者可以使用)
2:系統呼叫
3:庫使用者
4:特殊檔案(裝置檔案)
5:檔案格式(配置檔案的語法)
6:遊戲
7:雜項:Miscellaneous
8:管理命令(/sbin, /usr/bin, usr/local/sbin) (只有管理員才可以使用如chown)

[ ]:表示可選擇的選項或引數,可要可不要;
<>:表示必須選擇的選項或引數;
…:表示可以出現多次
|:表示多選1
{ }:分組,沒有特殊意義;

官方線上文件:apache,hadoop
cal: calendar

MAN手冊簡要說明:
NAME:命令名稱及功能簡要說明;
SYNOPSIS:用法說明,包括可用的選項;
DESCRIPTION:命令功能的詳盡說明,可能包括每一個選項的意義;
OPTIONS: 說明每一個選項的意義;
FILES:此命令相關的配置檔案;  
BUGS:報告bug
EXAMPLES:使用示列
SEE ALSO:另外參照

翻屏:
向後翻一屏:SPACE
向前翻一屏:B
向下翻一行:ENTER
向上翻一行:K
查詢:
/KEYWORD: 向後查詢
n:下一個
N:前一個
?KEYWORD: 向前查詢
n:下一個
N:前一個
q: 退出

如何求助不懂的命令或軟體:
info COMMAND (用的不多,man命令補充);
文件:/usr/share/doc(每個軟體或命令都會有一個幫助文件,存放在該目錄下)
google

cal:calendar
FAQ:frequently ask question
type命令
硬體時鐘
系統時鐘

檔案管理命令

ls
ls命令用來顯示目標列表,在linux中是使用率較高的命令。ls命令的輸出資訊可以進行彩色加亮顯示,以分割槽不同型別的檔案。

    -d:僅顯示目錄名,而不顯示目錄下的內容列表。顯示符號連結檔案本身,而不顯示其所指向的目錄列表;  
    -i:顯示檔案索引節點號(inode)。一個索引節點代表一個檔案;  
    -a:顯示所有檔案及目錄(ls內定將檔案名或目錄名稱為“.”的視為影藏,不會列出);
    -A:顯示除影藏檔案“.”和“..”以外的所有檔案列表;  
    -C:多列顯示輸出結果。這是預設選項;  
    -l:與“-C”選項功能相反,所有輸出資訊用單列格式輸出,不輸出為多列; 

cd
cd命令用來切換工作目錄至dirname。其中dirname表示法為絕對路徑或相對路徑。若目錄名稱省略,則變換至使用者的home directory(也就是剛login時所在的目錄)。另外,~也表示為home directory的意思, .則表示當前目錄, ..表示目前目錄位置的上一層目錄。
- cd 進入使用者主目錄
- cd ~ 進入使用者主目錄
- cd - 返回進入此目錄之前所在目錄

type:
type命令用來顯示指定命令的型別,判斷給出的指令是內部指令還是外部指令。

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

date: 時間管理
顯示系統時間,也可以用來修改時間

%H 小時,24小時制(00~23)
%I 小時,12小時制(01~12)
%k 小時,24小時制(0~23)
%l 小時,12小時制(1~12)
%M 分鐘(00~59)
%p 顯示出AM或PM
%r 顯示時間,12小時制(hh:mm:ss %p)
%s 從1970年1月1日00:00:00到目前經歷的秒數
%S 顯示秒(00~59)
%T 顯示時間,24小時制(hh:mm:ss)
%X 顯示時間的格式(%H:%M:%S)
%Z 顯示時區,日期域(CST)
%a 星期的簡稱(Sun~Sat)
%A 星期的全稱(Sunday~Saturday)
%h,%b 月的簡稱(Jan~Dec)
%B 月的全稱(January~December)
%c 日期和時間(Tue Nov 20 14:12:58 2012)
%d 一個月的第幾天(01~31)
%x,%D 日期(mm/dd/yy)
%j 一年的第幾天(001~366)
%m 月份(01~12)
%w 一個星期的第幾天(0代表星期天)
%W 一年的第幾個星期(00~53,星期一為第一天)
%y 年的最後兩個數字(1999則是99)
%Y 顯示完整的年份
%n 表示換行

date練習:
使用date單獨獲取系統當前的年份、月份、日、小時、分鐘、秒
年:date +%y或date +%Y 或date “this year is %y”
月:date +%m或date +%B|b|h
日:date +%d
小時:date +%H|I|k|l
分鐘:date +%M
秒:date +%S
date +%F==date +%Y-%m-%d(年月日如2018-08-15)
date +%T==date +%H:%M:%S(小時:分鐘:秒如15:27:01)
date +%R==date +%H:%M

pwd
pwd命令以絕對路徑的方式顯示使用者當前工作目錄。命令將當前目錄的全路徑名稱(從根目錄)寫入標準輸出。全部目錄使用/分隔。第一個/表示根目錄,最後一個為當前目錄。執行pwd命令可立刻得知目前所在目錄的絕對路徑。

mkdir
mkdir命令用來建立空目錄

    -p或--parents:遞迴建立目錄  
    -v或--verbose:顯示命令的詳細執行過程  
命令列展開(花括號展開):mkdir -pv /mnt/test/x/m /mnt/test/x/y==mkdir -pv  /mnt/test /{x/m,y}  
    mkdir -pv /mnt/test/{a, d}_{b,c}即可在test命令下建立a_b, a_c, b_d, c_d目錄,花括號展開活學活用    

tree
tree命令以樹狀圖列出目錄的內容。

rmdir
刪除目錄,只能刪除空目錄

    -p或--parents:遞迴刪除空目錄  
    -v或--verbose:顯示命令的詳細執行過程  

* rm*
rm命令可以刪除一個目錄中的一個或多個檔案或目錄,也可以將某個目錄及其下屬的所有檔案及其子目錄均刪除掉。對於連結檔案,只能刪除整個連結檔案,而原有檔案保持不變。
注意:使用rm命令要格外小心。因為一旦刪除了一個檔案,就無法再恢復它。所以在刪除檔案之前,最好再看一下檔案的內容,確定是否真要刪除。

        -i:刪除已有檔案或目錄之前先詢問使用者;    
        -f:強制刪除檔案或目錄;  
        -r或-R:遞迴處理,將指定目錄下的所有檔案與子目錄一併處理;
        -v:顯示指令的詳細執行過程。

* touch*
touch命令有兩個功能:
一是用於把已存在檔案的時間標籤更新為系統當前的時間(預設方式),主要用於改變時間軸,;
二是用來在沒有檔案的時候會自動建立一個檔案,加-c選項可選擇不建立新檔案;

         -a:  或--time=atime或--time=acess或--time=use只更改存取時間;  
         -m 或--time=mtime或--time=modify只更改變動時間 
         -t:日期時間,使用指定的日期時間,而非現在的時間;  
         -c或--no-creat 不建立任何檔案;   

stat
stat命令用於顯示檔案的狀態資訊,包括三個時間軸,上次訪問、上次修改、上次改變時間;其輸出的資訊比ls的更為詳細;
建立檔案和目錄不能同名,否則會報錯
建立檔案,可以使用文字編輯器

* file*
用來探測給定檔案的型別。file命令對檔案的檢查分為檔案系統、魔法幻數檢查和語言檢查3個過程。

###### 複製和移動檔案
cp
cp命令用來將一個或多個原始檔或者目錄複製到指定的目的檔案或目錄。它可以將單個原始檔複製成一個指定檔名的具體的檔案或一個已經存在的目錄下。cp命令還支援同時複製多個檔案,當一次複製多個檔案時,目標檔案引數必須是一個已經存在的目錄,否則將報錯。

-a:此引數的效果和同時指定"-dpR"引數相同;
-d:當複製符號連線時,把目標檔案或目錄也建立為符號連線,並指向與原始檔或目錄連線的原始檔案或目錄;
-f:強行復制檔案或目錄,不論目標檔案或目錄是否已存在;
-i:覆蓋既有檔案之前先詢問使用者;
-l:對原始檔建立硬連線,而非複製檔案;
-p:保留原始檔或目錄的屬性;
-R/r:遞迴處理,將指定目錄下的所有檔案與子目錄一併處理;
-s:對原始檔建立符號連線,而非複製檔案;
-u:使用這項引數後只會在原始檔的更改時間較目標檔案更新時或是名稱相互對應的目標檔案並不存在時,才複製檔案;
-S:在備份檔案時,用指定的字尾“SUFFIX”代替檔案的預設字尾;
-b:覆蓋已存在的檔案目標前將目標檔案備份;
-v:詳細顯示命令執行的操作。

mv
mv命令用來對檔案或目錄重新命名,或者將檔案從一個目錄移動到另一個目錄中。source表示原始檔或目錄,target表示目錄檔案或目錄。如果將一個檔案移動到一個已經存在的目錄檔案中,則目標檔案的內容將被覆蓋。
mv命令可以用來將原始檔移至一個目標檔案中,或將一組檔案移至一個目標目錄中。原始檔被移至目標檔案有兩種不同的結果:
1.如果目標檔案是到某一目錄檔案的路徑,原始檔會被移到此目錄下,且檔名不變。
2.如果目標檔案不是目錄檔案,則原始檔名(只能有一個)會變為此目標檔名,並覆蓋已存在的同名檔案。如果原始檔和目標檔案在同一個目錄下,mv的作用就相當於重新命名。
注意:mv是重新命名也可以叫搬家,檔案個數並未增加,而cp則是複製拷貝,檔案數相應的增加。

--backup=<備份模式>:若需覆蓋檔案,則覆蓋前先行備份;
-b:當檔案存在時,覆蓋前,為其建立一個備份;
-f:若目標檔案或目錄與現有的檔案或目錄重複,則直接覆蓋現有的檔案或目錄;
-i:互動式操作,覆蓋前先行詢問使用者,如果原始檔與目標檔案或目標目錄中的檔案同名,則詢問使用者是否覆蓋目標檔案。使用者輸入”y”,表示將覆蓋目標檔案;輸入”n”,表示取消對原始檔的移動。這樣可以避免誤將檔案覆蓋。
--strip-trailing-slashes:刪除原始檔中的斜槓“/”;
-S<字尾>:為備份檔案指定字尾,而不使用預設的字尾;
--target-directory=<目錄>:指定原始檔要移動到目標目錄;
-u:當原始檔比目標檔案新或者目標檔案不存在時,才執行移動操作。

* install*
install命令的作用是安裝或升級軟體或備份資料,它的使用許可權是所有使用者。install命令和cp命令類似,都可以將檔案/目錄拷貝到指定的地點。但是,install允許你控制目標檔案的屬性。install通常用於程式的makefile,使用它來將程式拷貝到目標(安裝)目錄。

文字檢視命令

cat
cat命令連線檔案並列印到標準輸出裝置上,cat經常用來顯示檔案的內容,類似於下的type命令。
cat [OPTION] FILE1 FILE2…
注意:當檔案較大時,文字在螢幕上迅速閃過(滾屏),使用者往往看不清所顯示的內容。因此,一般用more等命令分屏顯示。為了控制滾屏,可以按Ctrl+S鍵,停止滾屏;按Ctrl+Q鍵可以恢復滾屏。按Ctrl+C(中斷)鍵可以終止該命令的執行,並且返回Shell提示符狀態。
-n或–number:由1開始對所有輸出的行數編號;
-E:顯示每一行的結束符(對於linux而言,文字 的行結束符是$符)

tac
tac命令用於將檔案以行為單位,反序輸出,即第一行最後顯示,最後一行先顯示。

xargs
是給其他命令傳遞引數的一個過濾器,也是組合多個命令的一個工具。它擅長將標準輸入資料轉換成命令列引數,xargs能夠處理管道或者stdin並將其轉換成特定命令的命令引數。xargs也可以將單行或多行文字輸入轉換為其他格式,例如多行變單行,單行變多行。xargs的預設命令是echo,空格是預設定界符。這意味著通過管道傳遞給xargs的輸入將會包含換行和空白,不過通過xargs的處理,換行和空白將被空格取代。xargs是構建單行命令的重要元件之一。
-n:該選項表示將xargs生成的命令列引數,每次傳遞幾個引數給其後面的命令執行,例如如果xargs從標準輸入中讀入內容,然後以分隔符分割之後生成的命令列引數有10個,使用 -n 3 之後表示一次傳遞給xargs後面的命令是3個引數,因為一共有10個引數,所以要執行4次,才能將引數用完。
-d:指定分隔符;
-E:指定不列印字串;

more**
more(一般可以理解為向後翻,因為如果翻到最後面的話就不能向前翻了,而且翻到最後時就直接退出了)命令一次顯示一屏文字,滿屏後停下來,並且在螢幕的底部出現一個提示資訊,給出至今己顯示的該檔案的百分比:–More–(XX%)可以用下列不同的方法對提示做出回答
按Space鍵:顯示文字的下一屏內容。
按Enter鍵:只顯示文字的下一行內容。
按斜線符:接著輸入一個模式,可以在文字中尋找下一個相匹配的模式。/
按H鍵:顯示幫助屏,該屏上有相關的幫助資訊。
按B鍵:顯示上一屏內容。
按Q鍵:退出more命令。

-s:將連續多個空行壓縮成一行顯示;  

less
(可以向前翻,即使翻到最後,而且其不會直接退出,必須按Q鍵才能退出檢視,用的比more多)
與more十分相似,都可以用來瀏覽文字檔案的內容,不同的是less命令允許使用者向前或向後瀏覽檔案,而more命令只能向前瀏覽。用less命令顯示檔案時,用PageUp鍵向上翻頁,用PageDown鍵向下翻頁。要退出less程式,應按Q鍵。man中能用的選項都能用。
-S:在單行顯示較長的內容,而不換行顯示;
-N:每一行行首顯示行號;
-s:將連續多個空行壓縮成一行顯示;

head
用於顯示檔案的開頭的內容。預設顯示前10行內容。

    -n(數字):指定顯示前幾行內容;  
    -c(字元數):指定顯示頭部內容的字元數;  
    -v:總是顯示檔名的頭資訊;  
    -q:不顯示檔名的頭資訊。  

tail
用於顯示檔案尾部內容,預設後10行(注意空白行也是一行);

-n:  :指定顯示後幾行內容;
-f(follow):檢視檔案尾部,不退出,等待顯示後續追加至此檔案的新內容。  
文字處理

cut
cut命令用來顯示行中的指定部分,刪除檔案中指定欄位。cut經常用來顯示檔案的內容,類似於type命令。

-d:指定分隔符,預設為空格(1個);   
-f:指定要顯示的欄位;  
    -f 1,3(顯示第一個和第三個欄位);  
    -f 1-3(顯示1到3欄位);  
-c:僅顯示行中指定範圍的字元;

注意:該命令有兩項功能,其一是用來顯示檔案的內容,它依次讀取由引數file所指明的檔案,將它們的內容輸出到標準輸出上;其二是連線兩個或多個檔案,如 cut file1 file2>file3把檔案file1和file2的內容合併起來,然後通過重定向到file3中;
當檔案較大時,文字在螢幕上迅速閃過(滾屏),使用者往往看不清所顯示的內容。因此,一般用more等命令分屏顯示。為了控制滾屏,可以按Ctrl+S鍵,停止滾屏;按Ctrl+Q鍵可以恢復滾屏。按Ctrl+C(中斷)鍵可以終止該命令的執行,並且返回Shell提示符狀態。

join:合併
用來將兩個檔案中,指定欄位內容相同的行連線起來。找出兩個檔案中,指定欄位內容相同的行,並加以合併,再輸出到標準輸出裝置。
-1<欄位>:連線[檔案1]指定的欄位; join -1 1 -2 1 file1 file2(-1表示第一個檔案,1表示第一列,-2表示第二個檔案,2表示第二列,說明1/2檔案的第一列相同進行合併)
-2<欄位>:連線[檔案2]指定的欄位;
-a:<1或2>:除了顯示原來輸出內容之外,還顯示指令檔案中沒有相同欄位的行;join -a 1 file1 file2(表示除了合併相同的行外,還顯示第一個檔案中不同的行)

sort
在linux中非常常用,它將檔案進行排序,並將排序結果標準輸出。sort命令既可以從特定的檔案,也可以從stdin中獲取輸入。

與cut命令一致,並不影響原檔案的內容,預設排序為升序進行排序(依靠字元在ASCII中的數值),比較每一個字元的大小,而並不是按數值大小進行排序,加引數-n可以進行數值排序;

```
-n:按數值大小排序;  
-r:降序排序;  
-t:欄位分隔符;  
-k:以哪個欄位為關鍵字進行排序(sort -t: -k3 /etc/passwd)  
-u(unique):排序後相同的行只顯示一次;
-f:排序時忽略字元大小寫;
```

uniq
用於報告或忽略檔案中的重複行,一般與sort命令結合使用。

只能識別相鄰且一樣的行才是重複的行,否則照樣會顯示(相當於sort -u)

    -d:只顯示重複行;  
    -D:顯示所有重複的行;  
    -c:顯示每一行且會顯示每一行重複次數 

wc
wc(word count)用來計算數字。利用wc指令我們可以計算檔案的Bytes數、字數或是列數,若不指定檔名稱,或是所給與的檔名為“-”,則wc指令會從標準輸入裝置讀取資料。(注意空格也是字元)

    -c或--bytes或--chars:只顯示Bytes數;  
    -l或--lines:只顯示行數;  
    -w或--words:只顯示字數。  
    -L:表示最長的一行包含多少個字元;  


表示/etc/passwd檔案下有48行,72個單詞,2540個位元組;

tr
tr命令可以對來自標準輸入的字元進行替換、壓縮和刪除。可將一組字元變成另一組字元,經常用來編寫優美的單行命令,作用強大。
tr [OPTION]…SET1 [SET2](後面不能直接跟檔案,只有用輸入重定向達到目的,逐個字元進行處理)
tr ‘a-z’ A-Z’

磁碟管理命令

du:顯示目錄下每個檔案佔用磁碟的大小
-s:顯示目錄佔用磁碟大小
-h:以人類可讀性單位顯示

df:顯示整個磁碟分割槽使用情況
-i或–inodes:顯示inode的資訊
-P或–portability:使用POSIX的輸出格式,即一行的內容放在同一行顯示,不換行;
-h或–human-readable以K,M,G為單位,提高資訊的可讀性。

壓縮、解壓

壓縮、解壓縮命令
壓縮格式:gz,bz2,xz,zip,Z

壓縮演算法:演算法不同,壓縮比(壓縮後的檔案和原檔案相比)也會不同;

compress: 壓縮後的檔名為FILENAME.Z,壓縮比很小,已經很少用了 uncompress: 只能壓縮檔案,但不能壓縮目錄,只能壓縮目錄裡的檔案,且壓縮後會自動將原始檔刪除

gzip
.gz 壓縮
格式:gzip /PATH/TO/SOMEFILE:壓縮完成後會刪除原檔案
-d==gunzip
-#:1-9,指定壓縮比,預設為6;
gunzip:解壓縮 格式: gunzip /PATH/TO/SOMEFILE.gz:解壓完成後會刪除原檔案
zcat:檢視壓縮檔案 格式:zcat /PATH/TO/SOMEFILE.gz 不解壓的情況,檢視文字檔案的內容

bzip2:
.bz2
比gzip有更大壓縮比的壓縮工具,但對小檔案優勢不明顯; 使用格式近似,也不能壓縮目錄,壓縮後會刪除原檔案 bzip2 /PATH/TO/SOMEFILE
-d==bunzip2:解壓縮 bunzip /PATH/TO/SOMEFILE
-#:1-9,指定壓縮比,預設為6;
bzcat:不解壓時檢視文字檔案
-k/–keep:壓縮時保留原檔案

xz:
.xz與前面二者用法一致
-d
-#
-k
unxz:解壓縮
xzdec:解壓縮
xzcat

zip
可壓縮目錄,壓縮比不大;既歸檔也壓縮的工具 zip FILENAME.zip(壓縮後要保留的檔案) FILE1 FILE2….壓縮後不刪除原檔案 unzip FILENAME.zip archive:歸檔,歸檔本身並不壓縮

tar:
歸檔工具,不壓縮
-c:建立歸檔檔案
-f FILE.tar:操作的歸檔檔案
-x:展開歸檔
–xattrs:歸檔時,保留檔案的擴充套件屬性資訊
-t:不展開歸檔,直接檢視歸檔了哪些檔案

-zcf:歸檔並呼叫gzip壓縮   
-zxf:呼叫gzip解壓縮並展開歸檔,-z選項可省略  

-jcf: bzip2 
-jxf:  

xz:要建立或解壓tar.xz時不能直接建立為.tar.xz,而是先tar -cf 建立為.tar再xz -Jcf:xz -Jxf 好用的備份工具 cpio:歸檔工具,古老的工具

read:從鍵盤讀取變數的值,通常用在shell指令碼中與使用者進行互動的場合。該命令可以一次讀取多個變數的值,變數和輸入的值都需要使用空格隔開。
-p”PROMPT”:指定讀取值時的提示符;
-t:指定讀取值時等待的時間(秒);

檔案查詢命令

賦值表示式
- +=(相當於++ 如let i+=1相當於 let i++)
- +=
- -=相當於I–
- ++I – I
- *=
- /=
- %=
寫一個指令碼:
計算100以內所有奇數的和以及所有偶數的和:分別顯示之;
sumji=0 sumou=0 for i in {1..100};do yu= sum i yu -eq 0 ];then
sumou+yu
grep, egrep,fgrep:文字查詢

locate:
非實時,模糊匹配,在全系統中查詢,查詢是根據全系統檔案資料庫進行的; updatedb,手動生成檔案資料庫,一般新系統時需要用;
速度快(一般只是普通的用法,用得很少)

find:
實時 精確 支援眾多查詢標準 遍歷指定目錄中的所有檔案完成查詢,速度慢:
- find 查詢路徑,查詢標準,查詢到以後的處理動作
- 查詢路徑:可省略,預設為當前目錄
- 查詢標準:預設為指定路徑下的所有檔案
- 處理運作:預設為顯示

  1. 查詢標準(匹配標準):
    • 1) -name’FILENAME’:對檔名作精確匹配
    • 2)檔名通配:
    • *:匹配任意長度的任意字元;
    • ?:匹配任意單個字元;
    • [ ]:匹配指定範圍內的任意單個字元;
    • -iname ‘FILENAME’:檔名匹配時不區分大小寫
    • -regex PATTERN:基於正則表示式進行檔名匹配
    • -user USERNAME:根據使用者的屬主進行查詢
    • -group GROUPNAME:根據屬組查詢
    • -uid UID:根據UID查詢(主要應用於使用者被刪時通過使用者名稱查詢不到,需要用ID號才能找到)
    • -gid GID:根據GID查詢
    • -nouser:查詢沒有屬主的檔案
    • -nogroup:查詢沒有屬組的檔案
    • -type
    • f:普通檔案
    • d:目錄
    • c:字元裝置
    • b:塊裝置
    • l:連結檔案
    • p:管道裝置
    • s:套接裝置
    • -size
      • 數字+單位
        [+(表示大於)|-(表示小於)]numK (不加加減號時表示精確查詢,但並不是認為是一個精確的數值,表示在那附近的也可以被查詢到,如10k表示9-10k的都可以被查詢到)
        numM
        numG

組合條件:
- -a:與
- -o:或
- -not:非 find /etc -not -type d

如:/tmp目錄,不是目錄,並且還不能套接字型別的檔案
find /tmp -not -type d -a -type s
如: /tmp/test目錄下,屬主不是user1,也不是user2
find /tmp -not -user user1 -a -not -user user2或者find /tmp -not (-user user1 -o -user user2)

  • -mtime:修改了的時間
  • -ctime:更改時間
  • -atime:訪問時間
    備註:[+|-] ([+5|-5] +5表示至少5天,-5表示5天之內,不加表示正好5天)預設單位均為天
  • -mmin
  • -cmin
  • -amin(分鐘)

-perm MODE (-|/不加符號表示精確匹配) -MODE:只有檔案許可權完全包含MODE時才能顯示 /MODE:任意位許可權匹配就可以

2. 查詢動作
- 預設為-print:顯示
- -ls: 類似ls -l的形式顯示每一個檔案的詳細
- -ok COMMAND {}\; (必須用\;進行結尾,否則語法錯誤;每一次操作都要使用者確認
- -exec COMMAND {} \;(不需要使用者確認)只要引用原來的名字就要用{}

  • -xargs(功能更強大),本身可以不用佔位符
    xargs命令是給其他命令傳遞引數的一個過濾器,也是組合多個命令的一個工具。它擅長將標準輸入資料轉換成命令列引數,xargs能夠處理管道或者stdin並將其轉換成特定命令的命令引數。xargs也可以將單行或多行文字輸入轉換為其他格式,例如多行變單行,單行變多行。xargs的預設命令是echo,空格是預設定界符。這意味著通過管道傳遞給xargs的輸入將會包含換行和空白,不過通過xargs的處理,換行和空白將被空格取代。xargs是構建單行命令的重要元件之一。
    echo folder{1..5}/folder{1..5}|xargs -n 1 cp ./me.txt
    引數:
    • -d:指定分隔符;
      echo '[email protected]@33' |xargs -d '@' echo 輸出 11 22 33
    • -p:在執行操作時會先詢問是否執行(相當於rm中-i引數)
    • -n:指定每次傳遞幾個引數給後面的命令;
      echo '[email protected]@[email protected]@[email protected]@[email protected]@[email protected]'|xargs -d '@' -n 3 echo
      輸出: 11 22 33 \n(換行) 44 55 66\n 77 88 99\n 00
    • -E:該選項指定一個字串,當xargs解析出多個命令列引數時,如果搜尋到-E指定的命令列引數,則只會講-E指定命令列引數之前的引數(不包括-E指定的引數及其字串)傳遞給xargs後面的命令;
      例: echo '11 22 33'|xargs -E '33'