ls 中不同的颜色代表什么意思?

ls 中不同的颜色代表什么意思?

Ubuntuls命令中的不同颜色代表什么?例如,当我ls在其中一个文件夹中键入命令时,我得到的是浅绿色的一个文件,另一个(即文件夹)是蓝色的,并以绿色突出显示。

这些颜色代表什么?有关于所有颜色的手册吗?

答案1

  • 蓝色的: 目录
  • 绿色的:可执行或可识别的数据文件
  • 青色(天蓝色):符号链接文件
  • 黄色与黑色背景: 设备
  • 品红(粉色):图形图像文件
  • 红色的:存档文件
  • 红色与黑色背景:链接已损坏

供你参考:

  • 要关闭颜色,您必须注释掉以下几行.bashrc

    # enable color support of ls and also add handy aliases
    #if [ -x /usr/bin/dircolors ]; then
    #    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
    #    alias ls='ls --color=auto'
    #    #alias dir='dir --color=auto'
    #    #alias vdir='vdir --color=auto'
    #
    #    alias grep='grep --color=auto'
    #    alias fgrep='fgrep --color=auto'
    #    alias egrep='egrep --color=auto'
    #fi
    
  • 此外,如果您想查看自己的 bash 颜色含义,请在终端中复制/粘贴以下代码。

    eval $(echo "no:global default;fi:normal file;di:directory;ln:symbolic link;pi:named pipe;so:socket;do:door;bd:block device;cd:character device;or:orphan symlink;mi:missing file;su:set uid;sg:set gid;tw:sticky other writable;ow:other writable;st:sticky;ex:executable;"|sed -e 's/:/="/g; s/\;/"\n/g')           
    {      
      IFS=:     
      for i in $LS_COLORS     
      do        
        echo -e "\e[${i#*=}m$( x=${i%=*}; [ "${!x}" ] && echo "${!x}" || echo "$x" )\e[m" 
      done       
    } 
    

输出:
终端输出

笔记:

答案2

ls您可以通过查看变量来了解颜色的用途$LS_COLORS

  • 绿松石:音频文件1
  • 亮红色:档案和压缩文件2
  • 紫色:图片和视频3

此外,文件还根据属性着色:

替代文本


  1. aac、au、flac、mid、midi、mka、mp3、mpc、ogg、ra、wav、axa、oga、spx、xspf。

  2. tar、tgz、arj、taz、lzh、lzma、tlz、txz、zip、z、Z、dz、gz、lz、xz、bz2、bz、tbz、tbz2、tz、deb、rpm、jar、rar、ace、zoo、cpio、7z、rz。

  3. jpg、jpeg、gif、bmp、pbm、pgm、ppm、tga、xbm、xpm、tif、tiff、png、svg、svgz、mng、pcx、mov、mpg、mpeg、m2v、mkv、ogm、mp4、m4v、mp4v、vob、qt、nuv、wmv、asf、rm、rmvb、flc、avi、fli、flv、gl、dl、xcf、xwd、yuv、cgm、emf、axv、anx、ogv、ogx。


所有这些信息都包含在 的输出中dircolors --print-database,但其格式相当难以阅读。

以下是对这一现象的技术解释:

例子:

CHR 40;33;01

颜色代码由三部分组成:

  • 分号之前的第一部分代表文本样式。

    • 00=无,01=粗体,04=下划线,05=闪烁,07=反向,08=隐藏。
  • 第二和第三部分是颜色和背景颜色:

    • 30=黑色,31=红色,32=绿色,33=黄色,34=蓝色,35=洋红色,36=青色,37=白色。

假设从左侧开始,每个部分都可以省略。例如,“01”表示粗体,“01;31”表示粗体和红色。并且,您可以通过用转义指令\33[并以结尾来使终端以彩色打印m。33(十六进制中的 1B)是 ASCII 符号“ESCAPE”(ASCII 字符集中的特殊字符)。示例:

"\33[1;31mHello World\33[m"

用鲜红色打印“Hello World”。

ls带有参数的命令--color=auto(在 Ubuntu 上ls是 的别名ls --color=auto)会遍历所有文件名,并首先尝试匹配不同类型,如可执行文件、管道等。然后,它会尝试匹配正则表达式,如 *.wav,并打印结果文件名,这些文件名包含在 bash 的变色指令中。

答案3

[这扩展了Karthick87 的回答

完整列表,采用默认设置

  • 无色(白色)
    • 文件
    • 非文件名文本(例如输出中的权限ls -l
    • 多重硬链接文件
  • 大胆的蓝色: 目录
  • 粗体青色:符号链接
  • 大胆的绿色:可执行文件
  • 大胆的红色:存档文件
  • 大胆洋红色
    • 图像文件、视频、图形等
    • 插座
  • 青色:音频文件
  • 黄色与黑色背景:管道(又称 FIFO)
  • 粗黄色,黑色背景
    • 块设备
    • 字符设备
  • 大胆红色搭配黑色背景
    • 孤儿符号链接
    • 缺少文件
  • 无色,红色背景:设置用户 ID 文件
  • 黑色带黄色背景:设置组 ID 文件
  • 黑色带红色背景:具有功能的文件
  • 白色带蓝色背景:粘性目录
  • 蓝色与绿色背景:其他可写目录
  • 黑色与绿色背景:粘性目录和其他可写目录

请注意,粗红色看起来是橙色,黑色看起来是深灰色,青色看起来是蓝色/绿色,粗洋红色看起来是紫色/粉红色/淡紫色。

显示颜色的脚本

#!/bin/bash
# For each entry in LS_COLORS, print the type, and description if available,
# in the relevant color.
# If two adjacent colors are the same, keep them on one line.

declare -A descriptions=(
    [bd]="block device"
    [ca]="file with capability"
    [cd]="character device"
    [di]="directory"
    [do]="door"
    [ex]="executable file"
    [fi]="regular file"
    [ln]="symbolic link"
    [mh]="multi-hardlink"
    [mi]="missing file"
    [no]="normal non-filename text"
    [or]="orphan symlink"
    [ow]="other-writable directory"
    [pi]="named pipe, AKA FIFO"
    [rs]="reset to no color"
    [sg]="set-group-ID"
    [so]="socket"
    [st]="sticky directory"
    [su]="set-user-ID"
    [tw]="sticky and other-writable directory"
)

IFS=:
for ls_color in $LS_COLORS; do
    color="${ls_color#*=}"
    type="${ls_color%=*}"

    # Add description for named types.
    desc="${descriptions[$type]}"

    # Separate each color with a newline.
    if [[ $color_prev ]] && [[ $color != "$color_prev" ]]; then
        echo
    fi

    printf "\e[%sm%s%s\e[m " "$color" "$type" "${desc:+ ($desc)}"

    # For next loop
    color_prev="$color"
done
echo

采用默认设置的输出:

gnome-terminal 截图 - 默认

使用我的设置输出(自定义目录颜色自定义 Solarized 终端主题):

gnome-terminal 屏幕截图 - 自定义

dircolors -p我从和中获得了描述man dir_colors,并用自己的研究填补了空白。

至少从 14.04 到 17.10,颜色和描述都是相同的。

答案4

这里的所有答案都不包括最新版本的 Ubuntu 中的 256 种颜色选项。我色盲(有些颜色彼此相邻时会给我带来麻烦),所以黑色上的默认蓝色目录对我来说很难阅读。接下来是我为改变这种情况所做的研究。

键入dircolors -p |less以查看当前的颜色代码。

默认的 .bashrc 应该已经配置好了,不仅可以利用系统颜色代码,还可以利用 ~/.dircolors 中的颜色代码,因此将 dircolors 输出转储到 .dircolor,以便您可以使用此命令开始使用。 dircolors -p > ~/.dircolors

选择:从中挑选一个非常相似的 256 色 dircolorsseebi 的 solarized项目。

抓住这个颜色测试脚本并使用命令运行它,colortest -w这样您就可以一次看到所有颜色。选择一种颜色。我喜欢橙色 #208。我希望那是文本颜色,因此使用扩展颜色代码上的此信息,我可以应用它。

现在您有了颜色,接下来该做什么呢?首先我们必须创建字符串。

第一个数字将是一个属性代码,最有可能是 00,但如果您希望它闪烁,请使用 05:

选择属性代码:00=无 01=粗体 04=下划线 05=闪烁 07=反向 08=隐藏

接下来选择附加;38;5;到该属性代码以指示您的文本颜色为 00;38;5; 然后附加您的颜色。我选择了 208,所以我得到了00;38;5;208

如果您还想在其上添加背景,请使用 colortest 脚本选择另一种颜色(假设为 56),然后附加;48;5;背景和 56 作为颜色,以获得总字符串00;38;5;208;48;5;56

那么现在你有了它,你会用它做什么?

vim ~/.dircolors并找到您想要更改的部分(对我来说是 DIR)为我们上面确定的字符串“00;38;5;208”。

这不会立即生效,您需要加载配置。使用dircolors ~/.dircolors获取代码来设置您的 LS_COLORS 变量。您可以将其粘贴到终端会话中,也可以关闭终端并重新打开它。您也可以将其导入文件并将其作为 shell 脚本运行。

您可以用 16 种颜色执行相同的过程。您不需要特殊的 ;38;5 或 ;48;5 东西。只需将数字放入字符串中并享受简单性。

谢谢西比了解他们的注释和代码。

相关内容