那些你不能不會的 Linux 基礎指令!(下)
那些你不能不會的 Linux 基礎指令!(下)
感謝您點進本篇文章,我是 LukeTseng,近期接觸到 Linux 系統,時常需要面對黑色終端機,有些時候想做到一些操作,卻也不知道那個指令叫什麼,我也沒有好好奠基 Linux 的基礎指令,所以特此製作本篇文章!希望能解決到你我的痛點!
若本篇文章某處有誤,敬請告知,感謝!
萬用字元(Wildcard)
最常見的就是 * 跟 ? 這兩個字元。
* 代表「任意長度的任意字元」,可以是 0 個、1 個或多個字元。
範例如下:
ls *:列出目前目錄下所有非隱藏檔案。
以下是 ls * 跟 ls 的差別:

ls *.txt:列出所有副檔名為.txt的檔案(如a.txt、b.txt)。

ls a*:列出所有以a開頭的檔案(如apple、a.txt)。

ls *a*:列出所有檔名裡面有包含a這個字元的檔案。
下圖中使用 ls *a* 就找到 abcdefg、alphafile … 以及 snap 目錄底下的 firmware-updater 跟 snapd-desktop-integration 檔案。

? 代表「任意一個字元」,只能匹配一個字元。
如:
ls ?.txt:列出所有檔名只有一個字元且副檔名為.txt的檔案(如a.txt、b.txt)。
像以下的 ab.txt 就沒有被印出來,但 a.txt、b.txt 是有的,因為 ? 只匹配單一一個字元而已,除非你再多加一個 ? 字元,如下面第二張圖。

以下這張圖再多加一個 ?,變成 ls ??.txt,結果只會顯示一個檔案 ab.txt,因為 a.txt 跟 b.txt 的檔名沒有恰含有兩個的字元。

ls file?.txt:列出像file1.txt、fileA.txt這種檔案,但不會匹配到file10.txt。
以下不會顯示 file100.txt 跟 file10.txt 檔案。

其他範例:
rm *.png:刪除所有副檔名為.png的檔案。cp file?.txt backup/:複製所有像file1.txt、fileA.txt這類檔案到backup目錄。
有關這個萬用字元,以下有幾個注意事項:
*和?不會匹配以.開頭的隱藏檔案,除非明確指定。- 若要讓這些符號失去特殊意義(像是真的要找檔名有
*或?),可用反斜線\做為跳脫字元,例如ls \*。
搜尋類型指令
which
which 是 Linux 中用於查找可執行檔(.exe)路徑的工具,會根據環境變數 PATH 的設定,搜尋並顯示指令的完整路徑。
基本語法:
1 | which [options] executable_file |
常用參數:
-a或--all選項可以列出 PATH 中所有匹配的指令。-V或--version選項用於顯示版本資訊。
相關範例:
- 查找 bash 執行檔在哪裡:
which bash- 結果:
/usr/bin/bash
- 結果:
- 查找多個路徑:
which -a python3
1 | /usr/bin/python3 |
find
find 顧名思義就是拿來搜尋某個檔案用的。
基本語法:
1 | find [path] [options] [condition] |
會在 path 路徑當中,尋找符合 condition(條件)的檔案。
依檔名搜尋
使用 -name 參數。
find . -name abc.txt 會在當前目錄下找尋檔案名稱為 abc.txt 的檔案。
若要不區分大小寫,可以使用 -iname 參數,如:find /home -iname abc.txt。
檔名中可以使用萬用字元 *,如:find ./ -name "*foo*" 會找出包含 "foo" 關鍵字的所有檔案。
以下是 find . -iname "file*.txt" 的範例示圖,會在當前目錄(.)中尋找所有 file 開頭的 .txt 檔案。

依檔案型態搜尋
使用 -type 參數。
-type f表示只搜尋一般檔案。-type d表示只搜尋目錄。
而上述其他可用的類型還包括:l(符號連結)、b(區塊裝置)、c(字元裝置)、p(管道)、s(socket)。
範例:
find ./ -name "*foo*" -type f會找出檔名包含"foo"的所有檔案。
依檔案大小搜尋
使用 -size 參數,+ 表示大於、- 表示小於,如 find ./ -size +500M 會找出所有大於 500 MB 的檔案。
常用單位:
- c(bytes)
- k(Kilobytes)
- M(Megabytes)
- G(Gigabytes)
範例:
find ./ -name "*.jpg" -size -160k -delete,找出並刪除 < 160k 的 .jpg 照片。
依時間搜尋
-mtime、-mmin參數搜尋檔案的「修改」時間(天和分鐘)-ctime和-cmin參數分別搜尋檔案的「建立」時間(天和分鐘)-atime和-amin參數分別搜尋檔案的「最後開啟」時間(天和分鐘)
範例:
find ./ -type f -mmin -5會找出 < 5 分鐘以內變動過的所有檔案。find ./ -mtime -3找出 < 3 天內修改的檔案。find ./ -mtime +3則是找出 > 3 天前修改的檔案。
實際應用
像是你想要清理系統中超過 7 天沒有使用的暫存檔,可用:find /tmp -type f -atime +7 -delete
字串處理指令
cat
cat 是來自英文 concatenate 中取 cat 的縮寫,用來一次性顯示檔案內容、合併檔案,或建立新檔案的指令。
用法:
cat file_name:顯示整個檔案內容。cat file1 file2 > newfile:合併file1和file2,輸出到newfile。cat > newfile:從鍵盤輸入內容,Ctrl+D 結束並儲存。
裡面的 > 符號表示輸出重新導向(Output Redirection)的意思,用於將指令的執行結果輸出到檔案中,而非顯示在終端機上。
常用參數:
-n:顯示行號。-b:只對非空行編號。-s:壓縮多個空行為一行。
範例:
1 | cat test.txt |
以下是 cat test.txt 的範例圖,會從 test.txt 擷取所有文字,並輸出在終端機上面。

以下是 cat file1.txt file2.txt > merged.txt 的範例圖,由於原本 cat 會將文檔內容輸出在終端機上嘛,所以透過 > 可以將輸出的內容輸出到某個檔案上面。

以下是 cat -n test.txt 的範例圖,加上 -n 參數可以顯示行數。

more
more 與 cat 是類似的東西,另外 more 也沒有什麼英文縮寫,more 就是 more。而他跟 cat 的差別在於 more 可以分頁顯示檔案內容,適合查看大型檔案。
用法:more file_name。
常用操作:
- 空白鍵:下一頁。
- Enter:下一行。
/string:搜尋字串,其中string是要拿來填寫的字串。q:退出。v:進入 vi 編輯器。
以下是 more bbc_new.txt 的範例,內容均擷取自新聞:https://www.bbc.com/news/articles/c87400e3j5eo

出現 --More--(24%) 的訊息可以按下空白鍵往下一頁:

grep
grep 是取自英文 global regular expression print 的縮寫,是用來搜尋檔案中符合條件的字串,當中支援正規運算式(Regex:regular expression)。
用法:
grep 'string' file_name:搜尋檔案中包含指定字串的行。- 常結合
cat跟管道(pipe)符號:cat file_name | grep 'string'。
管道符號是 |,在鍵盤的 ] 右中括號的右邊,也寫著反斜線的符號,shift + \ 就可以打出來。
管道符號(|)是 Linux 中將一個指令的輸出直接傳遞給另一個指令作為輸入的特殊符號,所以可以看到 cat file_name | grep 'string' 的地方,grep 後面就不需要再加上 file_name 了,因為前面 cat file_name 就當成是他的輸入。
grep 常用參數:
-i:忽略大小寫。-v:反向選取,不包含字串的行。-n:顯示行號。-w:精確匹配整個字。-r:遞迴搜尋目錄。-A N:顯示匹配行及後 N 行。-B N:顯示匹配行及前 N 行。-C N:顯示匹配行及前後 N 行。
相關範例:
grep 'root' /etc/passwd
使用 grep 會找出相對應的字串,找到的話會顯示紅字,白字為符合條件字串所在的行。

grep -i 'error' log.txt
-i 為不分大小寫。grep 可以在大量的詞海裡面找出相對應的字串,非常方便。

grep -n 'main' *.c
-n 參數為字串所在顯示行數,以下動作就在 .c 檔案中要找到 main 字串,顯示於 a.c 檔案中的第三行。

cat test.txt | grep 'hello'
結合管道符號來做字串過濾的範例如下。
從 cat test.txt 輸出的內容傳遞給 grep 作為輸入的參數做使用,效果等同於 grep 'hello' test.txt

head
head 指令是 Linux 中用來顯示檔案「前幾行」內容的工具。
head 預設顯示檔案的前 10 行,如:head filename.txt 會印出 filename.txt 的前 10 行。
若要指定行數可這樣寫:head -n 5 filename.txt,或簡寫 head -5 filename.txt。
也可顯示多個檔案的開頭內容:head file1.txt file2.txt。
顯示前 N 個位元組(bytes):head -c 20 filename.txt,顯示前 20 個 bytes。
tail
有 head 就會有 tail,tail 可顯示文字檔的後幾行內容,預設是顯示後十行的內容。
使用方法與 head 相同。
wc
wc 可不是廁所哦XD,wc 的英文全名是 word count,在 Linux 中用來統計檔案內容的行數、字數、字元數、位元組數等的基本指令。
功能:
- 計算行數(lines)
- 計算字數(words)
- 計算字元數(characters)
- 計算位元組數(bytes)
語法:
1 | wc [options] file_name |
若不指定檔案,wc 會從標準輸入讀取資料。
常用參數:
-l:只顯示行數。-w:只顯示字數。-c:只顯示 byte 數。-m:只顯示字元數。-L:顯示最長行的長度。
相關範例:
wc test.txt,計算檔案的行數、字數、位元組數。
輸出格式:行數 字數 位元組數 檔案名

wc -l test.txt只顯示行數。

wc -w test.txt只計算字數。wc -c test.txt只顯示字元數。grep 'error' log.txt | wc -l,統計log.txt中包含"error"的行數。
重新導向(redirect)工具
>、<、>> 這三個符號都是在 Linux 中做重新導向的工具,可以將指令的輸出或輸入改變方向。
>
> 大於符號為輸出重導向(覆蓋),功能是將指令的「標準輸出」(stdout)寫入指定檔案,覆蓋原有內容。
範例:cat test.txt > result.txt
上面的指令會把 test.txt 的內容寫到 result.txt,原本的 result.txt 會被覆蓋(result.txt 會被清空,然後再把 test.txt 的文本輸出到 result.txt 上面去)。
下圖展示了這個指令使用前後的效果:

>>
這個指令也是輸出重導向,但是跟 > 不同的是,>> 會追加在文檔後面,而非直接覆蓋掉所有內容。
範例:cat test.txt >> result.txt
下圖展示了這個指令使用前後的效果:

<
< 是輸入重導向,用於將檔案內容作為指令的「標準輸入」(stdin)來源,取代原本的鍵盤輸入。
範例:cat < test.txt
這個指令等同於 cat test.txt,因為 < 就是在讀取檔案內容。
下圖展示了指令的使用效果:

Linux 版工作管理員
ps
首先介紹 ps 指令,ps 的全名是 process status,用來顯示目前系統中正在執行的程序(process)狀態。類似 Windows 的工作管理員,可以讓你查詢系統上所有或特的程序資訊,包括程序 ID、使用者、資源佔用、啟動時間等。
若單一輸入 ps 指令,只會顯示「目前這個終端機」下執行的程序,不包含其他使用者或背景服務。輸出通常包含欄位:
- PID(程序 ID)
- TTY(終端機)
- TIME(CPU 使用時間)
- CMD(指令名稱)

ps aux
ps aux 這一串指令是最常用的程序查詢組合之一,能夠列出所有 user 的所有程序,並顯示詳細資訊。這個組合的三個選項分別代表:
a:顯示所有使用者的程序(不只自己的)u:以「使用者為主」的格式顯示,包含USER、%CPU、%MEM等欄位x:顯示沒有控制終端機(TTY)的程序(例如系統服務)
輸入 ps aux 可能會出現以下畫面:

結合 grep 過濾特定條件
範例指令:ps aux | grep root。
輸入後會呈現下圖資訊,會從 ps aux 中找出所有 root 的程序:

總整理
萬用字元(Wildcard)
星號(*)代表任意長度的任意字元(包括零個),如
ls *.txt列出所有.txt檔案。ls *a*找出檔名包含字母a的所有檔案。
問號(?)只匹配單一字元,如
ls ?.txt只列出檔名為一個字元的.txt檔案(如a.txt)ls ??.txt則列出檔名恰好兩個字元的檔案(如ab.txt)。
萬用字元不會匹配以點(.)開頭的隱藏檔案,除非明確指定,若要搜尋檔名真的包含 * 或 ? 符號,需使用反斜線 \ 做跳脫字元。
搜尋類型指令
which指令用於查找可執行檔的完整路徑,根據環境變數 PATH 進行搜尋,- 範例:
which bash會顯示/usr/bin/bash,加上-a參數可列出所有匹配的路徑。
- 範例:
find可依檔名(-name)、檔案類型(-type)、大小(-size)、時間(-mtime、-ctime、-atime)等條件搜尋檔案。- 範例:
find . -name "*.txt"找出當前目錄下所有.txt檔案。
- 範例:
字串處理指令
cat指令源自 concatenate,用於顯示檔案內容或合併檔案。- 範例:
cat file1.txt file2.txt > merged.txt將兩個檔案合併輸出給merged.txt cat -n test.txt顯示行號。
- 範例:
more指令用於分頁顯示大型檔案,按空白鍵翻頁,按 Enter 往下一行,輸入/string可搜尋字串,按 q 退出。grep指令是 global regular expression print 的縮寫,用於搜尋檔案中符合條件的字串,支援正規運算式。- 常用參數:
-i(忽略大小寫)-n(顯示行號)-v(反向選取)-r(遞迴搜尋)
- grep 常結合管道符號(
|)使用,如cat test.txt | grep 'hello'等同於grep 'hello' test.txt。
- 常用參數:
head、tail指令分別顯示前幾行跟後幾行的文字,-n numbers可以調整要顯示的行數。wc全名為 word count,計算用來統計檔案內容的行數、字數、字元數、位元組數。
重新導向工具
- 大於符號(
>)將指令輸出寫入檔案並覆蓋原有內容,如cat test.txt > result.txt。 - 雙大於符號(
>>)將輸出追加到檔案末端而不覆蓋,如cat test.txt >> result.txt。 - 小於符號(
<)將檔案內容作為指令的輸入來源,cat < test.txt等同於cat test.txt。
程序管理工具
ps 指令全名為 process status,用於顯示系統中正在執行的程序狀態,類似 Windows 工作管理員。
單獨輸入 ps 只顯示當前終端機下的程序,含 PID(程序 ID)、TTY(終端機)、TIME(CPU 使用時間)、CMD(指令名稱)等欄位。
ps aux 指令是最常用的組合,列出所有使用者的所有程序及詳細資訊。其中 a 顯示所有使用者的程序,u 以使用者格式顯示(包含 USER、%CPU、%MEM 等欄位),x 顯示沒有控制終端機的程序(如系統服務)。
結合 grep 可過濾特定條件,如 ps aux | grep root 找出所有 root 使用者的程序。
參考資料
【Linux】一步一步学Linux——which命令(45)_linux which命令详解-CSDN博客
Unix/Linux 的 find 指令使用教學、技巧與範例整理 – G. T. Wang
在 Linux 下使用 find 指令查詢目錄與檔案的速查筆記 | The Will Will Web
Day17-wildcard 萬用字元(一) - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天
Linux常用命令:find、grep、vim、cat、less、more_less和vim-CSDN博客




