ls 输出中出现这种绿色背景的原因是什么?

Dar*_*enW 211 ls colors terminal

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

'ls' 显示了两个目录。通常,任何地方的目录都是黑色背景上的蓝色。但第一个是蓝底绿字,无法阅读。为什么是这样?如何使它在黑色上变成蓝色,或者至少在深色上有一些亮色?

这是在 Ubuntu 12.04 上,在 Gnome 终端中使用 bash。在 Konsole 中,蓝色略深,可以阅读,但可能会更好。

Tho*_*man 231

除了根据文件类型为文件着色(音频文件为绿松石,档案和压缩文件为鲜红色,图像和视频为紫色),ls还根据文件和目录的属性为文件和目录着色:

  • 带绿色背景的黑色文本表示目录可被除拥有用户和组之外的其他人写入,并且设置了粘滞位 ( o+w, +t)。
  • 与绿色背景的蓝色文本说明了一个目录是被别人除了拥有用户和组可写的,并且也不会有粘性位设置(o+w, -t)。

Stephano宫过在问的Ubuntu已经取得了不同属性的颜色这很有启发性的画面:

终端中不同颜色的含义

正如terdon 所指出的,颜色设置可以通过dircolors. 可以使用 访问不同着色设置的列表dircolors --print-database

每行输出,例如BLK 40;33;01,都是以下形式:

[TARGET] [TEXT_STYLE];[FOREGROUND_COLOR];[BACKGROUND_COLOR]
Run Code Online (Sandbox Code Playgroud)
  • 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]
Run Code Online (Sandbox Code Playgroud)

XTerm 256 色背景颜色代码的形式如下:

48;5;[BACKGROUND_COLOR]
Run Code Online (Sandbox Code Playgroud)

其中FOREGROUND_COLORBACKGROUND_COLOR都是 0-255 范围内的数字。以下屏幕截图显示了 16 和 256 色模式的完整颜色代码列表:

16 和 256 色模式颜色代码

  • Background_COLOR 代码与 FOREGROUND_COLOR 不同;背景代码为 40-47 (5认同)

ter*_*don 71

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

在此处输入图片说明

您可以通过$LS_COLORS使用dircolors(from 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.
Run Code Online (Sandbox Code Playgroud)

诚然,这里的语法有点烦人,但您可以通过使用所需颜色创建文件并将其另存为来更改此颜色~/.dircolors

dircolors -p > ~/.dircolors
Run Code Online (Sandbox Code Playgroud)

该命令会将默认值打印到~/.dircolors. 然后,您需要编辑该文件并更改此行:

OTHER_WRITABLE 34;42 # dir that is other-writable (o+w) and not sticky
Run Code Online (Sandbox Code Playgroud)

例如,要使其成为红色背景上的黑色文本(有关颜色代码列表,请参见此处):

OTHER_WRITABLE 30;41 # dir that is other-writable (o+w) and not sticky
Run Code Online (Sandbox Code Playgroud)

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

eval "$(dircolors ~/.dircolors)";
Run Code Online (Sandbox Code Playgroud)

这是在行动:

在此处输入图片说明

要自动发生这种情况,请将eval上面的命令添加到您的~/.bashrc文件中。

  • 默认颜色通常似乎表明原作者讨厌我们和我们的眼睛,尽管...... (11认同)

Fra*_*cke 18

虽然所有的技术答案都是正确的,但我认为这是一个非正式的警告,你慷慨地或复制纵横交错的权利...... ?)

如何使它在黑色上变成蓝色,...?

一个很好的“去绿色化”来恢复你最可能想要的权利,是这样的声明:

chmod -R a-x,o-w,+X thatGreenFolderWithSubfolders/
Run Code Online (Sandbox Code Playgroud)

最好理解它的作用,如果您了解大写 +X“特殊执行”的目的,即参见维基百科

它仅在与 '+' 一起使用时才真正有用,并且通常与 -R 选项结合使用,以便在不设置普通文件(例如文本文件)的执行权限的情况下授予组或其他访问大目录树的权限,这通常会在以下情况下发生你刚刚使用了“chmod -R a+rx ...


Kev*_*inG 14

以下是我用来更改颜色的 3 个步骤:

首先,将默认颜色复制到文件中

dircolors -p > ~/.dircolors
Run Code Online (Sandbox Code Playgroud)

然后修改这个文件。你可以在里面找到一些颜色的值,这里还有一些:

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
Run Code Online (Sandbox Code Playgroud)

来源

最后,~/.bashrc将以下行添加到您的文件中,以便在您打开终端时自动加载颜色:

eval 'dircolors ~/.dircolors' > /dev/null
Run Code Online (Sandbox Code Playgroud)

对于~/.zshrc

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


lox*_*axs 10

tldr; 如何修复它?

要快速解决问题:

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

更多细节:

更换3334bluenobg。更简单的方法nofgnobg

LS_COLORS+=:ow=
Run Code Online (Sandbox Code Playgroud)

要使您的更改永久化,请将其附加到您的 .profile:

echo "export LS_COLORS+=':ow=01;33'" >> ~/.profile
Run Code Online (Sandbox Code Playgroud)

查看 的非扩展相关规则LS_COLORS

echo "$LS_COLORS" | sed 's/:/\n/g' | grep -v '\*.'
Run Code Online (Sandbox Code Playgroud)

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.
}
Run Code Online (Sandbox Code Playgroud)

然后

LS_COLORS="$C:ow=38;5;250;48;5;025";t
Run Code Online (Sandbox Code Playgroud)

正如另一个答案(Thomas Nyman 的答案)中所述,38;5;是前景 x-term 256-colors 和48;5;背景 x-term 256-colors的前缀。不过,并非所有终端都支持 256 色。

另请参阅- AskUbuntu 上的- ls 中不同颜色的含义是什么? -