FreeBSDのlsでカラー表示

CentOS 7 lsのカラー表示

CentOS 7やCentOS 8ではlsコマンドの出力結果は最初からカラー表示でした。
FreeBSDではlsコマンドの出力がカラー表示ではありません。
FreeBSDでも同じようにlsコマンドの出力がカラー表示になるようにしてみました。

目次

FreeBSDのlsでカラー表示

CentOS

lsと入力すれば最初からカラーで表示されます。
CentOS 7 lsのカラー表示
aliasの設定を見てみます。

[root@ik1-429-46995 etc]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'"

CentOSではデフォルトで”ls –color=auto”が実行されます。
以下、CentOSの表記はCentOS 7でテストしています。

FreeBSD

lsコマンドの出力はカラー表示ではありません。
カラー表示に慣れていたのでディレクトリーどれなのかが分かり辛いです。
FreeBSD 12 lsのカラー表示なし
aliasの設定を見てみます。

root@ik1-331-25649:/etc # alias
h       (history 25)
j       (jobs -l)
la      (ls -aF)
lf      (ls -FA)
ll      (ls -lAF)

特にエイリアスの設定はありません。
以下、FreeBSDの表記はFreeBSD 12でテストしています。

CentOSはデフォルトでlsの出力はカラー表示ですが、FreeBSDはデフォルトではカラー表示できません。

lsコマンドの出力をカラー表示にする方法

ls –color=autoCentOS FreeBSD

lsコマンドのオプションで「–color=auto」を使用します。
CentOS でaliasに設定されているデフォルトの方法です。
CentOS7 alias無効とalias有効の結果
CentOSではCOLORTERM変数に関係なく”ls –color=auto”でカラー表示ができています。

FreeBSDでは環境変数COLORTERMを設定していれば”ls –color=auto”でカラー表示できます。
FreeBSD12 COLORTERM変数とls --color=autoとセットでカラー表示


出力はカラー表示になりましたが、CentOSの場合とFreeBSDの場合では色が異なります。
FreeBSDのほうがディレクトリーの青色が暗く見にくいです。

ls -GFreeBSD

lsコマンドのオプションで「-G」を使用します。

カラー化の出力を有効にします。このオプションは、環境変数 CLICOLORまたは COLORTERM を定義し、–color=auto を設定することと同等です。(以下を参照)。COLORLS の定義を削除することによって、この機能をコンパイルすることができます。このオプションは、IEEE Std1003.1-2008 (“POSIX.1”) で定義されていません。

aliasに設定すれば簡単にカラー表示にすることができます。

root@ik1-331-25649:~ # vi ~/.cshrc
alias ls        ls -G

root@ik1-331-25649:~ # source ~/.cshrc
root@ik1-331-25649:~ # alias
h       (history 25)
j       (jobs -l)
la      (ls -aF)
lf      (ls -FA)
ll      (ls -lAF)
ls      (ls -G)

FreeBSD ls -Gオプションをaliasに設定


FreeBSDの場合はオプションに関係なく標準のlsコマンドによるカラー表示は、CentOSのカラー表示の色とはことなります。

gunls –color=autoFreeBSD

gnulsをインストールすれば以下のプログラムが利用できるようになります。
インストール先は/usr/local/binです。

  • gnuls
  • dir
  • vdir
  • dircolors

FreeBSD 12 gnuls --color=autoオプション

ポイント
出力はカラー表示になりましたが、lsのオプションでカラー表示した場合と色合いが異なります。
gnulsはCentOSの色合いと同じになりました。

カラー表示に関係する環境変数

TERMCentOS FreeBSD

環境変数【TERM】の設定値は、カラー表示オプションの動作に影響します。
FreeBSDでは環境変数【TERM】の値をxtermからktermに変更するとカラー表示ができなくなりました。
“gnuls –color=auto”はktermでもカラー表示が可能です。
環境変数【CLICOLOR】【COLORTERM】はカラー機能がある端末タイプに依存しています。
dircolorsコマンドは【TERM】の影響を受けます。

LS_COLORSCentOS 

環境変数【LS_COLORS】に設定されている値がカラー設定です。
どの種類のディレクトリやファイルをどの色で表示するかを細かく設定できます。

[root@ik1-429-46995 etc]# printenv LS_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=01;05;37;41: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:*.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:*.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=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:

LSCOLORSFreeBSD

11種類の属性にたいしてカラー表示に2文字(前景色と背景色)で設定を行うため全部で22文字の文字列で構成されます。
LS_COLORSとはフォーマットが異なりますので注意が必要です。

この変数の値は、色が CLICOLOR または COLORTERM で有効にされるとき、どの属性のためにどの色を使用するかを記述します。この文字列は、形式 fb のペアを結合したもの、ここで、f は、前景色で、b は、背景色です。

色の識別子は、次の通りです:

a 黒
b 赤
c 緑
d 茶
e 青
f マゼンタ
g シアン
h 明い灰色
A 太字の黒、通常暗い灰色のように見えます
B 太字の赤
C 太字の緑
D 太字の茶色、通常黄色のように見えます
E 太字の青
F 太字のマゼンタ
G 太字のシアン
H 太字の明い灰色、明い白のように見えます
x デフォルトの前景と背景

上記は、標準の ANSI カラーであることに注意してください。
実際の表示は、使用している端末のカラーの機能性に依存して異なります。

属性の順序は、次の通りです:

1. ディレクトリ
2. シンボリックリンク
3. ソケット
4. パイプ
5. 実行形式
6. ブロック特殊
7. キャラクタ特殊
8. setuid ビットが設定された実行形式
9. setgid ビットが設定された実行形式
10. スティッキビットが付いた、他の人が書き込み可能なディレクトリ
11. スティッキビットがない、他の人が書き込み可能なディレクトリ

デフォルトは、”exfxcxdxbxegedabagacad” で、すなわち、通常のディレクトリに対して青い前景とデフォルト背景、setuid の実行形式に対して黒い前景と赤い背景、その他です。

CLICOLORFreeBSD

この環境変数【CLICOLOR】を設定することでlsの出力結果がカラー表示になります。
環境変数【TERM】に依存しています。

ファイルのタイプを識別するために ANSI カラーシーケンスを使用します。下記の LSCOLORS を参照してください。-F オプションに記述されたファイルタイプに加えて、いくつかの特別の属性 (setuid ビット設定など) も表示されます。カラー化は、適切な termcap(5) ケーパビリティがある端末タイプに依存します。デフォルトの “cons25” コンソールには、適切なケーパビリティがありますが、例えば、xterm(1) でカラーを表示するためには、TERM 変数を “xterm-color” に設定しなければなりません。他の端末タイプは、同様の調節を必要とするかもしれません。CLICOLOR_FORCE 変数が定義されるか、または、–color が “常に” に設定されないなら、そして、出力が端末に向けられないなら、カラー化は、静かに無効にされます。

COLORTERMFreeBSD

FreeBSDで環境変数【COLORTERM】を設定すれば”ls –color=auto”で出力がカラー表示になります。
環境変数【TERM】に依存しています。
FreeBSD12 COLORTERM変数とls --color=autoとセットでカラー表示

CentOSはGNUのcoreutilのlsが使用されています。
FreeBSDにgnuls(coreutil)をインストールすればCentOSと同じ動作にできるはずです。

色の変更方法

LSCOLORSFreeBSD

環境変数【LSCOLORS】の値を変更して色を変えてみます。
デフォルトは”exfxcxdxbxegedabagacad”です。
これを”ExGxdxdxCxDxDxBxBxegeg”に変更します。

root@ik1-331-25649:/etc # setenv LSCOLORS ExGxdxdxCxDxDxBxBxegeg

[col2_sp]LSCOLORS exfxcxdxbxegedabagacad
FreeBSD LSCOLORS defaultカラー[/col2_sp]

[col2_sp]LSCOLORS ExGxdxdxCxDxDxBxBxegeg
FreeBSD lsのカラー表示の色を変更[/col2_sp]
“ls -G”および”ls –color=auto”でのカラー表示の色が変更できました。

LS_COLORSCentOS FreeBSD

環境変数【LS_COLORS】の値を変更してカラー表示の色を変更します。
FreeBSDの場合は、gnulsコマンドを使用した場合に効果があります。

現在のLS_COLORSの値を確認します。

[root@ik1-429-46995 etc]# printenv LS_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=01;05;37;41: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:*.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:*.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=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:

ポイント
非常に文字列が長いため直接値を入力するのは大変です。
GNU coreutilに含まれているdircolorsコマンドで生成します。

CentOSの場合は、/etcにいくつかの設定ファイルが存在しています。

  • DIR_COLORS
  • DIR_COLORS.256color
  • DIR_COLORS.lightbgcolor

これらを読み込んで試してみるとよいでしょう。
以下のコマンドはファイル(/etc/DIR_COLORS.lightbgcolor)から設定を読み込みLS_COLORS環境変数を設定します。

bシェル系

[root@ik1-429-46995 /]#  eval `dircolors -b /etc/DIR_COLORS.lightbgcolor`

cシェル系

[root@ik1-429-46995 /]#  eval `dircolors -c /etc/DIR_COLORS.lightbgcolor`

デフォルトのデータベースの内容を表示します。

# dircolors -p

出力をファイルに保存し、ファイルの中身を編集して利用することもできます。
シェルにログイン時にファイルを読み込み環境変数を設定するようにしていれば個人用の設定が作れます。

root@ik1-331-25649:~ # dircolors -p > .dircolors
root@ik1-331-25649:~ # cat .dircolors
# Configuration file for dircolors, a utility to help you set the
# LS_COLORS environment variable used by GNU ls with the --color option.
# Copyright (C) 1996-2018 Free Software Foundation, Inc.
# Copying and distribution of this file, with or without modification,
# are permitted provided the copyright notice and this notice are preserved.
# The keywords COLOR, OPTIONS, and EIGHTBIT (honored by the
# slackware version of dircolors) are recognized but ignored.
# Below are TERM entries, which can be a glob patterns, to match
# against the TERM environment variable to determine if it is colorizable.
TERM Eterm
TERM ansi
TERM *color*
TERM con[0-9]*x[0-9]*
TERM cons25
TERM console
TERM cygwin
TERM dtterm
TERM gnome
TERM hurd
TERM jfbterm
TERM konsole
TERM kterm
TERM linux
TERM linux-c
TERM mlterm
TERM putty
TERM rxvt*
TERM screen*
TERM st
TERM terminator
TERM tmux*
TERM vt100
TERM xterm*
# 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
#NORMAL 00 # no color code at all
#FILE 00 # regular file: use no color at all
RESET 0 # reset to "normal" color
DIR 01;34 # 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.)
MULTIHARDLINK 00 # regular file with more than one link
FIFO 40;33 # pipe
SOCK 01;35 # socket
DOOR 01;35 # door
BLK 40;33;01 # block device driver
CHR 40;33;01 # character device driver
ORPHAN 40;31;01 # symlink to nonexistent file, or non-stat'able file ...
MISSING 00 # ... and the files they point to
SETUID 37;41 # file that is setuid (u+s)
SETGID 30;43 # file that is setgid (g+s)
CAPABILITY 30;41 # file with capability
STICKY_OTHER_WRITABLE 30;42 # dir that is sticky and other-writable (+t,o+w)
OTHER_WRITABLE 34;42 # dir that is other-writable (o+w) and not sticky
STICKY 37;44 # dir with the sticky bit set (+t) and not other-writable
# This is for files with execute permission:
EXEC 01;32
# List any file extensions like '.gz' or '.tar' that you would like ls
# to colorize below. Put the extension, a space, and the color init string.
# (and any comments you want to add after a '#')
# If you use DOS-style suffixes, you may want to uncomment the following:
#.cmd 01;32 # executables (bright green)
#.exe 01;32
#.com 01;32
#.btm 01;32
#.bat 01;32
# Or if you want to colorize scripts even if they do not have the
# executable bit actually set.
#.sh 01;32
#.csh 01;32
 # archives or compressed (bright red)
.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
.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
.wim 01;31
.swm 01;31
.dwm 01;31
.esd 01;31
# image formats
.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
# https://wiki.xiph.org/MIME_Types_and_File_Extensions
.ogv 01;35
.ogx 01;35
# audio formats
.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
# https://wiki.xiph.org/MIME_Types_and_File_Extensions
.oga 00;36
.opus 00;36
.spx 00;36
.xspf 00;36

Cシェルを使用しているので.cshrcを編集します。

if (-e ~/.dircolors) then
        eval `dircolors -c ~/.dircolors`
endif

Cシェルに追加した3行のコードは非常に安易なものです。
dircolorsコマンドがない環境ではエラーが発生しますのでご注意ください。

FreeBSDでもlsコマンドの出力がカラー表示できるようになりました。
方法はいくつかありますが環境変数CLICOLORを設定するのが一番簡単だと思います。

 

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

大阪府門真市に生まれ、高校卒業まで京都府福知山市で育ち、大学は工学部電子工学科を卒業。半導体設計会社に勤務ののちインフラエンジニアとして監視基盤の運用設計業務に就く。現在は都内の施設に勤務。横浜在住。人の役に立てることができればいいなと日々思っています。

目次