在Linux命令行中自定義文本顏色
在 Linux 命令行當(dāng)中使用不同顏色以期提供一種根據(jù)文件類型來(lái)識(shí)別文件的簡(jiǎn)單方式。你可以修改這些顏色,但是在做之前應(yīng)該對(duì)你做的事情有充分的理由。
如果你在 Linux 命令行上花費(fèi)了大量的時(shí)間(如果沒有,那么你可能不會(huì)讀這篇文章),你無(wú)疑注意到了 ls 以多種不同的顏色顯示文件。你可能也注意到了一些區(qū)別 —— 目錄是一種顏色,可執(zhí)行文件是另一種顏色等等。
這一切是如何發(fā)生的呢?以及,你可以選擇哪些選項(xiàng)來(lái)改變顏色分配可能就不是很多人都知道的。
一種方法是運(yùn)行 dircolors 命令得到一大堆展示了如何指定這些顏色的數(shù)據(jù)。它會(huì)顯示以下這些東西:
$ dircolorsLS_COLORS='rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:';export LS_COLORS
如果你擅長(zhǎng)解析文件,那么你可能會(huì)注意到這個(gè)列表有一種模式。用冒號(hào)分隔開,你會(huì)看到這樣的東西:
$ dircolors | tr ":" "\n" | head -10LS_COLORS='rs=0di=01;34ln=01;36mh=00pi=40;33so=01;35do=01;35bd=40;33;01cd=40;33;01or=40;31;01
OK,這里有一個(gè)模式 —— 一系列定義,有一到三個(gè)數(shù)字組件。我們來(lái)看看其中的一個(gè)定義。
pi=40;33
有些人可能會(huì)問(wèn)的第一個(gè)問(wèn)題是“pi 是什么?”在這里,我們研究的是顏色和文件類型,所以這顯然不是以 3.14 開頭的那個(gè)有趣的數(shù)字。當(dāng)然不是,這個(gè) “pi” 代表 “pipe(管道)” —— Linux 系統(tǒng)上的一種特殊類型的文件,它可以將數(shù)據(jù)從一個(gè)程序傳遞給另一個(gè)程序。所以,讓我們建立一個(gè)管道。
$ mknod /tmp/mypipe p$ ls -l /tmp/mypipeprw-rw-r-- 1 shs shs 0 May 1 14:00 /tmp/mypipe
當(dāng)我們?cè)诮K端窗口中查看我們的管道和其他幾個(gè)文件時(shí),顏色差異非常明顯。

font colors
在 pi 的定義中(如上所示),“40” 使文件在終端(或 PuTTY)窗口中使用黑色背景顯示,31 使字體顏色變紅。管道是特殊的文件,這種特殊的處理使它們?cè)谀夸浟斜碇型怀鲲@示。
bd 和 cd 定義是相同的 —— 40;33;01,它有一個(gè)額外的設(shè)置。這個(gè)設(shè)置會(huì)導(dǎo)致 塊設(shè)備(bd)和 字符設(shè)備(cd)以黑色背景,橙色字體和另一種效果顯示 —— 字符將以粗體顯示。
以下列表顯示由文件類型所指定的顏色和字體分配:
setting file type======= =========rs=0 reset to no colordi=01;34 directoryln=01;36 linkmh=00 multi-hard linkpi=40;33 pipeso=01;35 socketdo=01;35 doorbd=40;33;01 block devicecd=40;33;01 character deviceor=40;31;01 orphanmi=00 missing?su=37;41 setuidsg=30;43 setgidca=30;41 file with capabilitytw=30;42 directory with sticky bit and world writableow=34;42 directory that is world writablest=37;44 directory with sticky bitex=01;93 executable
你可能已經(jīng)注意到,在 dircolors 命令輸出中,我們的大多數(shù)定義都以星號(hào)開頭(例如,*.wav=00;36)。這些按文件擴(kuò)展名而不是文件類型定義顯示屬性。這有一個(gè)示例:
$ dircolors | tr ":" "\n" | tail -10*.mpc=00;36*.ogg=00;36*.ra=00;36*.wav=00;36*.oga=00;36*.opus=00;36*.spx=00;36*.xspf=00;36';export LS_COLORS
這些設(shè)置(上面列表中所有的 00;36)將使這些文件名以青色顯示。可用的顏色如下所示。

all colors
如何改變?cè)O(shè)置
你要使用 ls 的別名來(lái)打開顏色顯示功能。這通常是 Linux 系統(tǒng)上的默認(rèn)設(shè)置,看起來(lái)是這樣的:
alias ls='ls --color=auto'
如果要關(guān)閉字體顏色,可以運(yùn)行 unalias ls 命令,然后文件列表將僅以默認(rèn)字體顏色顯示。
你可以通過(guò)修改 $LS_COLORS 設(shè)置和導(dǎo)出修改后的設(shè)置來(lái)更改文本顏色。
$ export LS_COLORS='rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;...
注意:上面的命令由于太長(zhǎng)被截?cái)嗔恕?/p>
如果希望文本顏色的修改是永久性的,則需要將修改后的 $LS_COLORS 定義添加到一個(gè)啟動(dòng)文件中,例如 .bashrc。
更多關(guān)于命令行文本
你可以在 NetworkWorld 的 2016 年 11 月的帖子中找到有關(guān)文本顏色的其他信息。























