“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_COLOR
和BACKGROUND_COLOR
都是 0-255 范围内的数字。下面的屏幕截图显示了 16 和 256 颜色模式的颜色代码的完整列表:
答案2
的颜色ls
可以代表权限;某些系统的默认设置是以绿色背景显示每个人都具有写入权限的目录:
您可以使用(来自)编辑$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
您不需要拥有所有默认值,您也可以只创建一个包含一行的文件,仅重新定义您想要更改的文件。无论如何,一旦创建了文件,请使用以下命令加载它:
eval "$(dircolors ~/.dircolors)";
它正在发挥作用:
要自动执行此操作,请将eval
上面的命令添加到您的~/.bashrc
文件中。
答案3
太棒了;该如何解决呢?
要快速解决问题:
LS_COLORS+=':ow=01;33'
- 使其他可写文件在 nobg 上显示为黄色
- 编辑您的 shell 配置文件(例如
~/.bashrc
、~/.profile
等)以使其永久化。
更多细节:
替换33
为34
for blue
on 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