ls中不同颜色的含义是什么?

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

这些颜色是什么意思,有关于所有颜色的手册?

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

供您参考:

  • 要关闭颜色,您必须在.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 } 

    输出:
    替代文字

注意:

  • 有关更多信息, man dir_colors在终端输入man dir_colors

你可以通过查看$LS_COLORS变量找出ls使用的颜色:

  • 绿松石:音频文件1
  • 鲜红色:档案和压缩文件2
  • 紫色:图像和video3

此外,文件按属性着色:

替代文字


  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的输出中,但其格式却相当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[转义指令使你的终端以彩色打印\33[并以m结尾。 33或hex的1B是ASCII符号“ESCAPE”(ASCII字符集中的特殊字符)。 例:

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

用鲜红色打印“Hello World”。

命令ls带有参数--color=auto (在Ubuntu上, lsls --color=auto的别名)遍历所有文件名并首先尝试匹配不同的类型,如Executable,Pipe等。 然后它尝试匹配正则表达式,如* .wav,并打印生成的文件名,包含在bash的这些颜色更改说明中。

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

正常00#全局默认,虽然一切都应该是什么。
 FILE 00#普通文件
 DIR 01; 34#目录
 LINK 01; 36#符号链接。  (如果将其设置为'target'而不是a
  #数值,颜色与指向的文件相同。)
 FIFO 40; 33#管道
 SOCK 01; 35#sockets
 DOOR 01; 35#门
 BLK 40; 33; 01#阻止设备驱动程序
 CHR 40; 33; 01#字符设备驱动程序
 ORPHAN 40; 31; 01#符号链接到不存在的文件或非stat'able文件
 SETUID 37; 41#文件是setuid(u + s)
 SETGID 30; 43#文件setgid(g + s)
 STICKY_OTHER_WRITABLE 30; 42#dir是粘性和其他可写的(+ t,o + w)
 OTHER_WRITABLE 34; 42#dir是其他可写(o + w)且不粘
 STICKY 37; 44#dir,粘滞位设置(+ t)而不是其他可写的
 #archives或压缩(鲜红色)
 .tar 01; 31
 .tgz 01; 31
 #image格式
 .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.mp3设置为bold magenta 。 如果你把它放在.bashrc文件中,它将成为永久性的。

这里的答案都不包括最新版本的Ubuntu中的256色选项。 我的颜色不足(有些颜色给我带来了麻烦)所以黑色的默认蓝色目录对我来说真的很难读。 以下是我改变这种情况的研究。

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

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

替代方案:从seebi的日晒项目中选择一种非常相似的256色dircolors。

抓取这个colortest脚本并使用命令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的东西。 只需将数字投入字符串即可享受简单性。

感谢Dan和seebi的笔记和代码。

这扩展了Karthick87的答案 。


使用默认设置

  • 未着色(白色) :文件或非文件名文本(例如ls -l输出中的权限)
  • 大胆的蓝色 :目录
  • 粗体青色 :符号链接
  • 粗体绿色 :可执行文件
  • 粗体红色 :存档文件
  • 粗体洋红色 :图像文件,video,图形等sockets
  • 青色 :音频文件
  • 黄色与黑色背景 :管(AKA FIFO)
  • 大胆的黄色与黑色背景 :块设备字符设备
  • 大胆的红色与黑色背景 :孤立符号链接丢失文件
  • 未着色的红色背景 :set-user-ID文件
  • 黑色与黄色背景 :set-group-ID文件
  • 黑色与红色背景 :文件与function
  • 白色与蓝色背景 :粘滞的目录
  • 蓝色与绿色背景 :其他可写目录
  • 黑色与绿色背景 :粘性和其他可写目录

用于显示颜色的脚本

 #!/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 -pman dir_colors那里得到了描述,并用我自己的研究填补了空白。

颜色和描述从14.04到17.10是相同的。