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


141

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

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

这是在Ubuntu 12.04上,在Gnome Terminal中使用bash。在Konsole中,蓝色可能会稍深一些,虽然可能会更好一些,但可以阅读。

Answers:


162

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

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

来自Ask Ask Ubuntu的Stephano Palazzo对不同的属性颜色做了非常有启发性的描述:

终端中不同颜色的含义

正如terdon所指出的,可以通过修改颜色设置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色模式颜色代码


5
Background_COLOR代码与FOREGROUND_COLOR不同;背景代码为40-47
Ryan V. Bissell

38;5;启动xterm 256色前景色代码。 48;5;启动xterm 256色背景颜色代码。青色我dircolors输出是38;5;51 不是 36虽然结果是一样的。
stevesliva '18

1
@stevesliva:感谢您的评论。我已经编辑了答案以正确指示背景颜色代码,并描述了256色前景色和背景颜色代码。
托马斯·尼曼

55

的颜色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.

语法在这里确实让人讨厌,但是您可以通过创建具有所需颜色的文件并将其另存为来更改此颜色~/.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文件中。


8
默认颜色通常似乎表明原始作者虽然讨厌我们和我们的眼睛……
kurtm

1
谢谢。为什么有时写〜/ .dirname,有时写〜/ dircolors,有时写〜/ .dircolors?他们应该是一样的吗?
蒂姆(Tim)

谢谢。为什么要eval "$(dircolors ~/dircolors)";代替更直接的方式dircolors ~/dircolors呢?
蒂姆(Tim)

@Tim因为dircolors仅打印设置,所以您需要评估一下设置才能被读取。
terdon

让他们读给谁听?
蒂姆(Tim)

11

尽管所有技术答案都是正确的,但我认为这是一个非正式的警告,即您要慷慨地出示一些权利,或复制纵横交错的代码...(大多数情况下,我们都会这样做,以使事情最初起作用?)

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

这样的声明可以使您重新获得最可能需要的权利:

chmod -R a-x,o-w,+X thatGreenFolderWithSubfolders/

如果您了解大写+ X“特殊执行”的目的,则最好理解它的作用,即参阅Wikipedia

仅当与'+'一起使用并且通常与-R选项结合使用时,它才可以提供对大目录树的组访问或其他访问权限,而无需设置对普通文件(例如文本文件)的执行权限,如果您刚刚使用了“ chmod -R a + rx ...


8

我有同样的问题,terdon的回答很好,但我认为dirname和dircolors之间有混淆吗?

无论如何,经过一些进一步的研究,我可以更改颜色,所以我在这里分享我的解决方案。有一天可能对某人有用!

因此,只需3个简单步骤:

首先,正如terdon所说,将默认颜色复制到文件中

dircolors -p > ~/.dircolors

然后修改该文件。您可以在其中找到一些颜色值,但是我在这里找到了更多:)

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

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

Voilà:)


1
因为~/.zshrc我必须去 if [[ -f ~/.dircolors ]] ; then eval $(dircolors -b ~/.dircolors) elif [[ -f /etc/DIR_COLORS ]] ; then eval $(dircolors -b /etc/DIR_COLORS) fi。抱歉,换行太糟糕了
Eric D. Johnson

2

要快速解决此问题,(将其他可写文件设为nobg黄色):

LS_COLORS+=':ow=01;33'

更换33通过34对nobg蓝色。甚至更简单,使其在nobg上成为nofg:

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的答案)中所述,38;5;是前景x项256色和48;5;背景x项256色的前缀。并非所有终端都支持256色。

另请参阅AskUbuntu上的-ls中不同的颜色是什么意思?”


1

好吧,这意味着如果您运行此文件夹,则该文件夹具有权限:

сhmodog-w AU_LI

它将删除bgcolor :)


0

要解决此问题,请在LS_COLORS上尝试ow参数

例如:

~LS_COLORS='fi=0:ln=5:pi=0:so=7:bd=5:cd=5:or=31:mi=0:ex=93:*.py=36:di=40:*.zip=33:*.tgz=33'
~ls -l

在此处输入图片说明

现在添加ow选项

~export LS_COLORS='fi=0:ln=5:pi=0:so=7:bd=5:cd=5:or=31:mi=0:ex=93:*.py=36:di=40:*.zip=33:*.tgz=33:ow=0'
~ls -l

在此处输入图片说明


0

您可以更改腻子中的绿色调以使文本可读。

打开腻子,然后转到“窗口\颜色”,选择“ ANSI绿色”,将其设置为较深的绿色(R:0 G:70 B:0)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.