我們知道使用 ls 指令可以列出目錄下的各式檔案及目錄,但是所有類型的檔案都會以相同的顏色輸出,難以在第一時間就了解檔案的種類,我們還得加上 -l 參數列出詳細的資訊才能知道,這時如果可以依照顏色輸出不同類型的檔案的話,會使檔案列表更加地一目瞭然。
為 ls 結果上色
加上 --color=auto 參數,它會以不同的顏色區別各類檔案:
1 | ls --color=auto |

設定 LS_COLORS 修改 ls 輸出顏色
如果想對 ls 的輸出顏色做修改,可以修改環境變數 LS_COLORS :
1 | LS_COLORS='di=01;35:'; export LS_COLORS |
di:檔案類型,di為目錄。01;35:兩個設定數字,以;區隔,第一個數字為字型(01為粗體 Bold ),第二個數字為顏色(35為紫色 Purple )。::分隔不同檔案類型設定的區隔符。
設定的數字沒有順序之分,因此 01;35 也可以設定為 35;01 。
下列為常用的字型列表:
| 數字 | 字型 |
|---|---|
| 00 | 預設 |
| 01 | 粗體 |
| 04 | 底線 |
字型可以多選,例如設定粗體又想要有底線的話,可以設置 01;04 。
下列為顏色列表:
| 數字 | 顏色 |
|---|---|
| 30 | 黑 |
| 31 | 紅 |
| 32 | 綠 |
| 33 | 橘 |
| 34 | 藍 |
| 35 | 紫 |
| 36 | 青 |
| 37 | 灰 |
除了字體的顏色, LS_COLORS 也可以設定背景色,下面是背景色的編碼:
| 數字 | 背景顏色 |
|---|---|
| 40 | 黑 |
| 41 | 紅 |
| 42 | 綠 |
| 43 | 橘 |
| 44 | 藍 |
| 45 | 紫 |
| 46 | 青 |
| 47 | 灰 |
接著如果想要設定除了目錄外不同的檔案類型顏色時,每種類型也會對應一個鍵值,就像是 di 表示為目錄一樣,下列為個檔案類型的列表:
| 鍵值 | 名稱 | 說明 |
|---|---|---|
| fi | FILE | 一般的檔案 |
| di | DIR | 目錄 |
| ln | SYMLINK, LINK, LNK | Symbolic link |
| *.extension | 此副檔名的檔案,例如: *.jpg 就會涵蓋所有以 jpg 為副檔名的檔案 |
到這裡我們就已經知道所有主要的設定編碼了,現在來看個例子,如果我們想要將目錄設定為藍底紅字並且為粗體加底線的話,我們可以這樣做:
1 | LS_COLORS='di=01;04;44;31:'; export LS_COLORS |

完整的編碼表可以參考這篇文章: Configuring LS_COLORS 。
設定多個類型的顏色
如果要設定多個類型的顏色,可以在 : 後面再加上其他的類型設定,例如:
1 | LS_COLORS='di=01;04;44;31:ln=00;33:'; export LS_COLORS |
如果想要對 LS_COLORS 設定多次的話,可以將原本的值加進來:
1 | LS_COLORS=$LS_COLORS:'di=0;35:' ; export LS_COLORS |
在每次啟動 Shell 時設置 LS_COLORS 環境變數
現在我們已經會設定 ls 的顏色了,但是每次重新啟動 Shell 時, LS_COLORS 的值都會恢復預設,導致之前的設定消失,為解決這個問題,我們可以在 ~/.zshrc (使用 Bash 時是 ~/.bashrc )中配置這項設定,讓 Shell 啟動時可以直接覆寫 LS_COLORS 變數:
1 | echo "LS_COLORS='di=01;04;44;31:ln=00;33:'; export LS_COLORS" >> ~/.zshrc |
總結
ls 指令在加入 --color=auto 後,可以對其輸出的結果產生顏色,方便使用者辨識。
如果想要客製顏色時,可以藉由修改環境變數 LS_COLORS 來達成,這樣一來就可以客製成符合使用習慣的顏色,也可以搭配 theme 做出變化。