当前位置: 首页>>技术教程>>正文


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

, , ,

问题描述

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

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

最佳解决思路

  • 蓝色:目录

  • 绿色:可执行或可识别的数据文件

  • 天蓝色:符号链接文件

  • 黄色与黑色背景:设备

  • 粉红色:图形图像文件

  • 红色:存档文件

  • 红色与黑色背景:断开的链接

供你参考:

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

次佳解决思路

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

  • 绿松石:音频文件1

  • 鲜艳的红色:档案和压缩文件2

  • 紫色:图片和视频3

另外,文件通过属性着色:

command-line,colors,ls,ubuntu


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

  2. tar,tzz,arj,taz,lz,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”。

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

第三种解决思路

如果从命令行键入dircolors(echo $LS_COLORS也可以),您将在1行中获得许多文件类型的代码和颜色列表。 dircolors --print-database一次显示1行。这里是一个简短的列表(我试图把最重要的)。底部有关于每行末尾代码不同的解释:


NORMAL 00 # global default, although everything should be something.
FILE 00 # normal file
DIR 01;34 # directory
LINK 01;36 # symbolic link. (If you set this to 'target' instead of a
 # numerical value, the color is as for the file pointed to.)
FIFO 40;33 # pipe
SOCK 01;35 # socket
DOOR 01;35 # door
BLK 40;33;01 # block device driver
CHR 40;33;01 # character device driver
ORPHAN 40;31;01 # symlink to nonexistent file, or non-stat'able file
SETUID 37;41 # file that is setuid (u+s)
SETGID 30;43 # file that is setgid (g+s)
STICKY_OTHER_WRITABLE 30;42 # dir that is sticky and other-writable (+t,o+w)
OTHER_WRITABLE 34;42 # dir that is other-writable (o+w) and not sticky
STICKY 37;44 # dir with the sticky bit set (+t) and not other-writable
# archives or compressed (bright red)
.tar 01;31
.tgz 01;31
# image formats
.jpg 01;35
.jpeg 01;35
.gif 01;35
.bmp 01;35
# audio formats
.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’s solarized项目中选取一个非常类似的256色dircolors。

抓住colortest script并使用colortest -w命令运行它,以便一次看到所有颜色。选择一种颜色。我喜欢橙色#208。我希望这是文字颜色,所以在扩展颜色代码上使用这些信息,我可以应用它。

所以你有一种颜色,现在是什么。首先,我们必须创建字符串。

第一个数字是一个属性代码,最有可能是00,但如果你想让它闪烁05:

Pick an attribute code: 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed

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

如果你还想在背景上添加背景,请使用colortest脚本和附加的;48;5;选择另一种颜色(比方说56)作为背景,使用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东西。只需将数字投入字符串并享受简单。

感谢Danseebi的备注和代码。

第五种思路

这扩展了Karthick87’s answer


使用默认设置

  • 无色(白色):文件或non-filename文本(例如,ls -l输出中的权限)

  • 大胆的蓝色:目录

  • 粗体青色:符号链接

  • 粗体绿色:可执行文件

  • 粗体红色:存档文件

  • 大胆洋红色:图像文件,视频,图形等或门或插座

  • 青色:音频文件

  • 黄色与黑色背景:管(AKA FIFO)

  • 带黑色背景的粗体黄色:块设备或字符设备

  • 带黑色背景的粗体红色:孤立符号链接或缺少文件

  • 无色红色背景:set-user-ID文件

  • 黑色和黄色背景:set-group-ID文件

  • 黑色与红色背景:文件与能力

  • 白色与蓝色背景:粘滞目录

  • 蓝色与绿色背景:other-writable目录

  • 黑色与绿色背景:粘性和other-writable目录

显示颜色的脚本

#!/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

以默认设置输出:

command-line,colors,ls,ubuntu

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

command-line,colors,ls,ubuntu

我收到了dircolors -pman dir_colors的描述,并填补了我自己的研究空白。

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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/116.html,未经允许,请勿转载。

相关内容