dircolors: 色設定をグローバルに変更する

dircolors: 色設定をグローバルに変更する

ls色付きの出力を表示するために使用することを理解していますdircolorsdircolorsファイル拡張子に関連付けられた色のデフォルトデータベースがあり、コマンドで印刷できます。

dircolors --print-database

からman dir_colors、システム全体のデータベースは にあるはずだと読みました/etc/DIR_COLORS。しかし、このファイルは私のシステム (Debian) には存在しません。 のシステム全体のカラー設定を変更するにはどうすればいいですかdircolors? ファイルが存在しない場合、コマンドはどこdircolors --print-databaseから設定を取得しますか。

ユーザーが自分の設定を含むユーザー固有のファイルを持つことができることは知っています~/.dircolorsが、全員の設定を変更する必要があるため、これは私には適していません。

2 番目の質問は、dircolors に 8 ビット カラーを使用できるかどうかです。私の端末は ですxterm-256color

答え1

lsは、環境変数から色設定を取得しますLS_COLORSdircolorsは、この環境変数を生成するための便利な方法にすぎません。 この環境変数をシステム全体で有効にするには、シェルの起動ファイルに記述します。

の場合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/profilezshdircolors

設定の取得元についてはdircolors、ファイルを指定しない場合は組み込みのデフォルトが使用されます。

xtermdircolors ファイルでは の 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ん。vitmuxman

dircolorsコマンドlstree リクエスト表示されるファイル名を表示するとき。

私は強調する表示をリクエストするコマンドが要求する色は、ターミナル エミュレータに送信される色だけであるためです。ターミナル エミュレータは、要求された色とは異なる色を表示することを選択できます。要求された色と、最終的にターミナル画面に出力される色は、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、、、、、、および。treevimgreptmuxman

これらの出力カラー コード (エスケープ プレフィックス付き制御コード) は、次のテキストを出力する前に、ディスプレイを特定の色の組み合わせ (前景色、背景色、および属性) に変更することを要求します。繰り返しますが、これらのエスケープ コードは実際に表示される色を決定するものではありません。むしろ、特定のパレットの選択を指定します。

過去には標準的な色のパレットがありました。緑をリクエストすると、緑が表示されました。

しかし、例えばターミナルエミュレーターはGNOME Terminalこの動作を変えることができます。例えば、プログラムがANSIグリーンエスケープコードを使用すると、代わりに次のように表示することができます。チェリーレッド画面に表示されます。 覚えておくべき重要なことは、これが次のことを意味するということです。全てすべての端末プログラムで要求された緑は赤に変換されます。 つまり、grepこのように特定のプログラムの出力色だけを調整することはできません。

2A) やのようなディレクトリコマンドはlsややtree特殊であるは、ファイル名の種類ごとにファイル名をユーザーの指定に応じて色分けするように設定できるという点で優れています。これはman、たとえば、白黒に加えて固定された代替色セットを使用する とは異なります。

たとえば、フォルダーは紺色で表示するように要求され、リンクは水色で表示するように要求される場合があります。

指定されたターミナル形式 (ansi や putty など)、ファイルの基本タイプ (フォルダー、ブロック、スティッキーなど)、および/または一致するファイル名拡張子 (*.sh、*.png など) ごとに色を要求できます。これは、LS_COLORS 環境変数で指定された設定を使用して、ファイル名の種類ごとに ANSI 出力カラー コードを変更することによって行われます。方法については以下を参照してください。

2B)特別な配色もありますvimたとえば を使用します:colorscheme default。(これは別の日に取り上げます。)

3)端末(私の場合はGNOMEターミナル) は ANSI コードを解釈して、実際に表示される色を生成します。


ターミナルエミュレータでグローバルに色を調整する

(またはおそらくこの機能をサポートする任意のターミナル エミュレータ)で色設定を調整すると、GNOME TerminalANSI カラー コードを出力するすべてのテキスト プログラムの表示可能な色に影響します。これらの色の変更は、開いているすべてのターミナル ウィンドウで同時に調整されます (すべてのウィンドウで同じターミナル エミュレータを使用していると仮定)。

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/profileLC_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...アプリを色付きで表示したい場合は、次のように色を設定してみてくださいvimgrepls

ここに画像の説明を入力してください

このカラー ダイアログは最初は少しわかりにくいと思いましたが、理解してしまえば論理的です。最大の問題は、すべてのテキスト アプリが同じカラー パレットを共有しているにもかかわらず、特に では、その使い方が多少異なることです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を除いて、ほぼ完全に独立して動作するように見えます。(また、がチェックされている場合でも、少なくとも については、下部の が依然として重要です。)PaletteText and Background ColorUse colors from system themeShow bold text in bright colorsls


まずは設定をいじってみましょうText and Background Color

これらは、基本色、非特殊色Text、およびBackground色のデフォルトの色を決定します。また、必要に応じて、BoldまたはHighlightテキストのオプションの修飾子を選択したり、明るいオレンジ色などの固定カーソル色を選択したりすることもできます。

チェックUse colors from system themeボックスは、色の設定を継承するか、自分で定義するかを決定するようです。チェックを外すと、プルダウンから組み込みスキームまたはカスタムスキームを選択できます。

選択した内容は、 を除いて、以下のTextおよびスウォッチに入力されます。BackgroundCustom

ここでの選択は、その下の他の 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、 の別のセッションclsホーム ディレクトリの 、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ほとんど影響するようです。lsvim


組み込みスキームの色はどのように見えるか

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

保存して閉じ、シェルを再起動します。ディレクトリは、黒地に濃い青 (判読不能) から黒地に明るい青緑 (判読可能) に変わります。

関連情報