ls 命令輸出的顏色:它們意味著什么?
相信你一定使用過 ls
命令來 列出目錄的內(nèi)容。在 Ubuntu 和許多其他發(fā)行版中,你將看到不同顏色的 ls
命令輸出。
如果你沒有看到過,你可以這樣獲得如下所示的彩色輸出:
ls --color=auto
但是你有沒有想過這些顏色在 ls
命令輸出中意味著什么?
我將回答本文中的問題。如果你的終端默認(rèn)情況下不顯示它,我還將展示如何使用 ls
命令獲取彩色輸出。
Ubuntu 中 ls 命令中使用的顏色的含義
?? ls 命令輸出的顏色沒有固定的標(biāo)準(zhǔn)。不同的終端和發(fā)行版使用不同的顏色編碼,你也可以根據(jù)自己的喜好進(jìn)行修改。換句話說,不要依賴顏色。
我在本節(jié)中使用默認(rèn)的 Ubuntu 終端及其顏色配置文件。
當(dāng)你 使用 ls 命令列出文件 時(shí),它會使用不同的顏色來指示不同類型的文件。
大多數(shù)終端都會以不同的顏色顯示可執(zhí)行文件、鏈接、常規(guī)文件和目錄,以便你可以輕松區(qū)分它們。
有些終端(例如 Ubuntu 中的默認(rèn)終端)將其提升到一個(gè)新的水平,并為音樂文件、圖像和視頻添加更多顏色。
為了演示,我列出了來自不同目錄的文件,這些文件在 Ubuntu 中用不同的顏色填充了我的終端窗口:
different colors used by the ls command
看起來很混亂? 讓我一一為你解密吧!
顏色 | 描述 |
粗體藍(lán)色 | 目錄 |
無色 | 文件或硬鏈接 |
粗體青色 | 指向文件的符號鏈接。 |
粗體綠色 | 可執(zhí)行文件( |
粗體紅色 | 歸檔文件(主要是 tarball 或 zip 文件) |
洋紅色 | 表示圖像和視頻文件 |
青色 | 音頻文件 |
黃色配黑色背景 | 管道文件(稱為 FIFO) |
粗體紅色配黑色背景 | 損壞的符號鏈接 |
無色(白色)配紅色背景 | 表示設(shè)置用戶 ID 文件 |
黑色配黃色背景 | 表示設(shè)置組 ID 文件 |
白色與藍(lán)色背景 | 顯示粘滯位目錄 |
藍(lán)色配綠色背景 | 指向其他可寫目錄 |
黑色配綠色背景 | 當(dāng)目錄同時(shí)具有粘滯位和其他可寫目錄的特征時(shí) |
?? 再次強(qiáng)調(diào),上述顏色數(shù)據(jù)基于終端的默認(rèn)設(shè)置,如果更改調(diào)色板,將不會得到類似的結(jié)果。
但是如果你的終端不顯示任何顏色怎么辦? 好吧,這是有原因和解決方案的。
如果 ls 命令不顯示彩色輸出怎么辦?
事情是這樣的。默認(rèn)情況下,ls
命令不應(yīng)在輸出中顯示顏色。如果你使用 --color=auto
標(biāo)志,它將顯示顏色。
ls --color=auto
那么為什么 ls
命令在 Ubuntu 和其他一些發(fā)行版中默認(rèn)添加顏色呢? 這是因?yàn)槟愕陌l(fā)行版為 ls
命令設(shè)置了別名,以便在執(zhí)行 ls
命令時(shí)使用 --color=auto
標(biāo)志:
alias
因此,如果 ls
命令未顯示彩色輸出,則是因?yàn)槟J(rèn)情況下沒有設(shè)置別名。
現(xiàn)在,每當(dāng)你使用 ls
命令時(shí),你都可以使用 --color=auto
標(biāo)志。
Use --color=auto flag with the ls command to get the colored output
但這不太方便。相反,你應(yīng)該創(chuàng)建別名并將其添加到 .bashrc
中,以便 ls
命令默認(rèn)顯示顏色。
為 ls 創(chuàng)建一個(gè)永久別名來顯示顏色
要創(chuàng)建永久別名,首先,使用以下命令打開 .bashrc
文件:
nano ~/.bashrc
alias ls='ls --color=auto'
完成后,保存更改并退出 nano 文本編輯器。
要使你剛剛所做的更改生效,請 源引source .bashrc
文件:
source ~/.bashrc
就是這樣! 從現(xiàn)在開始,你可以使用彩色輸出。
ls 命令從哪里獲取顏色?
現(xiàn)在有趣的部分來了。ls
命令的顏色在哪里定義? 答案是 LS_COLORS
環(huán)境變量。
是的。這是名為 LS_COLORS
的特殊環(huán)境變量,它定義 ls
命令使用的顏色。
Value of the LS_COLORS env variable in Ubuntu
這很好,但是誰定義了這個(gè)變量呢? 如果你想做出一些改變怎么辦? 我也來回答一下這些問題。
實(shí)際上,你有一個(gè)專門的 dircolors
命令來為 ls
命令設(shè)置顏色。
不同的 Shell 有不同的顏色配置文件格式。這就是為什么在使用此命令時(shí)應(yīng)指定 Shell。
dircolors command output for bash
如你所見,它定義了 LS_COLORS
環(huán)境變量并將其導(dǎo)出,以便該變量可用于子 Shell。
現(xiàn)在,如果你想使用它,你可以將其復(fù)制粘貼到你的 .bashrc
文件或像這樣重定向輸出:
dircolors -b >> .bashrc
并 源引source
理解顏色配置文件
LS_COLORS
包含由冒號(:
)分隔的鍵值對數(shù)據(jù)。如果該值有多個(gè)部分,則它們之間用分號(;
)分隔。
鍵通常是預(yù)定義的。值部分代表顏色。
因此,如果顯示 ln=01;36
,則表示對于符號鏈接,字體為粗體,顏色(36
)為青色。
00
為正常,01
為粗體,4
為下劃線。31
代表紅色,32 代表綠色等。顏色代碼遵循 ANSI 轉(zhuǎn)義代碼。
另一個(gè)例子。or=40;31;01
表示鏈接到不存在的文件(鍵為 or
),使用黑色背景(顏色代碼 40
)、紅色(31
)和粗體字體(代碼 01
)。
我認(rèn)為順序并不重要,因?yàn)榇a不重疊。31
是前景色紅色的代碼,41
是背景紅色的顏色。因此,如果使用 41
,你就知道它用于背景顏色。
使用 ls 命令執(zhí)行更多操作
ls
命令可以做更多的事情,為此,我們制作了有關(guān)如何使用 ls
命令的詳細(xì)教程:
Abhishek Prakash 提供資料。