
ls
色付きの出力を表示するために使用することを理解していますdircolors
。dircolors
ファイル拡張子に関連付けられた色のデフォルトデータベースがあり、コマンドで印刷できます。
dircolors --print-database
からman dir_colors
、システム全体のデータベースは にあるはずだと読みました/etc/DIR_COLORS
。しかし、このファイルは私のシステム (Debian) には存在しません。 のシステム全体のカラー設定を変更するにはどうすればいいですかdircolors
? ファイルが存在しない場合、コマンドはどこdircolors --print-database
から設定を取得しますか。
ユーザーが自分の設定を含むユーザー固有のファイルを持つことができることは知っています~/.dircolors
が、全員の設定を変更する必要があるため、これは私には適していません。
2 番目の質問は、dircolors に 8 ビット カラーを使用できるかどうかです。私の端末は ですxterm-256color
。
答え1
ls
は、環境変数から色設定を取得しますLS_COLORS
。dircolors
は、この環境変数を生成するための便利な方法にすぎません。 この環境変数をシステム全体で有効にするには、シェルの起動ファイルに記述します。
の場合bash
、次のように入力します/etc/profile
。
# `dircolors` prints out `LS_COLORS='...'; export LS_COLORS`, so eval'ing
# $(dircolors) effectively sets the LS_COLORS environment variable.
eval "$(dircolors /etc/DIR_COLORS)"
の場合zsh
、 にそれを入れるか、起動時にが読み込まれる/etc/zshrc
ように設定する必要があります。ディストリビューションによってはすでにそれが行われている可能性があります。私がこれを指摘したのは、すべてのユーザーの設定は、使用するシェルによって異なることを指摘するためです。zsh
/etc/profile
zsh
dircolors
設定の取得元についてはdircolors
、ファイルを指定しない場合は組み込みのデフォルトが使用されます。
xterm
dircolors ファイルでは の 256 色エスケープ コードを使用できますが、xterm
互換性のある端末でのみ機能することに注意してください。たとえば、Linux テキスト コンソールでは機能しません。
256 色のエスケープ コードの形式は、38;5;colorN
前景色用と48;5;colorN
背景色用です。たとえば、次のようになります。
.mp3 38;5;160 # Set fg color to color 160
.flac 48;5;240 # Set bg color to color 240
.ogg 38;5;160;48;5;240 # Set fg color 160 *and* bg color 240.
.wav 01;04;05;38;5;160;48;5;240 # Pure madness: make bold (01), underlined (04), blink (05), fg color 160, and bg color 240!
答え2
短い答え
dircolors
(ディレクトリ カラーの略) を使用して、色をグローバルに変更することはできません。 そのためには、ターミナル エミュレーターのカラー パレットを調整する必要があります。
たとえば、、、、またはによってdircolors
要求された色を調整するためには、は使用されませgrep
ん。vi
tmux
man
dircolors
コマンドls
とtree
リクエスト表示されるファイル名を表示するとき。
私は強調する表示をリクエストするコマンドが要求する色は、ターミナル エミュレータに送信される色だけであるためです。ターミナル エミュレータは、要求された色とは異なる色を表示することを選択できます。要求された色と、最終的にターミナル画面に出力される色は、2 つの異なる色セットになる場合があります。
カラープロセスの概要
1) テキストベースのプログラムまたはシェル組み込み設計上、ANSI(アメリカ規格協会)を出力できる。カラーリクエストエスケープ コード。ここで強調したいのは、これらは端末への要求に過ぎず、表示方法の最終決定権は端末にあるということです。ANSI カラー コード システムは非常に古いシステムで、最初はスタンドアロン ハードウェア端末で始まりました。
色付きテキストのリクエストは次のようになります。
<requested-color><text-to-be-displayed-in-that-color><next-requested-color><next-text...
「要求された色」の部分は表示されません。むしろ、端末エミュレーターによって、画面に「その色で表示されるテキスト」を要求された色で表示するために使用されます。
[ncurses][1]
プログラムは、ターミナル エミュレーターに ANSI コードを出力するために 呼び出すことができます。基本的に 8 つの標準色と、要求可能な 8 つの太字/明るい色があります。(ncurses は New Curses の略で、'curses' は Cursor Optimization、つまり端末画面への効率的なテキストベースの出力のためのソフトウェア ライブラリの語呂合わせです。)
多くの一般的なテキストベースのコマンドは、ANSIカラーコードを出力するように設定できます。リクエスト出力がターミナルによって色付けされるようにします。例: ls
、、、、、、および。tree
vim
grep
tmux
man
これらの出力カラー コード (エスケープ プレフィックス付き制御コード) は、次のテキストを出力する前に、ディスプレイを特定の色の組み合わせ (前景色、背景色、および属性) に変更することを要求します。繰り返しますが、これらのエスケープ コードは実際に表示される色を決定するものではありません。むしろ、特定のパレットの選択を指定します。
過去には標準的な色のパレットがありました。緑をリクエストすると、緑が表示されました。
しかし、例えばターミナルエミュレーターはGNOME Terminal
この動作を変えることができます。例えば、プログラムが緑ANSIグリーンエスケープコードを使用すると、代わりに次のように表示することができます。チェリーレッド画面に表示されます。 覚えておくべき重要なことは、これが次のことを意味するということです。全てすべての端末プログラムで要求された緑は赤に変換されます。 つまり、grep
このように特定のプログラムの出力色だけを調整することはできません。
2A) やのようなディレクトリコマンドはls
ややtree
特殊であるは、ファイル名の種類ごとにファイル名をユーザーの指定に応じて色分けするように設定できるという点で優れています。これはman
、たとえば、白黒に加えて固定された代替色セットを使用する とは異なります。
たとえば、フォルダーは紺色で表示するように要求され、リンクは水色で表示するように要求される場合があります。
指定されたターミナル形式 (ansi や putty など)、ファイルの基本タイプ (フォルダー、ブロック、スティッキーなど)、および/または一致するファイル名拡張子 (*.sh、*.png など) ごとに色を要求できます。これは、LS_COLORS 環境変数で指定された設定を使用して、ファイル名の種類ごとに ANSI 出力カラー コードを変更することによって行われます。方法については以下を参照してください。
2B)特別な配色もありますvim
たとえば を使用します:colorscheme default
。(これは別の日に取り上げます。)
3)端末(私の場合はGNOMEターミナル) は ANSI コードを解釈して、実際に表示される色を生成します。
ターミナルエミュレータでグローバルに色を調整する
(またはおそらくこの機能をサポートする任意のターミナル エミュレータ)で色設定を調整すると、GNOME Terminal
ANSI カラー コードを出力するすべてのテキスト プログラムの表示可能な色に影響します。これらの色の変更は、開いているすべてのターミナル ウィンドウで同時に調整されます (すべてのウィンドウで同じターミナル エミュレータを使用していると仮定)。
2 つの異なるターミナル エミュレータ ( と の両方GNOME Terminal
などXTerm
) を使用している場合は、それぞれが最終出力の色を異なる方法で調整する可能性があります。
GNOME ターミナルの設定を使用すると、システム全体の「カラーパレット」(つまり、テキストベースのアプリケーションで使用できる 16 色のセット)を、独自のカスタム カラー セットに微調整できます。
GNOME Terminal
ヘルプには次のように書かれています:
従来、ターミナル エミュレーターは 16 色のパレットを提供していましたが、ここで変更できるのはこれです。ターミナルは 256 色の拡張セットをサポートしていますが、追加の 240 色はここで編集できません。ターミナルでは 1600 万色を超える色に直接アクセスすることもできます。これは「トゥルー カラー」モードと呼ばれます。
パレットに加えた変更が効果をもたらさない場合、表示される内容は 16 の基本色ではなく、このような拡張パレット色または True Color で構成されていると考えられます。
DIRCOLORSの使用
仕組みは以下のとおりです:
a) Run $ dircolors -p >/etc/DIR_COLORS # to produce DIR_COLORS template file
b) Hand edit /etc/DIR_COLORS to adjust ANSI color codes that will be output
for various things to display. For example, any filenames like *.png can
request a particular ANSI color combination. (ANSI color codes are escape
prefixes.)
c) Run dircolors again, this time in both
/etc/profile (for logins) and
/etc/bash.bashrc (for terminal windows)
to read DIR_COLORS and create and export the LS_COLORS
environment variable, like this:
$ eval "$(dircolors -b /etc/DIR_COLORS)"
私は設定とエクスポートに使用する場所dircolors
の早い段階で呼び出します。/etc/profile
LC_COLORS
# === Create DEFAULT LS_COLORS ENVIRONMENT VARIABLE ===========================
# /etc/DIR_COLORS is a data file from: $ dircolors -p > /etc/DIR_COLORS
eval "$(dircolors -b /etc/DIR_COLORS)" # This reads /etc/DIR_COLORS
# and then runs these two commands:
#
# $ LS_COLORS=... # <-- where this value is created from /etc/DIR_COLORS
# $ export LS_COLORS
参考までに、/etc/profile (ログインが行われるたびに読み取られます (を含む$ bash --login
)) 内のさまざまなコマンドで色を有効にする方法は、この回答の一番下に記載されています。
反転ビデオ フォルダーとファイルの中には、おかしな表示になるものがあることに注意してくださいls
(例: DOS バックアップ ファイル)。GNOME ターミナル (下記) をいくらいじっても、これらの色には影響しないようです。ただし、dircolors
(上記の注記を参照) で使用される DIR_COLORS を編集して、LS_COLORS で調整することができます。
独自のシステムの色を調整する方法のヒント
GNOME ターミナル メニューからEdit
| を選択しますPreferences
。左側のペインで調整するプロファイルを選択し、右側のペインでタブを選択しますColors
。
!! 続行する前に、既存の設定をバックアップすることを強くお勧めします。 スクリーンショットで十分です。以下に私のスクリーンショットを示します。
要約- このチェックボックスを設定しない場合は、次の操作を行います。
最も基本的なデフォルトを使用するのではなく、黒い作業背景に、、、、bash
...アプリを色付きで表示したい場合は、次のように色を設定してみてくださいvim
。grep
ls
このカラー ダイアログは最初は少しわかりにくいと思いましたが、理解してしまえば論理的です。最大の問題は、すべてのテキスト アプリが同じカラー パレットを共有しているにもかかわらず、特に では、その使い方が多少異なることですls
。
私が実際に使用している色は次のとおりです。
black aqua green orange light yellow purple blue, primary gray (X) <-- X=Don't care
#000000 #01B9E0 #389400 #FF8A00 #F4FF92 #C401C4 #005EEA #AAAAAA
0 1 2 3 4 5 6 7
------------ ------------ ------------ ------------ ------------ ------------ ------------ ------------ <-- 1st set are "normal colors"
------------ ------------ ------------ ------------ ------------ ------------ ------------ ------------ <-- 2nd set are the "brighter colors" (for check box below)
8 9 10 11 12 13 14 15
#555555 #FF5555 #55FF55 #FFFF55 #5397FE #FF55FF #55FFFF #D6D6D6
dark gray (X) red/orange lime yellow (X) blue, medium pink aqua, bright light gray (X) <-- X=Don't care
GNOME ターミナルの「設定 - プロファイル」ダイアログを理解する
上部と下部のセクション (Text and Background Color
と) は、選択が の上部の設定の上のレイヤーである (つまり、さらに変更する) 点Palette
を除いて、ほぼ完全に独立して動作するように見えます。(また、がチェックされている場合でも、少なくとも については、下部の が依然として重要です。)Palette
Text and Background Color
Use colors from system theme
Show bold text in bright colors
ls
まずは設定をいじってみましょうText and Background Color
。
これらは、基本色、非特殊色Text
、およびBackground
色のデフォルトの色を決定します。また、必要に応じて、Bold
またはHighlight
テキストのオプションの修飾子を選択したり、明るいオレンジ色などの固定カーソル色を選択したりすることもできます。
チェックUse colors from system theme
ボックスは、色の設定を継承するか、自分で定義するかを決定するようです。チェックを外すと、プルダウンから組み込みスキームまたはカスタムスキームを選択できます。
選択した内容は、 を除いて、以下のText
およびスウォッチに入力されます。Background
Custom
ここでの選択は、その下の他の 3 つのチェック ボックスには影響しないことに注意してください。
Text
また、最初にまたはスウォッチをクリックするとBackground
カラー選択ツールが表示され、Select
その中から選択すると、プルダウンがBuilt-in schemes
カスタムに設定されることに注意してください。
色をチェックしBold color
て設定すると、プログラムによって太字として指定されたテキストにこの色が上書きされます。
チェックするとCursor color
、カーソルに固定の色を選択できます。(注意: カーソルが変化するのを確認するには、カーソルをテキストの上に移動する必要があります。) チェックしない場合は、カーソルはテキストの色に応じて変化するように見えます。
をチェックするとHighlight color
、たとえば vim でマウスをドラッグしてテキストをコピーするときに、これら 2 つのスウォッチの効果が表示されます。
さて、設定をいじってみましょうPalette
。
上記と同様に、プルダウンにより、その下の見本に色のセットが表示されます。8 色の行が 2 行あることがわかります。これらの見本は、terminfo によって設定された 8 色の ANSI 前景色と 8 色の背景色を上書きします。
重要なのは、これらのスウォッチを微妙な色のバリエーションに設定できることです。
また、ここで行った変更は、カラーが有効になっているテキストベースのプログラムのすべてまたはほとんどすべてに影響します。 だから、ここでは注意してください。 (最初にこれをバックアップする方法はまだわからないので、お伝えすることはできません。少なくともスクリーンショットを撮ってください。)
これらのスウォッチの用途はわかりませんが、いくつかの実験から次のことが推測されました。
テストを開始する前に、 からいくつかのものを開きますGNOME Terminal
:vim
のコード編集セッションbash
、 の別のセッションc
、ls
ホーム ディレクトリの 、tree
実行、およびtmux
セッション。以下を変更すると、何が変更されているかがよくわかります。
最初は小さな変更を試してください。また、下部にあるチェックボックスをクリックしたりクリック解除したりすることを忘れないでください (詳細は以下で説明します)。
注意:Palette
を に設定しCustom
、私が提案したように 16 色の見本を手動で設定する場合、 で別のものを再度選択するとBuilt-in schemes:
以前の設定が消去されPalette
、再度必要になった場合にCustom
最初からやり直す必要があるため、注意が必要です。(スクリーンショットを使用するか、1 つずつ書き留める以外に、カスタム カラー設定を保存する方法はないようです。)
Built-in schemes:
Custom
-Color palette:
設定
tmux status text status-backgr
tmux vi literals flow (orange) comments&fcns $names var names ?
vi C - literals types flow (brown) comments&fcns macros - ?
vi Bash - literals - flow (brown) comments&fcns Environ var names ? flow: brown (can't change with gnome)
Bash - user@dir $
Bash ls - Reverse-backg Reverse-foregr
gcc
black aqua green orange dark yellow purple blue, primary gray (X) <-- X=Don't care
#000000 #01B9E0 #389400 #FF8A00 #C6CF76 #C401C4 #005EEA #AAAAAA
0 1 2 3 4 5 6 7
------------ ------------ ------------ ------------ ------------ ------------ ------------ ------------ <-- 1st set are "normal colors"
------------ ------------ ------------ ------------ ------------ ------------ ------------ ------------ <-- 2nd set are the "brighter colors" (for check box below)
8 9 10 11 12 13 14 15
#555555 #FF5555 #55FF55 #FFFF55 #5397FE #FF55FF #55FFFF #D6D6D6
dark gray (X) red/orange lime yellow (X) blue, medium pink aqua, bright light gray (X) <-- X=Don't care
tmux ? ? ?
tmux vi ? ? ?
vi C ? ? ?
vi Bash ? ? ?
Bash ? root@dir # ? ?
Bash ls ? x.sh ? directories media files links ?
gcc ? errors ? ?
最後に、一番下にShow bold text in bright colors
チェックボックスがあります。GNOME ヘルプには次のように書かれています:
太字のテキストには明るい色を使用
従来、端末では太字フォントの太さと鮮やかな色は明確に区別されておらず、両方が同時に有効になっていることが多かったです。True Color サポートの導入や特定のカラー スキーム (Solarized など) などの最近の改良により、2 つの概念を分離すること、つまり明るさをフォントの太さとは独立させることが望ましくなりました。
...
Disable Show bold text in bright colors for the new default behavior, the complete separation of color intensity and font weight;
または、下位互換性を向上させるためにこのオプションを有効にします。
チェックすると、上の行に表示されていた内容が、下の行の色で表示されます。 これにチェックを入れると、 の名前の一部がls
少し色が変わることに気づくでしょう。 これは、 の ISO 6429 色シーケンス #1、「より明るい色」と関連していると思います。 これは、 ではなく に$ man dir_colors
ほとんど影響するようです。ls
vim
組み込みスキームの色はどのように見えるか
built-in schemes
テストを受けたとき ここで説明されているカラーテストユーティリティを使用して次の結果が表示されます (ヒント: これを使用してコンパイルおよびリンクします$ gcc -Wall -lcurses color-demo.C
):
注意してくださいShow bold text in bright colors
チェックボックスがオンになっています。オフにすると、高強度の色と低強度の色は同じになります。
Linux console
(オリジナルの CGI カラー セットのようです):
xterm
:
rxvt
(上記のものに近いため、順序は異なります):
Tango
(これは以下の Solarized に近いため、順序が異なります):
Solarized
:
コマンドをカラーで表示するように設定するにはどうすればよいですか?
/etc/.bashrc.shared
(および によって呼び出されます~/.bashrc
)で、またはおよび/root/.bashrc
にそれがない場合は、次のようになります。~/.bashrc
/root/.bashrc
# === ADD COLOR UNLESS DUMB TERMINAL ========================================
if [ "$TERM" != "dumb" ]; then
# ENVIRONMENT:
# You can turn off these colorizing aliases in the interactive environment by invoking
# shell with TERM="dumb bash".
# Assume LS_COLORS is already set by dircolors in /etc/profile. It can be adjusted later.
# Using color to distinguish file types is disabled both by default and with --color=never.
# With --color=auto, ls emits color codes only when standard output is connected to a terminal.
export COLOR_MODE='--color=auto'
# The use of alias limits color effects to the interactive command usage.
# It has advantage over exporting environment variable "export COLOR_MODE='--color=auto'"
# since color can be seen under pager programs such as less(1). If you wish to suppress
# color when piping to other programs, use "--color=auto" instead in the above example
# for "~/.bashrc".
# !! NOTE - alias is very picky about extra spaces around = sign
# --- grep
# Surround the matched (non-empty) strings, matching lines, context lines, file names,
# line numbers, byte offsets, and separators (for fields and groups of context lines)
# with escape sequences to display them in color on the terminal.
# The colors are defined by the environment variable GREP_COLORS, (plural).
# See grep man page for GREP_COLORS instructions.
alias grep=' grep ${COLOR_MODE}'
alias egrep='egrep ${COLOR_MODE}'
alias fgrep='fgrep ${COLOR_MODE}'
alias zgrep='zgrep ${COLOR_MODE}'
# --- ls ------------------------
alias ls='ls ${COLOR_MODE}'
# These next two use the ls alias above, i.e. the first one below is really 'ls ${LS_OPTS} -l'
alias ll='ls -l' # -l = long
alias l='ls -lA' # -A = amost all (.*, but not . nor ..)
# --- tree ----------------------
alias tree='tree -C' # -C adds color to tree
# --- less ----------------------
alias less='less -R' # Output raw control chars for ANSI colors
# --- man -----------------------
# ref: http://www.tuxarena.com/2012/04/tutorial-colored-man-pages-how-it-works/
# NOTE these seem to use TERMCAP which is obsolite.
# ANSI "color" escape sequences are sequences of the form: ESC [ ... m
export LESS_TERMCAP_mb=$(printf '\e[01;31m') # enter blinking mode
export LESS_TERMCAP_md=$(printf '\e[01;38;5;75m') # enter double-bright mode
export LESS_TERMCAP_me=$(printf '\e[0m') # turn off all appearance modes (mb, md, so, us)
export LESS_TERMCAP_so=$(printf '\e[01;33m') # enter standout mode
export LESS_TERMCAP_se=$(printf '\e[0m') # leave standout mode
export LESS_TERMCAP_us=$(printf '\e[04;38;5;200m') # enter underline mode
export LESS_TERMCAP_ue=$(printf '\e[0m') # leave underline mode
fi
答え3
ファイルが存在しない場合、コマンドはどこ
dircolors --print-database
から設定を取得しますか。
によるとマニュアルファイルがない場合には、事前にコンパイルされたデータベースを使用します。
ファイルが指定されている場合、dircolors はそれを読み取り、どのファイル タイプと拡張子に対してどの色を使用するかを決定します。指定されていない場合は、事前にコンパイルされたデータベースが使用されます。これらのファイルの形式の詳細については、'
dircolors --print-database
' を実行してください。
全員の設定を変更するには、/etc/dircolors
ファイルを作成し、次の内容を追加します/etc/bashrc
。
d=/etc/dircolors
test -r $d && eval "$(dircolors $d)"
答え4
Linux は dircolors を使用してコンソールの背景色を設定します。
dircolors ファイルは、コンソールの ls で表示される単語の色を制御します。.dircolors
ディストリビューションのこのファイルを見つけてください。ヘルプへのリンクは次のとおりです:
http://www.linuxfromscratch.org/blfs/view/svn/postlfs/profile.html
私の場合、Fedora 17 では dircolors ファイルは次のようになります。/etc/DIR_COLORS
/etc/DIR_COLORS
ディレクトリにコピーします/home/el/.dircolors
。存在しない場合は作成します。
/home/el/.dircolors を編集し、「dir」というテキストを探します。
これを変える:
DIR 01;34 # directory
これに対して:
DIR 01;36 # directory
保存して閉じ、シェルを再起動します。ディレクトリは、黒地に濃い青 (判読不能) から黒地に明るい青緑 (判読可能) に変わります。