FreeBSDを使っていてたまに他の人が使っているLinuxを見ると、lsの結果が色分けされていてとても羨ましく見えます。
FreeBSDはデフォルトの設定ではlsは白黒でしか表示できませんが、いくつかの方法でlsをカラー表示することが出来ます。
lsをカラー表示する方法は何種類かあります。
手軽に出来るものから順に
の3種類です。
FreeBSDのlsはcolorlsというlsで、標準でカラー表示をサポートしています。
特に気にならない方はcolorlsでカラー化するのが良いかと思います。
私が普段愛用しているのは、Linuxでも使われているgnulsによるカラー表示です。
配色が綺麗なのと細かい設定ができることが使用理由です。
ちなみに一番上のtcshによるカラー化は正確にはls-Fというtcshのコマンドを使うので正確には"ls"のカラー化ではありません。
tcshのファイル補完候補やls-Fでの表示をカラーにするには、
> set color
とするだけで、カラー表示が可能になります。
これは一時的なものなので、.cshrcにでも書いておくと良いでしょう。
ディレクトリや実行ファイルなどが混在しているディレクトリ(例えば/など)で、
> ls-F
としてみてください。
するとディレクトリ一覧がカラーで表示されたと思います。
これをlsに置き換えたい場合は、
> vi .cshrc
alias ls ls-F
set color
とすれば良いです。
FreeBSD標準のlsはcolorlsというlsです。
これはその名の通り、カラー化をサポートしているlsなのでオプションを指定してやることによって簡単にカラー表示させることが可能です。
> ls -G
とGオプションを付けてやることによって、カラー表示されるようになります。
このままカラーでlsを使いたい場合は、
> vi .cshrc
alias ls ls -G
としてやればOKです。
colorlsはコンソール上ではきちんとカラー表示されますが、Xを起動してxtermやktermでls -Gとしてもカラー表示されません。
xtermやkterm上でカラー表示させるには、
setenv TERM kterm-color(またはxterm-color)
を入力してやれば出来るようになりますが、これをXではないコンソール上で実行すると様々な表示がおかしくなって大変なことになってしまいます。
これはコンソールで作業しているときのTERMがcon25となっているんですが、これがkterm-colorなどに変わってしまうがために起こる現象です。
つまり、コンソール上ではTERM con25で、X上ではkterm-colorないしxterm-colorである必要があるのです。
なので.cshrcにsetenv TERM kterm-colorを書くことは非常に危険なので絶対にやめてください。
しかし、この場合はXを起動してからいちいちsetenv〜と入力する必要が出てきますので、コンソール上ではTERM con25で、X上ではkterm-colorないしxterm-colorにうまく設定するようにするスクリプトを.cshrcに書いてやることで解決できます。
> vi .cshrc
if( $TERM == 'kterm' ) then
setenv TERM kterm-color
else if ( $TERM == 'xterm' ) then
setenv TERM xterm-color
endif
を.cshrcの適当な場所に記述して、
> source .cshrc
してやれば、Xを起動してktermやxtermを起動しても自動的にls -Gでカラー表示されるようになります。
Linuxで使われている、カラー表示可能なlsがgnulsです。
また、gnulsはcolorlsと違い、カラー表示に関するオプションが豊富です。
gnulsは上の2つの方法と違い、ソフト自体が標準でインストールされていません。
ので、インストールします。
> cd /usr/ports/misc/gnuls
# su
# make install clean
# rehash
あるいは、
# su
# portinstall gnuls
インストールが完了したら、適当なディレクトリで
> gnuls --color
としてみてください。
カラー表示されれば成功です。
ただ、この状態だと、
> gnuls --color | less
などと、他のコマンドと組み合わせた時に問題が発生する場合があります。
例えば、gnuls --colorとした時には、
hogehoge
と出る状態でも、gnuls --color | lessとした時に、
ESC[0mESC[01;34mhogehogeESC[0m
ESC[m
と、カラーコードの情報が出てしまいます。
これは、gnuls --colorのオプションにnever、always、autoとあり、それぞれ「カラー表示しない」「常にカラー表示する」「カラー表示を自動判別する」という意味なんですが、何も指定しない状態ではalwaysになっているので、gnuls --color |lessなどとした時でもカラー表示しようとし、結果的にカラーコードが出力されるという現象が起こるのです。
これを回避するには、--colorオプションをautoにしてやれば良いです。
> gnuls --color=auto
> gnuls --color=auto | less
としてやれば、lessなどのコマンドと組み合わせた時などには、自動的にカラー表示されなくなり、カラーコードが出力されなくなります。
上の2つと同じように、lsで使えるようにするには、
> vi .cshrc
alias ls gnuls --color=auto
としてやります。
lessと組み合わせた時にも正常にカラー表示したい場合は、lessに-Rオプションを付ければ解決できます。
> gnuls --color=always | less -R
としてやれば、lessと組み合わせた時にも正常にカラー表示できるようになります。
が、エスケープシーケンスを認識しないコマンドなどと組み合わせた時にはやはりカラーコードの情報が出てしまうことになりますので、あまりお奨めできない事を覚えておいてください。
例えばjmanで日本語マニュアルを開こうとすると表示がおかしい場合がありますが、この場合はPAGERに'jless -R'を指定してやらないと正常に表示されません。
なお、gnulsは標準のままだと日本語ファイルを正常に表示できません。
ある程度は表示できるのですが、たまに化けたりします。
通常のlsの場合jlsで代用できますが、gnulsではオプションを設定してやることによって正常に日本語を表示できるようになります。
> gnuls --show-control-char
としてやれば正常に日本語表示されると思います。
また色設定を変えることも可能です。
これはdircolorsというコマンドと、設定ファイルを使って指定します。
> vi .cshrc
if ( -f ~/.dircolors ) then
eval `dircolors -c ~/.dircolors`
endif
を、.cshrcに書き加えます。
これは、.dircolorsというファイルがホームディレクトリにある場合は、色設定のファイルとして読み込むというスクリプトです。
dircolors -cの-cはC shell(csh、tcsh)にLS_COLORSをセットするオプションです。
.dircolorsのサンプルを置いておくので、参考にしてください。
.dircolorsのサンプル
また色はISO6429に準拠していますので、
0: デフォルトの色にする
1: 明るくする
4: 下線を引く
5: 点滅させる
7: 反転させる
30: 文字を黒に
31: 文字を赤に
32: 文字を緑に
33: 文字を黄に
34: 文字を青に
35: 文字を紫に
36: 文字をシアンに
37: 文字を白に
40: 背景を黒に
41: 背景を赤に
42: 背景を緑に
43: 背景を黄に
44: 背景を青に
45: 背景を紫に
46: 背景をシアンに
47: 背景を白に
が使用できます。
またこの設定は、tcshのカラー表示でも同様のことが可能です。