試験運用中なLinux備忘録

2007/07/05

lsコマンドのカラー表示の設定について

lsコマンドでファイルやディレクトリをリスト表示したとき、種類や拡張子によって色が変わるようになっている。この設定はカスタマイズでき、背景色との関係で見づらい部分を直したり、色の付かない拡張子を色付けできるようにしたりできる。

(2008/7/7)256色拡張の拡張色を使用することも簡単にできる。「lsコマンドのカラー出力で256色拡張の色を使用する」を参照。

  1. 色を付けるまでの処理の流れ
  2. 設定ファイルの作成
  3. 設定ファイルの読み込み
  4. 配色・書式の変更

色を付けるまでの処理の流れ

  1. シェルの初期化スクリプト内で、evalコマンド*1dircolorsコマンドを実行する
  2. dircolorsが色の設定を読み込んで、環境変数LS_COLORSをセットするコマンドをシェルに送る*2
  3. シェルに変数LS_COLORSがセットされる
  4. lsコマンドに--color=auto*3オプションを付けると、環境変数LS_COLORSを参照し、これに従って色を付ける

多くのディストリでは、bashが初め([ホームディレクトリ]/.bashrcよりも前)に参照する初期化スクリプトで

  1. [ホームディレクトリ]/.dir_colorsがあればそれを読む
  2. /etc/DIR_COLORSがあればそれを読む
  3. 無ければデフォルト値を使用

という流れの処理を用意しているのだが、そうなっていないディストリも存在する。/etc/DIR_COLORSの有無や、[ホームディレクトリ]/.dir_colorsが反映されているかどうかで分かるが、Gentoo Linuxでは用意されていて、Debian,Ubuntuでは用意されていない。

上記の処理が用意されていないシェル(zshなど)では、手動でdircolorsコマンドを実行させる必要がある。

また、dircolorsコマンドを使用せず、シェルの初期化ファイル(.bashrcなど)に直接LS_COLORSを記述する方法もある。

(2014/9/8)Debian/Ubuntuのbashでは[ホームディレクトリ]/.dircolorsが自動的に読み込まれる。

設定ファイルの作成

$ dircolors -p > ~/.dir_colors

これを行うと、デフォルト設定をホームディレクトリ内の.dir_colorsというファイルに出力する。

設定ファイルの読み込み

この処理は、シェルの初期化ファイルに記述するとよい。bashではディストリによっては自動的に処理される。zshの場合、[ホームディレクトリ]/.zshenvに記述するとよい。

eval $(dircolors -b ~/.dir_colors)

配色・書式の変更

[引用] ファイル名: /etc/DIR_COLORS

# Below are the color init strings for the basic file types. A color init
# string consists of one or more of the following numeric codes:
# Attribute codes:
# 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed
# Text color codes:
# 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white
# Background color codes:
# 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white

この部分の解説を参考に、「;」区切りで2桁のコードを指定していく。このファイルの中に設定例はたくさんあるので、それを参考にしてもOK。

DIR 01;04;34;40	# directory

のように、太字・下線・前景色・背景色というような設定もできる。ディレクトリは目立つほうがいいと思うので、色か装飾のどちらかでも目立つようにしておくとよいかもしれない。

不充分かもしれないが、ある程度の修正を加えてみたので、下に例として/etc/DIR_COLORSとの差分をとってみた。

デフォルト設定は、lsdircolorsを含む「coreutils」パッケージのバージョンが上がると多少変化するため、このように、修正した部分を残しておくと、新しいデフォルト値をベースに、設定を作り直したりする*4場合に役に立つかもしれない。

--- /etc/DIR_COLORS
+++ /home/[ユーザ名]/.dir_colors
@@ -60,7 +60,7 @@
 # 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white
 NORMAL 00	# global default, although everything should be something.
 FILE 00		# normal file
-DIR 01;34	# directory
+DIR 01;04;34;40	# directory
 LINK 01;36	# symbolic link.  (If you set this to 'target' instead of a
 		# numerical value, the color is as for the file pointed to.)
 FIFO 40;33	# pipe
@@ -117,8 +117,11 @@
 .cpio 01;31
 .7z  01;31
 .rz  01;31
+.sqfs 01;31
+.sqfs3 01;31
 
 # image formats
+.svg 01;35
 .jpg 01;35
 .jpeg 01;35
 .gif 01;35
@@ -168,6 +171,23 @@
 .log 00;32
 .tex 00;32
 .doc 00;32
+.odt 00;32
+.ods 00;32
+.odp 00;32
+.odb 00;32
+.odg 00;32
+.odf 00;32
+.sgml 00;32
+.dsl 00;32
+.htm 00;32
+.html 00;32
+.xml 00;32
+.xsl 00;32
+.rnc 00;32
+.rng 00;32
+.css 00;32
+.chm 00;32
+.ebuild 00;32
 
 # audio formats
 .aac 00;36
@@ -181,3 +201,16 @@
 .ogg 00;36
 .ra 00;36
 .wav 00;36
+# Configuration Files
+.ini 00;33
+.cfg 00;33
+.conf 00;33
+.reg 00;33
+# *rc 00;33
+# Development Files
+.c 01;33
+.h 01;33
+.cc 01;33
+.cpp 01;33
+.cxx 01;33
+.po 01;33

*1:引数をシェルのコマンドとして実行するコマンド

*2:デフォルトではbashなどのBシェル系のシェルが解釈するexportコマンドを出力し、tcshなどのCシェル系のシェルでは-cオプションを付け、setenvコマンドを送る必要がある

*3--colorもしくは--color=alwaysでも色が付くが、ファイルにリダイレクトした場合などにも、色を変えるためのエスケープシーケンスが含まれてしまう

*4:このファイルを作り直す必要性は基本的にはないため、あまりそういったことをする人はいない気もするが...

はてなユーザーのみコメントできます。はてなへログインもしくは新規登録をおこなってください。

(C) 2007-2015 kakurasan
本ウェブログの表示につきましては、横幅1,000ピクセル以上を推奨します。