ls 出力でこの緑色の背景が表示される原因は何ですか?

ls 出力でこの緑色の背景が表示される原因は何ですか?

Linux マシン上の ls 出力のスクリーンキャプチャ

'ls' で表示されるディレクトリは 2 つあります。通常、ディレクトリはどこも黒の背景に青で表示されます。しかし、最初のディレクトリは緑の背景に青で、読めません。なぜでしょうか。黒の背景に青、または少なくとも暗い背景に明るい色にするにはどうすればよいでしょうか。

これは Ubuntu 12.04 で、Gnome ターミナルで bash を使用しています。Konsole では、青は少し暗くなり、読み取ることは可能ですが、もっと改善できる可能性があります。

答え1

ファイルの種類に基づいてファイルを色分けする (オーディオ ファイルの場合は青緑色、アーカイブと圧縮ファイルの場合は明るい赤、画像とビデオの場合は紫) だけでなく、lsファイルとディレクトリの属性に基づいても色分けします。

  • 緑の背景に黒いテキストは、ディレクトリが所有ユーザーとグループ以外のユーザーによって書き込み可能であり、スティッキー ビットが設定されていることを示します ( o+w, +t)。
  • 緑色の背景に青い文字は、ディレクトリが所有ユーザーとグループ以外のユーザーによって書き込み可能であることを示し、ないスティッキービットを設定します(o+w, -t)。

ステファノ・パラッツォUbuntuに質問するさまざまな属性の色について、この非常にわかりやすい図を作成しました。

ターミナル内のさまざまな色の意味

としてテルドン指摘したように、色の設定はdircolorsさまざまな色設定のリストには でアクセスできますdircolors --print-database

出力の各行 ( など) はBLK 40;33;01次の形式になります。

[TARGET] [TEXT_STYLE];[FOREGROUND_COLOR];[BACKGROUND_COLOR]
  • TARGET色付けルールの対象を示す

  • TEXT_STYLEテキストスタイルを示します:

    • 00= なし
    • 01= 太字
    • 04= アンダースコア
    • 05= 瞬き
    • 07= 逆、
    • 08= 隠された
  • FOREGROUND_COLOR前景色を示します:

    • 30= 黒
    • 31= 赤
    • 32= 緑
    • 33= 黄色
    • 34= 青、
    • 35= マゼンタ
    • 36= シアン
    • 37= 白
  • BACKGROUND_COLOR背景色を示します:

    • 40= 黒
    • 41= 赤
    • 42= 緑
    • 43= 黄色
    • 44= 青、
    • 45= マゼンタ
    • 46= シアン
    • 47= 白

フィールドは右から省略できます。たとえば、は.tar 01;31太字と赤色を意味します。

XTerm および他のほとんどの最新の端末エミュレーターは 256 色をサポートしています。

XTerm 256 色の前景色コードの形式は次のとおりです。

38;5;[FOREGROUND_COLOR]

XTerm 256 色の背景色コードは次の形式になります。

48;5;[BACKGROUND_COLOR]

ここで、 とFOREGROUND_COLORは両方ともBACKGROUND_COLOR0 ~ 255 の範囲の数値です。16 色モードと 256 色モードのカラー コードの完全なリストは、以下のスクリーンショットに示されています。

16色および256色モードのカラーコード

答え2

の色はls権限を表します。一部のシステムでは、デフォルトで、すべてのユーザーが書き込み権限を持つディレクトリが緑色の背景で表示されます。

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

(from )$LS_COLORSを使用して変数を編集することで色を変更できます。dircolorsman ls

   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.  The LS_COLORS  environment
   variable can change the settings.  Use the dircolors command to set it.

確かに構文はちょっと面倒ですが、必要な色を含むファイルを作成し、次のように保存することで、この色を変更できます~/.dircolors

dircolors -p > ~/.dircolors

このコマンドは、デフォルトを に出力します~/.dircolors。次に、そのファイルを編集して、次の行を変更する必要があります。

OTHER_WRITABLE 34;42 # dir that is other-writable (o+w) and not sticky

たとえば、赤い背景に黒い文字にするには(ここ色コードのリストについては以下を参照してください):

OTHER_WRITABLE 30;41 # dir that is other-writable (o+w) and not sticky

すべてのデフォルトを設定する必要はありません。変更したい部分だけを再定義した 1 行のファイルを作成することもできます。とにかく、ファイルを作成したら、次のようにロードします。

eval "$(dircolors ~/.dircolors)";

そして、これが実際に動作している様子です:

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

これを自動的に実行するには、eval上記のコマンドをファイルに追加します~/.bashrc

答え3

tldr; どうすれば修正できるのでしょうか?

問題を素早く解決するには:

LS_COLORS+=':ow=01;33'
  • 他のユーザーが書き込み可能なファイルをnobgで黄色で表示します
  • これを永続的にするには、シェル プロファイル ( ~/.bashrc~/.profileなど) を編集します。

詳細:

を に33置き換えます。さらに簡単に、 にするには、次のようにします。34bluenobgnofgnobg

LS_COLORS+=:ow=

変更を永続的にするには、.profile に次の内容を追加します。

echo "export LS_COLORS+=':ow=01;33'" >> ~/.profile

拡張機能に関連しないルールを表示するにはLS_COLORS:

echo "$LS_COLORS" | sed 's/:/\n/g' | grep -v '\*.'

sed各ルールを1行にまとめgrep*.'.


ls端末上の色を調べるには、以下を使用することを検討してください。

C="$LS_COLORS"
function sc () {
    echo "$LS_COLORS" | sed 's/:/\n/g' | grep -v '\*.'
}
function t () {
    ls /mnt # Or the path to your example directory.
}

それから

LS_COLORS="$C:ow=38;5;250;48;5;025";t

別の回答 (Thomas Nyman の回答) で述べられているように、38;5;はフォアグラウンド x-term 256 色のプレフィックスであり、48;5;バックグラウンド x-term 256 色のプレフィックスです。ただし、256 色はすべての端末でサポートされているわけではありません。

こちらもご覧ください-ls のさまざまな色は何を意味しますか?-AskUbuntu で。

答え4

色を変更するために使用した 3 つの手順は次のとおりです。

まず、デフォルトの色をファイルにコピーします

dircolors -p > ~/.dircolors

次に、このファイルを変更します。ファイル内には色の値がいくつか記載されていますが、さらに次の値も記載されています。

Code    Color
0   Default Colour
1   Bold
4   Underlined
5   Flashing Text
7   Reverse Field
31  Red
32  Green
33  Orange
34  Blue
35  Purple
36  Cyan
37  Grey
40  Black Background
41  Red Background
42  Green Background
43  Orange Background
44  Blue Background
45  Purple Background
46  Cyan Background
47  Grey Background
90  Dark Grey
91  Light Red
92  Light Green
93  Yellow
94  Light Blue
95  Light Purple
96  Turquoise
100  Dark Grey Background
101  Light Red Background
102  Light Green Background
103  Yellow Background
104  Light Blue Background
105  Light Purple Background
106  Turquoise Background

ソース

~/.bashrc最後に、ターミナルを開いたときに色が自動的に読み込まれるように、ファイルに次の行を追加します。

eval 'dircolors ~/.dircolors' > /dev/null

のために~/.zshrc

if [[ -f ~/.dircolors ]] ; then
    eval $(dircolors -b ~/.dircolors)     
elif [[ -f /etc/DIR_COLORS ]] ; then
    eval $(dircolors -b /etc/DIR_COLORS)
fi

関連情報