是什么导致 ls 输出中出现绿色背景?

是什么导致 ls 输出中出现绿色背景?

Linux 机器上 ls 输出的屏幕截图

“ls”显示两个目录。通常任何地方的目录都是黑色背景上的蓝色。但第一个是蓝底绿字,无法阅读。为什么是这样?如何使其在黑色上呈现蓝色,或者至少在深色上呈现浅色?

这是在 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_COLORBACKGROUND_COLOR都是 0-255 范围内的数字。下面的屏幕截图显示了 16 和 256 颜色模式的颜色代码的完整列表:

16 和 256 颜色模式颜色代码

答案2

的颜色ls可以代表权限;某些系统的默认设置是以绿色背景显示每个人都具有写入权限的目录:

在此输入图像描述

您可以使用(来自)编辑$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

您不需要拥有所有默认值,您也可以只创建一个包含一行的文件,仅重新定义您想要更改的文件。无论如何,一旦创建了文件,请使用以下命令加载它:

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

它正在发挥作用:

在此输入图像描述

要自动执行此操作,请将eval上面的命令添加到您的~/.bashrc文件中。

答案3

太棒了;该如何解决呢?

要快速解决问题:

LS_COLORS+=':ow=01;33'
  • 使其他可写文件在 nobg 上显示为黄色
  • 编辑您的 shell 配置文件(例如~/.bashrc~/.profile等)以使其永久化。

更多细节:

替换3334for blueon 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将每条规则放在一行并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 的答案)中所述,是前景 x-term 256 色和背景 x-term 256 色的38;5;前缀。48;5;但并非所有终端都支持 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

相关内容