歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

Linux入門級需要掌握的命令

**1.目錄的相關操作: cd, pwd, mkdir, rmdir
2.文件與目錄的檢視: ls
3.復制、刪除與移動: cp, rm, mv
4. 取得路徑的名稱與目錄名稱
5.直接檢視文件內容: cat, tac, nl
6. 可翻頁檢視: more, less
7. 資料撷取: head, tail
8. 非純文字檔: od
9. 修改文件時間與建置新檔: touch
10. 文件預設權限:umask
11. 文件隱藏屬性: chattr, lsattr
12. 文件特殊權限:SUID, SGID, SBIT, 權限設定
13.觀察文件類型:file
14.文件查找which,whereis, locate / updatedb, find**

下面是常用命令解析

1。文件與目錄的檢視: ls
[root@study ~]# ls [-aAdfFhilnrRSt] 檔名或目錄名稱..
[root@study ~]# ls [–color={never,auto,always}] 檔名或目錄名稱..
[root@study ~]# ls [–full-time] 檔名或目錄名稱..選項與參數:
-a :全部的文件,連同隱藏檔( 開頭為 . 的文件) 一起列出來(常用)
-A :全部的文件,連同隱藏檔,但不包括 . 與 .. 這兩個目錄
-d :僅列出目錄本身,而不是列出目錄內的文件資料(常用)
-f :直接列出結果,而不進行排序 (ls 預設會以檔名排序!)
-F :根據文件、目錄等資訊,給予附加資料結構,例如:
*:代表可執行檔; /:代表目錄; =:代表 socket 文件; |:代表 FIFO 文件;
-h :將文件容量以人類較易讀的方式(例如 GB, KB 等等)列出來;
-i :列出 inode 號碼,inode 的意義下一章將會介紹;
-l :長資料串列出,包含文件的屬性與權限等等資料;(常用)
-n :列出 UID 與 GID 而非使用者與群組的名稱 (UID與GID會在帳號管理提到!)
-r :將排序結果反向輸出,例如:原本檔名由小到大,反向則為由大到小;
-R :連同子目錄內容一起列出來,等於該目錄下的所有文件都會顯示出來;
-S :以文件容量大小排序,而不是用檔名排序;
-t :依時間排序,而不是用檔名。
–color=never :不要依據文件特性給予顏色顯示;
–color=always :顯示顏色
–color=auto :讓系統自行依據設定來判斷是否給予顏色
–full-time :以完整時間模式 (包含年、月、日、時、分) 輸出
–time={atime,ctime} :輸出 access 時間或改變權限屬性時間 (ctime)
而非內容變更時間 (modification time)

2。cp (復制文件或目錄)
[root@study ~]# cp [-adfilprsu] 來源檔(source) 目標檔(destination)
[root@study ~]# cp [options] source1 source2 source3 …. directory
選項與參數:
-a :相當於 -dr –preserve=all 的意思,至於 dr 請參考下列說明;(常用)
-d :若來源檔為連結檔的屬性(link file),則復制連結檔屬性而非文件本身;
-f :為強制(force)的意思,若目標文件已經存在且無法開啟,則移除後再嘗試一次;
-i :若目標檔(destination)已經存在時,在覆蓋時會先詢問動作的進行(常用)
-l :進行硬式連結(hard link)的連結檔建立,而非復制文件本身;
-p :連同文件的屬性(權限、用戶、時間)一起復制過去,而非使用預設屬性(備份常用);-r :遞迴持續復制,用於目錄的復制行為;(常用)
-s :復制成為符號連結檔 (symbolic link),亦即『捷徑』文件;
-u :destination 比 source 舊才更新 destination,或 destination 不存在的情況下才復制。
–preserve=all :除了 -p 的權限相關參數外,還加入 SELinux 的屬性, links, xattr 等也復制了。
最後需要注意的,如果來源檔有兩個以上,則最後一個目的檔一定要是『目錄』才行!

3。rm (移除文件或目錄)
[root@study ~]# rm [-fir] 文件或目錄
選項與參數:
-f :就是 force 的意思,忽略不存在的文件,不會出現警告訊息;
-i :互動模式,在刪除前會詢問使用者是否動作
-r :遞迴刪除啊!最常用在目錄的刪除了!這是非常危險的選項!!!范例一:將剛剛在 cp 的范例中建立的 bashrc 刪除掉!
[root@study ~]# cd /tmp
[root@study tmp]# rm -i bashrc
rm: remove regular file bashrc'? y# 如果加上 -i 的選項就會主動詢問喔,避免你刪除到錯誤的檔名!范例二:透過萬用字元*的幫忙,將/tmp底下開頭為bashrc的檔名通通刪除:
[root@study tmp]# rm -i bashrc*# 注意那個星號,代表的是 0 到無窮多個任意字元喔!很好用的東西!范例三:將 cp 范例中所建立的 /tmp/etc/ 這個目錄刪除掉!
[root@study tmp]# rmdir /tmp/etc
rmdir: failed to remove '/tmp/etc': Directory not empty <== 刪不掉啊!因為這不是空的目錄!
[root@study tmp]# rm -r /tmp/etc
rm: descend into directory
/tmp/etc’? y
rm: remove regular file /tmp/etc/fstab'? y
rm: remove regular empty file
/tmp/etc/crypttab’?
^C <== 按下 [ctrl]+c 中斷…..(中間省略)…..

因為身份是 root ,預設已經加入了 -i 的選項,所以你要一直按 y 才會刪除!

如果不想要繼續按 y ,可以按下『 [ctrl]-c 』來結束 rm 的工作。

這是一種保護的動作,如果確定要刪除掉此目錄而不要詢問,可以這樣做:

[root@study tmp]# \rm -r /tmp/etc# 在指令前加上反斜線,可以忽略掉 alias 的指定選項喔!至於 alias 我們在bash再談!

拜託!這個范例很可怕!你不要刪錯了!刪除 /etc 系統是會掛掉的!范例四:刪除一個帶有 - 開頭的文件

[root@study tmp]# touch ./-aaa- <==touch這個指令可以建立空文件!
[root@study tmp]# ls -l
-rw-r–r–. 1 root root 0 Jun 11 19:22 -aaa- <==文件大小為0,所以是空文件
[root@study tmp]# rm -aaa-
rm: invalid option – ‘a’ <== 因為 “-” 是選項嘛!所以系統誤判了!
Try ‘rm ./-aaa-’ to remove the file `-aaa-‘. <== 新的 bash 有給建議的
Try ‘rm –help’ for more information.
[root@study tmp]# rm ./-aaa-

4。mv (移動文件與目錄,或更名)
[root@study ~]# mv [-fiu] source destination
[root@study ~]# mv [options] source1 source2 source3 …. directory
選項與參數: -f :force 強制的意思,如果目標文件已經存在,不會詢問而直接覆蓋;
-i :若目標文件 (destination) 已經存在時,就會詢問是否覆蓋!
-u :若目標文件已經存在,且 source 比較新,才會更新 (update)
范例一:復制一文件,建立一目錄,將文件移動到目錄中
[root@study ~]# cd /tmp
[root@study tmp]# cp ~/.bashrc bashrc
[root@study tmp]# mkdir mvtest
[root@study tmp]# mv bashrc mvtest

將某個文件移動到某個目錄去,就是這樣做!

范例二:將剛剛的目錄名稱更名為 mvtest2
[root@study tmp]# mv mvtest mvtest2 <== 這樣就更名了!簡單~

其實在 Linux 底下還有個有趣的指令,名稱為 rename ,

# 該指令專職進行多個檔名的同時更名,並非針對單一檔名變更,與mv不同。請man rename。
范例三:再建立兩個文件,再全部移動到 /tmp/mvtest2 當中
[root@study tmp]# cp ~/.bashrc bashrc1
[root@study tmp]# cp ~/.bashrc bashrc2
[root@study tmp]# mv bashrc1 bashrc2 mvtest2

注意到這邊,如果有多個來源文件或目錄,則最後一個目標檔一定是『目錄!』

意思是說,將所有的資料移動到該目錄的意思!

5。cat (concatenate) 查看文件內容
[root@study ~]# cat [-AbEnTv]
選項與參數:-A :相當於 -vET 的整合選項,可列出一些特殊字符而不是空白而已;
-b :列出行號,僅針對非空白行做行號顯示,空白行不標行號!
-E :將結尾的斷行字元 $ 顯示出來;
-n :列印出行號,連同空白行也會有行號,與 -b 的選項不同;
-T :將 [tab] 按鍵以 ^I 顯示出來;
-v :列出一些看不出來的特殊字符
范例一:檢閱 /etc/issue 這個文件的內容
[root@study ~]# cat /etc/issue\SKernel \r on an \m
范例二:承上題,如果還要加印行號呢?
[root@study ~]# cat -n /etc/issue
1 \S
2 Kernel \r on an \m
3

所以這個文件有三行!看到了吧!可以印出行號呢!這對於大文件要找某個特定的行時,有點用處!

如果不想要編排空白行的行號,可以使用『cat -b /etc/issue』,自己測試看看:

范例三:將 /etc/man_db.conf 的內容完整的顯示出來(包含特殊字元)
[root@study ~]# cat -A /etc/man_db.conf

....(中間省略)....MANPATH_MAP^I/bin^I^I^I/usr/share/manMANPATH_MAP^I/usr/bin^I^I/usr/share/manMANPATH_MAP^I/sbin^I^I^I/usr/share/manMANPATH_MAP^I/usr/sbin^I^I/usr/share/man$…..(底下省略)…..

上面的結果限於篇幅,刪除掉很多資料了。另外,輸出的結果並不會有特殊字體,

上面的特殊字體是要讓您發現差異點在哪裡就是了。基本上,在一般的環境中,

使用 [tab] 與空白鍵的效果差不多,都是一堆空白啊!我們無法知道兩者的差別。

此時使用 cat -A 就能夠發現那些空白的地方是啥鬼東西了![tab]會以 ^I 表示,

斷行字元則是以 表示,所以你可以發現每一行後面都是 啊!不過斷行字元# 在Windows/Linux則不太相同,Windows的斷行字元是 ^M$ 啰。

6。tac (反向顯示文件內容,和cat相反)
[root@study ~]# tac /etc/issueKernel
\r on an \m\S

嘿嘿!與剛剛上面的范例一比較,是由最後一行先顯示喔!

7。nl (添加行號列印)
[root@study ~]# nl [-bnw]
文件選項與參數:
-b :指定行號指定的方式,主要有兩種:
-b a :表示不論是否為空行,也同樣列出行號(類似 cat -n);
-b t :如果有空行,空的那一行不要列出行號(預設值);
-n :列出行號表示的方法,主要有三種:
-n ln :行號在螢幕的最左方顯示;
-n rn :行號在自己欄位的最右方顯示,且不加 0 ;
-n rz :行號在自己欄位的最右方顯示,且加 0 ;
-w :行號欄位的占用的字元數。
范例一:用 nl 列出 /etc/issue 的內容
[root@study ~]# nl /etc/issue
1 \S
2 Kernel \r on an \m

注意看,這個文件其實有三行,第三行為空白(沒有任何字元),

[root@study ~]# nl -b a /etc/issue
1 \S
2 Kernel \r on an \m
3

嗬嗬!行號加上來啰~那麼如果要讓行號前面自動補上 0 呢?可這樣

[root@study ~]# nl -b a -n rz /etc/issue
000001 \S
000002 Kernel \r on an \m
000003

嘿嘿!自動在自己欄位的地方補上 0 了~預設欄位是六位數,如果想要改成 3 位數?[root@study ~]# nl -b a -n rz -w 3 /etc/issue

001 \S
002 Kernel \r on an \m
003

變成僅有 3 位數啰~

8。head (取出文件前面幾行),tail和head相反。
[root@study ~]# head [-n number] 文件
選項與參數:-n :後面接數字,代表顯示幾行的意思
[root@study ~]# head /etc/man_db.conf

預設的情況中,顯示前面十行!若要顯示前 20 行,就得要這樣:

[root@study ~]# head -n 20 /etc/man_db.conf
范例:如果後面100行的資料都不列印,只列印/etc/man_db.conf的前面幾行,該如何是好?
[root@study ~]# head -n -100 /etc/man_db.conf

9。非純文字檔(二進制文檔查看器): od
我們上面提到的,都是在查閱純文字檔的內容。那麼萬一我們想要查閱非文字檔,舉例來說,例如 /usr/bin/passwd 這個執行檔的內容時, 又該如何去讀出資訊呢?事實上,由於執行檔通常是 binary file ,使用上頭提到的指令來讀取他的內容時, 確實會產生類似亂碼的資料啊!那怎麼辦?沒關係,我們可以利用 od 這個指令來讀取喔![root@study ~]# od [-t TYPE]
文件選項或參數:
-t :後面可以接各種『類型 (TYPE)』的輸出,
例如:
a :利用預設的字元來輸出;
c :使用 ASCII 字元來輸出
d[size] :利用十進位(decimal)來輸出資料,每個整數占用 size bytes ;
f[size] :利用浮點數值(floating)來輸出資料,每個數占用 size bytes ;
o[size] :利用八進位(octal)來輸出資料,每個整數占用 size bytes ;
x[size] :利用十六進位(hexadecimal)來輸出資料,每個整數占用 size bytes ;
范例一:請將/usr/bin/passwd的內容使用ASCII方式來展現!
[root@study ~]# od -t c /usr/bin/passwd
0000000 177 E L F 002 001 001 \0 \0 \0 \0 \0 \0 \0 \0 \00000020 003 \0 > \0 001 \0 \0 \0 364 3 \0 \0 \0 \0 \0 \00000040 @ \0 \0 \0 \0 \0 \0 \0 x e \0 \0 \0 \0 \0 \00000060 \0 \0 \0 \0 @ \0 8 \0 \t \0 @ \0 035 \0 034 \00000100 006 \0 \0 \0 005 \0 \0 \0 @ \0 \0 \0 \0 \0 \0 \0…..(後面省略)….

最左邊第一欄是以 8 進位來表示bytes數。以上面范例來說,第二欄0000020代表開頭是

第 16 個 byes (2x8) 的內容之意。

范例二:請將/etc/issue這個文件的內容以8進位列出儲存值與ASCII的對照表[root@study ~]# od -t oCc /etc/issue
0000000 134 123 012 113 145 162 156 145 154 040 134 162 040 157 156 040 \ S \n K e r n e l \ r o n0000020 141 156 040 134 155 012 012 a n \ m \n \n0000027

如上所示,可以發現每個字元可以對應到的數值為何!要注意的是,該數值是 8 進位喔!

例如 S 對應的記錄數值為 123 ,轉成十進位:1x8^2+2x8+3=83。

10。修改文件時間或創建新文檔: touch
我們在 ls 這個指令的介紹時,有稍微提到每個文件在linux底下都會記錄許多的時間參數, 其實是有三個主要的變動時間,那麼三個時間的意義是什麼呢?modification time (mtime):當該文件的『內容資料』變更時,就會更新這個時間!內容資料指的是文件的內容,而不是文件的屬性或權限喔!status time (ctime):當該文件的『狀態 (status)』改變時,就會更新這個時間,舉例來說,像是權限與屬性被更改了,都會更新這個時間啊。 access time (atime):當『該文件的內容被取用』時,就會更新這個讀取時間 (access)。舉例來說,我們使用 cat 去讀取 /etc/man_db.conf , 就會更新該文件的 atime 了。
[root@study ~]# touch [-acdmt]
文件選項與參數:
-a :僅修訂 access time;
-c :僅修改文件的時間,若該文件不存在則不建立新文件;
-d :後面可以接欲修訂的日期而不用目前的日期,也可以使用 –date=”日期或時間”
-m :僅修改 mtime ;
-t :後面可以接欲修訂的時間而不用目前的時間,格式為[YYYYMMDDhhmm]
范例一:新建一個空的文件並觀察時間
[dmtsai@study ~]# cd /tmp
[dmtsai@study tmp]# touch testtouch
[dmtsai@study tmp]# ls -l testtouch
-rw-rw-r–. 1 dmtsai dmtsai 0 Jun 16 00:45 testtouch

注意到,這個文件的大小是 0 呢!在預設的狀態下,如果 touch 後面有接文件,

則該文件的三個時間 (atime/ctime/mtime) 都會更新為目前的時間。若該文件不存在,# 則會主動的建立一個新的空的文件喔!例如上面這個例子!

范例二:將 ~/.bashrc 復制成為 bashrc,假設復制完全的屬性,檢查其日期[dmtsai@study tmp]# cp -a ~/.bashrc bashrc
[dmtsai@study tmp]# date; ll bashrc; ll –time=atime bashrc; ll –time=ctime bashrc
Tue Jun 16 00:49:24 CST 2015 <==這是目前的時間
-rw-r–r–. 1 dmtsai dmtsai 231 Mar 6 06:06 bashrc <==這是 mtime
-rw-r–r–. 1 dmtsai dmtsai 231 Jun 15 23:44 bashrc <==這是 atime
-rw-r–r–. 1 dmtsai dmtsai 231 Jun 16 00:47 bashrc <==這是 ctime
11。chattr (設定文件隱藏屬性,區別於文件的rxw屬性),lsattr (顯示文件隱藏屬性)[root@study ~]# chattr [+-=][ASacdistu] 文件或目錄名稱
選項與參數:
+ :增加某一個特殊參數,其他原本存在參數則不動。
- :移除某一個特殊參數,其他原本存在參數則不動。
= :設定一定,
且僅有後面接的參數
A :當設定了 A 這個屬性時,若你有存取此文件(或目錄)時,他的存取時間 atime 將不會被修改, 可避免 I/O 較慢的機器過度的存取磁碟。(目前建議使用文件系統掛載參數處理這個項目)
S :一般文件是非同步寫入磁碟的(原理請參考前一章sync的說明),如果加上 S 這個屬性時, 當你進行任何文件的修改,該更動會『同步』寫入磁碟中。
a :當設定 a 之後,這個文件將只能增加資料,而不能刪除也不能修改資料,只有root 才能設定這屬性
c :這個屬性設定之後,將會自動的將此文件『壓縮』,在讀取的時候將會自動解壓縮, 但是在儲存的時候,將會先進行壓縮後再儲存(看來對於大文件似乎蠻有用的!)
d :當 dump 程序被執行的時候,設定 d 屬性將可使該文件(或目錄)不會被 dump 備份i :這個 i 可就很厲害了!他可以讓一個文件『不能被刪除、改名、設定連結也無法寫入或新增資料!』 對於系統安全性有相當大的助益!只有 root 能設定此屬性
s :當文件設定了 s 屬性時,如果這個文件被刪除,他將會被完全的移除出這個硬碟空間, 所以如果誤刪了,完全無法救回來了喔!
u :與 s 相反的,當使用 u 來設定文件時,如果該文件被刪除了,則資料內容其實還存在磁碟中, 可以使用來救援該文件喔!

注意1:屬性設定常見的是 a 與 i 的設定值,而且很多設定值必須要身為 root 才能設定注意
2:xfs 文件系統僅支援 AadiS 而已

范例:請嘗試到/tmp底下建立文件,並加入 i 的參數,嘗試刪除看看。
[root@study ~]# cd /tmp
[root@study tmp]# touch attrtest <==建立一個空文件
[root@study tmp]# chattr +i attrtest <==給予 i 的屬性
[root@study tmp]# rm attrtest <==嘗試刪除看看rm: remove regular empty file attrtest'? yrm: cannot removeattrtest’: Operation not permitted

看到了嗎?呼呼!連 root 也沒有辦法將這個文件刪除呢!趕緊解除設定!范例:請將該文件的 i 屬性取消!

[root@study tmp]# chattr -i attrtest
[root@study ~]# lsattr [-adR] 文件或目錄選項與參數:
-a :將隱藏檔的屬性也秀出來;
-d :如果接的是目錄,僅列出目錄本身的屬性而非目錄內的檔名;
-R :連同子目錄的資料也一並列出來!
[root@study tmp]# chattr +aiS attrtest
[root@study tmp]# lsattr attrtest
–S-ia———- attrtest
使用 chattr 設定後,可以利用 lsattr 來查閱隱藏的屬性。不過, 這兩個指令在使用上必須要特別小心,否則會造成很大的困擾。例如:某天你心情好,突然將 /etc/shadow 這個重要的密碼記錄文件給他設定成為具有 i 的屬性,那麼過了若干天之後, 你突然要新增使用者,卻一直無法新增!別懷疑,趕快去將 i 的屬性拿掉吧!

12。文件特殊權限: SUID, SGID, SBIT
SUID/SGID/SBIT 權限設定
前面介紹過 SUID 與 SGID 的功能,那麼如何設定文件使成為具有 SUID 與 SGID 的權限呢? 這就需要第五章的數字更改權限的方法了! 現在你應該已經知道數字型態更改權限的方式為『三個數字』的組合, 那麼如果在這三個數字之前再加上一個數字的話,最前面的那個數字就代表這幾個權限了!
4 為 SUID
2 為 SGID
1 為 SBIT
假設要將一個文件權限改為『-rwsr-xr-x』時,由於 s 在使用者權限中,所以是 SUID ,因此, 在原先的 755 之前還要加上 4 ,也就是:『 chmod 4755 filename 』來設定!此外,還有大 S 與大 T 的產生喔!參考底下的范例啦!

13。文件檔名的搜尋
再來談一談怎麼搜尋文件吧!在 Linux 底下也有相當優異的搜尋指令呦!通常 find 不很常用的!因為速度慢之外, 也很操硬碟!一般我們都是先使用 whereis 或者是 locate 來檢查,如果真的找不到了,才以 find 來搜尋呦! 為什麼呢?因為 whereis 只找系統中某些特定目錄底下的文件而已,locate 則是利用資料庫來搜尋檔名,當然兩者就相當的快速, 並且沒有實際的搜尋硬碟內的文件系統狀態,比較省時間啦!
whereis (由一些特定的目錄中尋找文件檔名)
[root@study ~]# whereis [-bmsu] 文件或目錄名選項與參數:
-l :可以列出 whereis 會去查詢的幾個主要目錄而已
-b :只找 binary 格式的文件
-m :只找在說明檔 manual 路徑下的文件
-s :只找 source 來源文件
-u :搜尋不在上述三個項目當中的其他特殊文件
范例一:請找出 ifconfig 這個檔名
[root@study ~]# whereis ifconfig
ifconfig: /sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz
范例二:只找出跟 passwd 有關的『說明文件』檔名(man page)
[root@study ~]# whereis passwd # 全部的檔名通通列出來!
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz
[root@study ~]# whereis -m passwd # 只有在 man 裡面的檔名才抓出來!
passwd: /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz

locate 和 updatedb
[root@study ~]# locate [-ir] keyword
選項與參數:
-i :忽略大小寫的差異;
-c :不輸出檔名,僅計算找到的文件數量
-l :僅輸出幾行的意思,例如輸出五行則是 -l 5
-S :輸出 locate 所使用的資料庫文件的相關資訊,包括該資料庫紀錄的文件/目錄數量等
-r :後面可接正規表示法的顯示方式
范例一:找出系統中所有與 passwd 相關的檔名,且只列出 5 個
[root@study ~]# locate -l 5 passwd
/etc/passwd
/etc/passwd-
/etc/pam.d/passwd
/etc/security/opasswd
/usr/bin/gpasswd
范例二:列出 locate 查詢所使用的資料庫文件之檔名與各資料數量
[root@study ~]# locate -S
Database /var/lib/mlocate/mlocate.db:
8,086 directories # 總紀錄目錄數
109,605 files # 總紀錄文件數
5,190,295 bytes in file names
2,349,150 bytes used to store database

find命令詳解
[root@study ~]# find [PATH] [option] [action]
選項與參數:
1. 與時間有關的選項:共有 -atime, -ctime 與 -mtime ,以 -mtime 說明
-mtime n :n 為數字,意義為在 n 天之前的『一天之內』被更動過內容的文件;
-mtime +n :列出在 n 天之前(不含 n 天本身)被更動過內容的文件檔名;
-mtime -n :列出在 n 天之內(含 n 天本身)被更動過內容的文件檔名。
-newer file :file 為一個存在的文件,列出比 file 還要新的文件檔名范例一:將過去系統上面 24 小時內有更動過內容 (mtime) 的文件列出
[root@study ~]# find / -mtime 0

那個 0 是重點!0 代表目前的時間,所以,從現在開始到 24 小時前,

有變動過內容的文件都會被列出來!那如果是三天前的 24 小時內?

find / -mtime 3 有變動過的文件都被列出的意思!

范例二:尋找 /etc 底下的文件,如果文件日期比 /etc/passwd 新就列出
[root@study ~]# find /etc -newer /etc/passwd

-newer 用在分辨兩個文件之間的新舊關係是很有用的!

與使用者或群組名稱有關的參數:
-uid n :n 為數字,這個數字是使用者的帳號 ID,亦即 UID ,這個 UID 是記錄在
/etc/passwd 裡面與帳號名稱對應的數字。這方面我們會在第四篇介紹。
-gid n :n 為數字,這個數字是群組名稱的 ID,亦即 GID,這個 GID 記錄在
/etc/group,相關的介紹我們會第四篇說明~
-user name :name 為使用者帳號名稱喔!例如 dmtsai
-group name:name 為群組名稱喔,例如 users ;
-nouser :尋找文件的擁有者不存在 /etc/passwd 的人!
-nogroup :尋找文件的擁有群組不存在於 /etc/group 的文件!
當你自行安裝軟體時,很可能該軟體的屬性當中並沒有文件擁有者,
這是可能的!在這個時候,就可以使用 -nouser 與 -nogroup 搜尋。
范例三:搜尋 /home 底下屬於 dmtsai 的文件
[root@study ~]# find /home -user dmtsai

這個東西也很有用的~當我們要找出任何一個使用者在系統當中的所有文件時,

就可以利用這個指令將屬於某個使用者的所有文件都找出來喔!

范例四:搜尋系統中不屬於任何人的文件
[root@study ~]# find / -nouser

透過這個指令,可以輕易的就找出那些不太正常的文件。如果有找到不屬於系統任何人的文件時,

不要太緊張,那有時候是正常的~尤其是你曾經以原始碼自行編譯軟體時。

與文件權限及名稱有關的參數:
-name filename:搜尋文件名稱為 filename 的文件;
-size [+-]SIZE:搜尋比 SIZE 還要大(+)或小(-)的文件。這個 SIZE 的規格有:
c: 代表 byte, k: 代表 1024bytes。所以,要找比 50KB
還要大的文件,就是『 -size +50k 』
-type TYPE :搜尋文件的類型為 TYPE 的,類型主要有:一般正規文件 (f), 裝置文件 (b, c),
目錄 (d), 連結檔 (l), socket (s), 及 FIFO (p) 等屬性。
-perm mode :搜尋文件權限『剛好等於』 mode 的文件,這個 mode 為類似 chmod
的屬性值,舉例來說, -rwsr-xr-x 的屬性為 4755 !
-perm -mode :搜尋文件權限『必須要全部囊括 mode 的權限』的文件,舉例來說,
我們要搜尋 -rwxr–r– ,亦即 0744 的文件,使用 -perm -0744,
當一個文件的權限為 -rwsr-xr-x ,亦即 4755 時,也會被列出來,
因為 -rwsr-xr-x 的屬性已經囊括了 -rwxr–r– 的屬性了。
-perm /mode :搜尋文件權限『包含任一 mode 的權限』的文件,舉例來說,我們搜尋
-rwxr-xr-x ,亦即 -perm /755 時,但一個文件屬性為 -rw——-
也會被列出來,因為他有 -rw…. 的屬性存在!范例五:找出檔名為 passwd 這個文件

[root@study ~]# find / -name passwd
范例五-1:找出檔名包含了 passwd 這個關鍵字的文件
[root@study ~]# find / -name “passwd

利用這個 -name 可以搜尋檔名啊!預設是完整檔名,如果想要找關鍵字,

可以使用類似 * 的任意字元來處理

范例六:找出 /run 目錄下,文件類型為 Socket 的檔名有哪些?
[root@study ~]# find /run -type s

這個 -type 的屬性也很有幫助喔!尤其是要找出那些怪異的文件,

例如 socket 與 FIFO 文件,可以用 find /run -type p 或 -type s 來找!

范例七:搜尋文件當中含有 SGID 或 SUID 或 SBIT 的屬性
[root@study ~]# find / -perm /7000

所謂的 7000 就是 —s–s–t ,那麼只要含有 s 或 t 的就列出,所以當然要使用 /7000,

使用 -7000 表示要同時含有 —s–s–t 的所有三個權限。而只需要任意一個,就是 /7000 ~瞭乎?

額外可進行的動作:
-exec command :command 為其他指令,-exec 後面可再接額外的指令來處理搜尋到的結果。
-print :將結果列印到螢幕上,這個動作是預設動作!范例八:將上個范例找到的文件使用 ls -l 列出來~

[root@study ~]# find /usr/bin /usr/sbin -perm /7000 -exec ls -l {} \;

注意到,那個 -exec 後面的 ls -l 就是額外的指令,指令不支援命令別名,

所以僅能使用 ls -l 不可以使用 ll 喔!注意注意!范例九:找出系統中,大於 1MB 的文件

[root@study ~]# find / -size +1M
find 的特殊功能就是能夠進行額外的動作(action)。

find 相關的額外動作
該范例中特殊的地方有 {} 以及 \; 還有 -exec 這個關鍵字,這些東西的意義為:
{} 代表的是『由 find 找到的內容』,如上圖所示,find 的結果會被放置到 {} 位置中;
-exec 一直到 \; 是關鍵字,代表 find 額外動作的開始 (-exec) 到結束 (\;) ,在這中間的就是 find 指令內的額外動作。 在本例中就是『 ls -l {} 』啰!
因為『 ; 』在 bash 環境下是有特殊意義的,因此利用反斜線來跳脫。

Copyright © Linux教程網 All Rights Reserved