Colorazione dell’output di ls in Linux: dir_colors

giovedì 27 marzo 2008 alle 27:48 | Pubblicato su Linux | 1 commento

Da quando ho installato gli ambienti di test con Oracle Enterprise Linux (in realtà si tratta di un server solo con qualche macchina virtuale XEN sopra, per questo parlo un po’ al plurale un po’ al singolare) ho un fastidioso problema. In Io utilizzo quasi sempre putty per collegarmi a questo server e con queste distribuzioni (Oracle Enterprise Linux 5 e Oracle Enterprise Linux 4) è impostata per default una particolara colorazione dell’output di ls per cui le directory vengono riportate in blu scuro, che su sfondo nero è decisamente poco leggibile.

Nelle distribuzioni Suse Enterprise Linux questo problema non l’ho mai avuto, li le directory vengono di un bel blu chiaro ben leggibile sullo sfondo nero.

Dopo un po’ di patimenti, ho deciso di indagare sul problema al fine di risolverlo e finalmente ci sono riuscito, imparando anche una cosa nuova.

LS_COLORS

Il comando ls colora l’output sulla base della variabile d’ambiente LS_COLORS che ha un formato piuttosto complicato:


[oracle@cordelia ~]$ echo $LS_COLORS
no=00:fi=00:di=00;34:ln=00;36:pi=40;33:so=00;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=00 ...

per decenza ho tagliato via un po’ di roba

dircolors

dircolors è un programma di utilità che server per settare in modo opportuno la variabile d’ambiente LS_COLORS a partire da un file con un formato quasi leggibile, usando l’opzione –print-database si può osservare tale formato:

 
[oracle@cordelia ~]$ dircolors --print-database
 # Configuration file for dircolors, a utility to help you set the
 # LS_COLORS environment variable used by GNU ls with the --color option.
 
# The keywords COLOR, OPTIONS, and EIGHTBIT (honored by the
 # slackware version of dircolors) are recognized but ignored.
 
# Below, there should be one TERM entry for each termtype that is colorizable
 TERM linux
 TERM linux-c
 TERM mach-color
 TERM console
 TERM con132x25
 TERM con132x30
 TERM con132x43
 TERM con132x60
 TERM con80x25
 TERM con80x28
 TERM con80x30
 TERM con80x43
 TERM con80x50
 TERM con80x60
 TERM dtterm
 TERM xterm
 TERM xterm-color
 TERM xterm-debian
 TERM rxvt
 TERM screen
 TERM screen-w
 TERM vt100
 TERM Eterm
 
# Below are the color init strings for the basic file types. A color init
 # string consists of one or more of the following numeric codes:
 # Attribute codes:
 # 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed
 # Text color codes:
 # 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white
 # Background color codes:
 # 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white
 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
 
# This is for files with execute permission:
 EXEC 01;32
 
# List any file extensions like '.gz' or '.tar' that you would like ls
 # to colorize below. Put the extension, a space, and the color init string.
 # (and any comments you want to add after a '#')
 
# If you use DOS-style suffixes, you may want to uncomment the following:
 #.cmd 01;32 # executables (bright green)
 #.exe 01;32
 #.com 01;32
 #.btm 01;32
 #.bat 01;32
 
.tar 01;31 # archives or compressed (bright red)
 .tgz 01;31
 .arj 01;31
 .taz 01;31
 .lzh 01;31
 .zip 01;31
 .z   01;31
 .Z   01;31
 .gz  01;31
 .bz2 01;31
 .deb 01;31
 .rpm 01;31
 .jar 01;31
 
# image formats
 .jpg 01;35
 .jpeg 01;35
 .gif 01;35
 .bmp 01;35
 .pbm 01;35
 .pgm 01;35
 .ppm 01;35
 .tga 01;35
 .xbm 01;35
 .xpm 01;35
 .tif 01;35
 .tiff 01;35
 .png 01;35
 .mov 01;35
 .mpg 01;35
 .mpeg 01;35
 .avi 01;35
 .fli 01;35
 .gl 01;35
 .dl 01;35
 .xcf 01;35
 .xwd 01;35
 
# audio formats
 .ogg 01;35
 .mp3 01;35
 .wav 01;35

/etc/DIR_COLORS

Sia su Suse che su Red Hat, e quindi su Oracle Enterprise linux vi è questo file. Le due (tre) distribuzioni in modi diversi inizializzazione la sessione al login basandosi su questo file, permettendo una ridefinizione personalizzata della colorazione definendo un file .dir_color con lo stesso formato di dircolors nella home. La verità è che in Red Hat/Oracle Enterprise Linux vi è anche il file /etc/DIR_COLORS.xterm e le procedure di inizializzazione del login di Red Hat valutano anche la variabile d’ambiente TERM che collegandosi con putty ha valore “xterm”. In base a questo Red Hat/Oracle Enterprise Linux usano il file /etc/DIR_COLORS.xterm che differisce almeno in un punto dal file /etc/DIR_COLORS:

DIR 01;37
In /etc/DIR_COLORS.xterm è:

DIR 00;37
Lo 01 indica di usare il “bold” che a quanto pare fa diventare il blu più chiaro.

La conclusione di tutto ciò è che è sufficente copiare nella propria home il file /etc/DIR_COLORS e rinominarlo in .dir_colors per rendere l’output di ls leggibile sul proprio terminale a sfondo nero.

1 commento »

RSS feed for comments on this post. TrackBack URI

  1. […] tempo fa ho scritto un post sulla colorazione dell’output di ls su linux,  oggi, dopo l’ennesima volta ho aperto un file per editarlo sotto linux con VI ho deciso di […]


Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

Crea un sito o un blog gratuitamente presso WordPress.com.
Entries e commenti feeds.

%d blogger cliccano Mi Piace per questo: