ubuntu 修改 ls 下的目錄顏色

NO IMAGE

ubuntu 下, ls 顯示的目錄的顏色,怎麼說呢,看起來太費勁了。

於是想著修改成容易識別的顏色。

於是搜尋了一下。

這裡列舉三個搜到的教程吧。

簡單說我按這上面的方法做了,然後都失敗了。

1. http://blog.csdn.net/star11053234/article/details/8680530 

這裡有個ubuntu的截圖,這個背景看著還沒那麼折磨人。

但是他中間粘了那麼多程式碼,給人一種湊字的感覺。

最下面才說重點:到處顏色列表,修改目錄的,把載入顏色列表的命令載入.bashrc中去,也就是啟動自動載入。

但是我執行後並沒有生效。

2. http://blog.chinaunix.net/uid-10540984-id-3058379.html

這個一樣,和第一個差不多,沒有生效。

不過他提到幾個顏色的對應編號,可以看一下。

3.http://dreamthinking.blog.163.com/blog/static/2051811712012313358252/

說著說著說成修改PS1的樣式了。

最後我說說我的解決方法吧。

其實上面說的基本上都正確,但是可能是直接複製別人寫的部落格的緣故吧,所以那些都不能生效。

從 .bash_profile 入手吧,裡面沒什麼配置,主要是執行 .bashrc 檔案。

.bashrc 裡面執行了 .bash_aliases,但是這個是起別名的檔案,預設為空。

然後看到 .bash_functions , 但是隻是一些函式, 預設檔案都不存在。

然後就沒有了。

然後去 / 下找找。

先在 /etc 下找,發現了bash.bashrc。

在最後一行發現了被註釋的一條命令

# Uncomment to use the terminal colours set in DIR_COLORS
#eval "$(dircolors -b /etc/DIR_COLORS)"

然後我去知道,上面提到的解決方法之所以不能生效,是 eval 這條命令寫錯了。

於是我分析了一下這條命令,含義是把執行 命令 dircolors -b /etc/DIR_COLORS 後,把輸出的內容當做命令再次執行。

那自然也可以換成

自己手動執行 dircolors -p > .dircolors ,可以看到輸出的檔案裡有一個 DIR 01;34 # directory.

我們把34修改成合適的顏色,一般35,36都行,自己試試。

然後執行 dircolors -b .dircolors ,可以看到下面的樣子

[email protected]:~ $ dircolors -b .dircolors
LS_COLORS='di=01;35:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01: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:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=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:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=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:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=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:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:';
export LS_COLORS

簡單的說就是把檔案壓縮在一個變數裡面了,各個配置實用冒號(:)分割。我們可以看到,第二個di=01;35就是我們的配置。

最後 export LS_COLORS 把這個變數設定為全域性變數。

所以我們要做的很簡單,在 ~/.bashrc 的最後一行加上這句即可。

eval "$(dircolors -b .dircolors)"

知道含義了,我們這樣也可以 

eval "`dircolors -b .dircolors`"

注意,這個 `是鍵盤左上角 Esc下面的那個鍵,不是單引號。

悲劇的是這個方法在我的電腦上生效了,但是在伺服器上失敗了。
見下:

[email protected]:~ $ dircolors -p > .dir_colors
[email protected]:~ $ dircolors -b .dir_colors
LS_COLORS='';
export LS_COLORS

於是嘗試手動執行 export 。

也就是執行

[email protected]:~ $ LS_COLORS='di=01;35:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01: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:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=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:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=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:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=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:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:';
[email protected]:~ $ export LS_COLORS

然後,發現生效了。

但是執行命令提示這個錯誤

ls: unrecognized prefix: ca
ls: unparsable value for LS_COLORS environment variable

顯然是系統不認識這些縮寫。

那就手動生成這些縮寫吧。

vi 開啟 .dir_colors 檔案。

1. 刪除註釋。

:%s/#\(.*)\//

2.刪除TERM  變數

:%s/^TERM .*$//

3.刪除空行

:%s/\n\ /\r/

4.規範變數

:%s/^\([^ ]\ \) \(.*\)$/\1=\2:/

5.合併行

:%s/\n//

6.刪除多餘的空格

:%s/ //

7.生成變數

:%s/^\(.*\)$/LS_COLORS='\1'/

於是得到沒有縮寫的變數LS_COLORS了。

LS_COLORS='NORMAL=00:FILE=00:DIR=01;34:LINK=01;36:FIFO=40;33:SOCK=01;35:DOOR=01;35:BLK=40;33;01:CHR=40;33;01:ORPHAN=40;31;01:SETUID=37;41:SETGID=30;43:STICKY_OTHER_WRITABLE=30;42:OTHER_WRITABLE=34;42:STICKY=37;44:EXEC=01;32:.tar=01;31:.tgz=01;31:.arj=01;31:.taz=01;31:.lzh=01;31:.zip=01;31:.z=01;31:.Z=01;31:.gz=01;31:.bz2=01;31:.deb=01;31:.rpm=01;31:.jar=01;31:.jpg=01;35:.jpeg=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:.mov=01;35:.mpg=01;35:.mpeg=01;35:.avi=01;35:.fli=01;35:.gl=01;35:.dl=01;35:.xcf=01;35:.xwd=01;35:.flac=01;35:.mp3=01;35:.mpc=01;35:.ogg=01;35:.wav=01;35:'

然後再次試試

竟然提示

ls: unparsable value for LS_COLORS environment variable

好吧,我憤怒了。

然後做了下面四個嘗試

[email protected]:skyyuan $  LS_COLORS="DIR=01;35"
[email protected]:skyyuan $  ls
ls: unparsable value for LS_COLORS environment variable
skyyuan.bashrc*  skyyuan.sh*  tools/
[email protected]:skyyuan $  LS_COLORS="dir=01;35"
sky[email protected]:skyyuan $  ls
ls: unparsable value for LS_COLORS environment variable
skyyuan.bashrc*  skyyuan.sh*  tools/
[email protected]:skyyuan $  LS_COLORS="di=01;35"
[email protected]:skyyuan $  ls
skyyuan.bashrc*  skyyuan.sh*  tools/
[email protected]:skyyuan $  LS_COLORS="DI=01;35"
[email protected]:skyyuan $  ls
ls: unrecognized prefix: DI
ls: unparsable value for LS_COLORS environment variable
skyyuan.bashrc*  skyyuan.sh*  tools/

好吧,變數名必須縮寫且必須小寫。

那只有一個一個的嘗試了。

繼續回覆完整變數名

LS_COLORS='di=01;35:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01: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:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=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:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=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:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=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:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:';

提示

[email protected]:skyyuan $  ls
ls: unrecognized prefix: ca
ls: unparsable value for LS_COLORS environment variable
skyyuan.bashrc*  skyyuan.sh*  tools/

刪除 ca 這個變數名。

LS_COLORS='di=01;35:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=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:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=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:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=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:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:';

再次嘗試,好了,變色了,沒錯誤資訊了。

[email protected]:skyyuan $  ls
skyyuan.bashrc*  skyyuan.sh*  tools/

接下來是把這個變數名儲存起來。

export  LS_COLORS='di=01;35:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=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:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=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:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=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:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:';

可以直接放到 .bashrc 裡面,也可以單獨放到一個檔案裡面(.dir_colors),然後 source 一下。

比如我的

if  [ -f $HOME/skyyuan/.dir_colors ];then
source $HOME/skyyuan/.dir_colors;
fi

.dir_colors 檔案就是上面的

好了,終於完美解決了。