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


363

Ubuntu ls命令中不同的颜色是什么意思?例如,当我ls在其中一个文件夹中键入命令时,其中一个文件显示为浅绿色,另一个文件(即一个文件夹)显示为蓝色,并带有绿色突出显示。

这些颜色是什么意思,所有颜色都有手册吗?

Answers:


390
  • 蓝色:目录
  • 绿色:可执行或已识别的数据文件
  • 天蓝色:符号链接文件
  • 黄色,黑色背景:设备
  • 粉色:图形图像文件
  • 红色:存档文件
  • 红色,黑色背景:链接断开

供你参考:

  • 要关闭颜色,您必须在中注释掉以下几行.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       
    } 

    输出:
    替代文字

注意:


28
eval显示了每种类型的输出色彩表现脚本是辉煌...谢谢!
罗斯,

2
纯资源;)
Homunculus Reticulli 2015年

5
eval脚本的更具可读性的版本在这里:github.com/gkotian/gautam_linux/blob/master/scripts/colours.sh
Gautam,

3
红色也是无效的符号链接。
托马斯·沃德

1
普通白色文本的文件呢?
秒。

98

您可以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,动物园,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的这些变色指令中。


谢谢!我在看一个Git拓扑可视化 问题,想知道为什么要打印某些字符。
pdp

27

如果您从命令行键入dircolorsecho $LS_COLORS也可以使用),您将在1行中获得许多文件类型的代码和颜色列表。dircolors --print-database一次显示1行。这是一份简短的清单(我尝试输入最重要的清单)。底部有每行末尾不同代码代表什么的解释:

NORMAL 00#全局默认值,尽管一切都应该是某些东西。
FILE 00#普通文件
DIR 01; 34#目录
LINK 01; 36#符号链接。(如果将其设置为“ target”而不是
 #数值,颜色与指向的文件相同。)
FIFO 40; 33#管道
SOCK 01; 35#插座
门01; 35#门
BLK 40; 33; 01#块设备驱动程序
CHR 40; 33; 01#字符设备驱动程序
ORPHAN 40; 31; 01#符号链接到不存在的文件或无法状态的文件
SETUID 37; 41#是setuid的文件(u + s)
SETGID 30; 43#setgid文件(g + s)
STICKY_OTHER_WRITABLE 30; 42#粘性且可写的目录(+ t,o + w)
OTHER_WRITABLE 34; 42#可以写(o + w)且不粘的目录
STICKY 37; 44#dir,其粘性位已设置(+ t),并且不可写
#存档或压缩(亮红色)
.tar 01; 31
.tgz 01; 31
#图片格式
.jpg 01; 35
.jpeg 01; 35
.gif 01; 35
.bmp 01; 35
#音频格式
.aac 00; 36
.flac 00; 36
.ogg 00; 36
  • 属性代码: 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed
  • 文字颜色代码: 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white
  • 背景颜色代码: 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white

如果您想解决这个问题,这里有一个有关如何为文件设置颜色的示例:

export LS_COLORS=$LS_COLORS:"*.ogg=01;35":"*.mp3=01;35"  

这将设置*.ogg.mp3bold magenta。如果将其放入.bashrc文件中,它将成为永久文件。


2
嘿,也许其他人会提供更好的答案。顺便说一句,你用这个
投票使

继续前进!你自己在那里...不过,再次感谢,我做了一个/“ string”来搜索一些我不确定的颜色
user784637 2011年

这个(出色的)答案已合并,以防您想知道日期。:-)
Stefano Palazzo

@Rinzwind,所以要为pdf文件设置颜色,过程是使用export?是否可以在默认LS_COLORS 变量中简单地添加一个扩展名?
Sigur

23

这扩展了Karthick87的答案


使用默认设置

  • 未着色(白色):文件非文件名文本(在输出例如权限ls -l
  • 粗体蓝色:目录
  • 大胆的青色:符号链接
  • 粗体绿色:可执行文件
  • 粗体红色:存档文件
  • 洋红色粗体:图像文件,视频,图形等插座
  • 青色:音频文件
  • 黄色,黑色背景:管道(又名FIFO)
  • 带有黑色背景的加粗黄色:块设备字符设备
  • 带有黑色背景的大胆红色:孤立的符号链接文件丢失
  • 无色,带红色背景:设置用户ID文件
  • 黑色和黄色背景:set-group-ID文件
  • 黑色和红色背景:具有功能的文件
  • 白色和蓝色背景:粘性目录
  • 蓝色和绿色背景:其他可写目录
  • 黑色与绿色背景:粘滞和其他可写目录

显示颜色的脚本

#!/bin/bash
# For LS_COLORS, print type and description in the relevant color.

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

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

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

    printf "\e[%sm%s\e[m " "$color" "$type"

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

默认设置输出:

gnome-terminal屏幕截图

使用我的设置输出(自定义dircolors和自定义Solarized终端主题):

gnome-terminal屏幕截图

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

颜色和说明在14.04至17.10中相同。


您怎么知道rs手段RESETmh手段MULTIHARDLINKca手段CAPABILITY等?
弗雷德里克·高斯

@FredrickGauss如我在答案中所写,我从运行中获得了描述dircolors -p
wjandrea

dircolors -p不说rsRESET 0#重置为“正常”颜色
Fredrick Gauss

@FredrickGauss没有明确说明,但是“ RESET”是唯一可以缩写为“ rs”的名称,并且颜色(0)匹配。
wjandrea

18

这里没有答案包括最新版本的Ubuntu中的256种颜色选项。我的颜色不足(有些颜色使我彼此麻烦),所以我很难读懂黑色的默认蓝色目录。接下来是我的研究以改变这一点。

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

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

替代方案:seebi的solarized项目中拾取非常相似的256种颜色dircolor 。

抓取此colortest脚本并使用命令运行它,colortest -w以便您可以一次查看所有颜色。选择一种颜色。我喜欢橙色的#208。我希望将其作为文本颜色,因此可以在扩展颜色代码上使用此信息,然后将其应用。

所以你有颜色,现在呢。首先,我们必须创建字符串。

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

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

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

如果您还想在其上放置背景,请使用colortest脚本和;48;5;背景附加项选择另一种颜色(例如56),并为该颜色附加56以得到总的字符串00;38;5;208;48;5;56

那么,现在您拥有了,您将如何处理?

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

这不会立即生效,您需要加载配置。使用dircolors ~/.dircolors获取代码来设置LS_COLORS变量。您可以将其粘贴到终端会话中,也可以关闭终端然后重新打开。您还可以将其通过管道传输到文件中,然后作为外壳脚本运行。

您可以使用16种颜色执行相同的步骤。您不需要特殊的; 38; 5或; 48; 5东西。只需将数字扔进字符串中即可享受简单性。

感谢Danseebi在此方面的注释和代码。


请检查256色是否仅在xterm兼容终端中有效。因此,256色不适用于Konsole,但不适用于xtermrxvt-unicode
DK Bose

1
Konsole做自己的事。请查看draculatheme.com/konsoletechoverflow.net/2013/11/08/installing-konsole-solarized-theme,以获得不错的配色方案。
flickerfly
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.