'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_COLOR
0 ~ 255 の範囲の数値です。16 色モードと 256 色モードのカラー コードの完全なリストは、以下のスクリーンショットに示されています。
答え2
の色はls
権限を表します。一部のシステムでは、デフォルトで、すべてのユーザーが書き込み権限を持つディレクトリが緑色の背景で表示されます。
(from )$LS_COLORS
を使用して変数を編集することで色を変更できます。dircolors
man 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
置き換えます。さらに簡単に、 にするには、次のようにします。34
blue
nobg
nofg
nobg
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