
Eu entendo ls
os usos dircolors
para exibir saída colorida. dircolors
possui banco de dados padrão de cores associadas às extensões de arquivos, que podem ser impressas com o comando
dircolors --print-database
Pelo man dir_colors
que li, o banco de dados de todo o sistema deve estar localizado em /etc/DIR_COLORS
. Mas este arquivo não existe no meu sistema (Debian). Como posso modificar as configurações de cores de todo o sistema dircolors
? De onde o comando dircolors --print-database
tira as configurações, quando não existe nenhum arquivo.
Estou ciente de que o usuário pode ter um arquivo específico ~/.dircolors
com suas configurações, mas isso não é adequado para mim, pois preciso alterar as configurações para todos.
Uma segunda questão é se é possível usar cores de 8 bits para dircolors. Meu terminal é xterm-256color
.
Responder1
ls
pega as configurações de cores da variável de ambiente LS_COLORS
. dircolors
é apenas uma maneira conveniente de gerar essa variável de ambiente. Para que esta variável de ambiente tenha efeito em todo o sistema, coloque-a no arquivo de inicialização do seu shell.
Para bash
, você colocaria isso em /etc/profile
:
# `dircolors` prints out `LS_COLORS='...'; export LS_COLORS`, so eval'ing
# $(dircolors) effectively sets the LS_COLORS environment variable.
eval "$(dircolors /etc/DIR_COLORS)"
Para zsh
, você o colocaria /etc/zshrc
ou providenciaria para zsh
leitura /etc/profile
na inicialização. Sua distribuição zsh
já pode ter feito isso. Apenas mencionei isso para salientar que a configuração dircolors
para todos depende do shell que eles usam.
Quanto à origem dircolors
de suas configurações, quando você não especifica um arquivo, ele apenas usa alguns padrões internos.
Você pode usar xterm
os códigos de escape de 256 cores em seu arquivo dircolors, mas esteja ciente de que eles funcionarão apenas para xterm
terminais compatíveis. Eles não funcionarão no console de texto do Linux, por exemplo.
O formato para códigos de escape de 256 cores é 38;5;colorN
para cores de primeiro plano e 48;5;colorN
cores de fundo. Então, por exemplo:
.mp3 38;5;160 # Set fg color to color 160
.flac 48;5;240 # Set bg color to color 240
.ogg 38;5;160;48;5;240 # Set fg color 160 *and* bg color 240.
.wav 01;04;05;38;5;160;48;5;240 # Pure madness: make bold (01), underlined (04), blink (05), fg color 160, and bg color 240!
Responder2
RESPOSTA CURTA
dircolors
(abreviação de Directory Colors) não pode ser usado para modificar cores globalmente. Para fazer isso, você provavelmente deseja ajustar a paleta de cores em seu emulador de terminal.
Por exemplo, dircolors
não é usado para ajustar as cores solicitadas por grep
, vi
, tmux
, ou man
.
dircolors
é usado para ajustar as cores que os comandos ls
etree
solicitarpara ser exibidoao exibir seus nomes de arquivos.
eu me estressosolicitar para ser exibido, porque as cores solicitadas por um comando são apenas as enviadas ao seu emulador de terminal. Seu emulador de terminal pode então optar por exibir cores diferentes das solicitadas. O que é solicitado e o que finalmente é exibido na tela do terminal que você verá podem ser dois conjuntos diferentes de cores.
VISÃO GERAL DO PROCESSO DE COLORAÇÃO
1) Qualquer programa baseado em texto ou shell integrado, pode, por design, gerar ANSI (American National Standards Institute)solicitação de corcódigos de escape. Ressalto aqui que se trata apenas de solicitações ao terminal, que tem a decisão final de como exibi-las. O sistema de código de cores ANSI é um sistema muito antigo, originado inicialmente em terminais de hardware independentes.
Uma solicitação de texto colorido se parece com:
<requested-color><text-to-be-displayed-in-that-color><next-requested-color><next-text...
A parte 'cor solicitada' não é exibida. Em vez disso, é usado pelo emulador de terminal para fazer com que a tela mostre 'texto a ser exibido naquela cor' na cor solicitada.
Os programas podem chamar [ncurses][1]
a saída de códigos ANSI para o emulador de terminal. Você tem basicamente 8 cores padrão e mais 8 cores fortes/brilhantes que podem ser solicitadas. (ncurses é a abreviação de New Curses, onde 'curses' é um trocadilho com Otimização de Cursor ou uma biblioteca de software para saída eficiente baseada em texto para uma tela de terminal.)
Muitos comandos comuns baseados em texto podem ser configurados para gerar códigos de cores ANSI parasolicitarque sua saída seja colorida pelo terminal. Exemplos são: ls
, tree
, vim
, grep
, tmux
, e man
.
Esses códigos de cores de saída (códigos de controle prefixados de escape) solicitam que a exibição mude para uma determinada combinação de cores (primeiro plano, plano de fundo e atributos) antes da saída do próximo texto. Novamente, esses códigos de escape não determinam realmente as cores que você vê. Em vez disso, eles especificam opções de paleta específicas.
No passado havia uma paleta de cores padrão. Se você solicitasse verde, veria verde.
Mas um emulador de terminal, como GNOME Terminal
por exemplo, pode mudar esse comportamento. Por exemplo, se um programa solicitarverde, por meio de um código de escape verde ANSI, você pode decidir que isso deve ser exibido emvermelho cerejana sua tela. O que é importante lembrar é que isso significa que:todosos verdes solicitados, em todos os programas do terminal, serão convertidos para vermelhos. Em outras palavras, você não pode simplesmente ajustar as cores de saída de um programa específico, grep
desta forma.
2A) Comandos de diretório como ls
e tree
são um tanto especiais, pois eles podem ser configurados pelo usuário para colorir nomes de arquivos por tipo de nome de arquivo de acordo com sua especificação. Isto é diferente de man
, por exemplo, que utiliza um conjunto fixo de cores alternativas além do preto e branco.
Por exemplo, pode ser solicitado que as pastas sejam mostradas em azul marinho, enquanto os links devem ser mostrados em azul claro.
Você pode solicitar cores para formatos de terminal especificados (como ansi ou putty) e por tipo básico de arquivo (como pasta, bloco ou adesivo) e/ou pela extensão de nome de arquivo correspondente (como *.sh ou *.png). Isso é feito alterando os códigos de cores de saída ANSI por tipo de nome de arquivo usando as configurações fornecidas pela variável de ambiente LS_COLORS. Veja abaixo como.
2B)Existem também esquemas de cores especiais emvim
usando por exemplo :colorscheme default
. (Um assunto para outro dia.)
3)Seu terminal (Terminal GNOME no meu caso) então interpreta quaisquer códigos ANSI para gerar as cores de exibição reais que você vê.
AJUSTE GLOBAL DE CORES NO SEU EMULADOR DE TERMINAL
Se você ajustar as configurações de cores GNOME Terminal
(ou provavelmente em qualquer emulador de terminal que suporte esse recurso), isso afetará as cores observáveis de todo e qualquer programa de texto que produza códigos de cores ANSI. Essas alterações de cores serão ajustadas simultaneamente em todas as janelas de terminal abertas (assumindo que você esteja usando o mesmo emulador de terminal para todas as janelas).
Se você estivesse usando 2 emuladores de terminal diferentes (como ambos GNOME Terminal
e XTerm
), cada um poderia ajustar as cores da saída final de maneira diferente.
Com as Preferências do Terminal GNOME você pode ajustar a 'paleta de cores' de todo o sistema (ou seja, o conjunto de 16 cores disponíveis para aplicativos baseados em texto), para seu próprio conjunto personalizado de cores.
GNOME Terminal
Ajuda diz:
Tradicionalmente, os emuladores de terminal ofereciam uma paleta de 16 cores, é isso que você pode alterar aqui. O Terminal suporta um conjunto estendido de 256 cores, mas as 240 cores adicionais não podem ser editadas aqui. O Terminal ainda oferece acesso direto a mais de 16 milhões de cores, chamado de modo “true color”.
Se as alterações feitas na paleta não parecem surtir efeito, provavelmente o conteúdo que você vê consiste nessas cores estendidas da paleta ou cores verdadeiras, em vez das 16 cores básicas.
USANDO DIRCOLORES
Veja como isso funciona:
a) Run $ dircolors -p >/etc/DIR_COLORS # to produce DIR_COLORS template file
b) Hand edit /etc/DIR_COLORS to adjust ANSI color codes that will be output
for various things to display. For example, any filenames like *.png can
request a particular ANSI color combination. (ANSI color codes are escape
prefixes.)
c) Run dircolors again, this time in both
/etc/profile (for logins) and
/etc/bash.bashrc (for terminal windows)
to read DIR_COLORS and create and export the LS_COLORS
environment variable, like this:
$ eval "$(dircolors -b /etc/DIR_COLORS)"
Eu ligo dircolors
no início /etc/profile
onde eu uso para configurar e exportar arquivos LC_COLORS
.
# === Create DEFAULT LS_COLORS ENVIRONMENT VARIABLE ===========================
# /etc/DIR_COLORS is a data file from: $ dircolors -p > /etc/DIR_COLORS
eval "$(dircolors -b /etc/DIR_COLORS)" # This reads /etc/DIR_COLORS
# and then runs these two commands:
#
# $ LS_COLORS=... # <-- where this value is created from /etc/DIR_COLORS
# $ export LS_COLORS
Para referência, como estou habilitando cores em vários comandos em /etc/profile (que é lido sempre que um login é feito (incluindo $ bash --login
)) está abaixo, no final desta resposta.
Observe que existem algumas pastas e arquivos de vídeo reversos que são exibidos de forma engraçada ls
(por exemplo, arquivos de backup do DOS). Nenhuma bagunça no Terminal GNOME (abaixo) parece afetar essas cores. Mas você pode editar DIR_COLORS usado por dircolors
(veja as notas acima) para ajustar as coisas com LS_COLORS.
DICAS DE COMO AJUSTAR AS CORES DO SEU PRÓPRIO SISTEMA
No menu do Terminal GNOME, selecione Edit
| Preferences
. No painel esquerdo, escolha o perfil que deseja ajustar e, no painel direito, selecione a Colors
guia.
!! ANTES DE PROSSEGUIR, SUGIRO FORTEMENTE QUE VOCÊ FAÇA UM BACKUP DE SUAS PREFERÊNCIAS EXISTENTES. Uma captura de tela servirá perfeitamente. Veja a captura de tela minha abaixo.
DR- Se você não quiser marcar esta caixa de seleção:
para usar os padrões mais básicos, mas em vez disso você deseja um fundo preto de trabalho com aplicativos coloridos bash
, vim
, grep
, ls
, ... e tente definir suas cores assim:
Achei essa caixa de diálogo de cores um pouco confusa no início, mas é lógico quando você descobre. O maior problema é que todos os meus aplicativos de texto compartilham a mesma paleta de cores, mas a usam de maneira um pouco diferente, especialmente ls
.
Aqui estão as cores exatas que estou usando:
black aqua green orange light yellow purple blue, primary gray (X) <-- X=Don't care
#000000 #01B9E0 #389400 #FF8A00 #F4FF92 #C401C4 #005EEA #AAAAAA
0 1 2 3 4 5 6 7
------------ ------------ ------------ ------------ ------------ ------------ ------------ ------------ <-- 1st set are "normal colors"
------------ ------------ ------------ ------------ ------------ ------------ ------------ ------------ <-- 2nd set are the "brighter colors" (for check box below)
8 9 10 11 12 13 14 15
#555555 #FF5555 #55FF55 #FFFF55 #5397FE #FF55FF #55FFFF #D6D6D6
dark gray (X) red/orange lime yellow (X) blue, medium pink aqua, bright light gray (X) <-- X=Don't care
ENTENDENDO O DIÁLOGO 'PREFERÊNCIAS - PERFIL' DO TERMINAL GNOME
As seções superior e inferior ( Text and Background Color
e Palette
) parecem operar de forma quase completamente independente, exceto que as Palette
seleções são uma camada sobre (ou seja, modificam ainda mais) as configurações superiores em Text and Background Color
. (Mesmo que Use colors from system theme
esteja marcado, Show bold text in bright colors
na parte inferior ainda importa, pelo menos para ls
.)
Primeiro vamos mexer nas Text and Background Color
configurações.
Eles determinam as cores padrão para cores básicas, não especiais Text
e Background
cores. Você também pode escolher modificadores opcionais para Bold
ou Highlight
texto e para uma cor fixa do cursor, se desejar, como laranja brilhante, por exemplo, pode deixar algumas pessoas felizes.
A Use colors from system theme
caixa de seleção parece decidir se você deseja herdar as configurações de cores ou defini-las você mesmo. Ao desmarcá-la, você pode escolher um esquema integrado ou personalizado no menu suspenso.
O que você escolhe é colocado nas Text
amostras Background
abaixo, exceto Custom
.
Observe que suas escolhas aqui não afetam as outras três caixas de seleção abaixo dela.
Observe também que se você clicar primeiro na amostra Text
ou Background
, você obterá um seletor de cores e, depois de escolher Select
, o Built-in schemes
menu suspenso será definido como Personalizado.
Se você marcar Bold color
e definir uma cor, o texto especificado como negrito por um programa obterá essa substituição de cor.
Se você marcar Cursor color
, poderá escolher cores fixas para o cursor. (Observe que você terá que mover o cursor sobre o texto para vê-lo mudar.) Sem esta opção marcada, o cursor parece variar com a cor do texto.
Se você marcar Highlight color
, verá o efeito dessas duas amostras, por exemplo, no vim, ao arrastar o mouse para copiar algum texto.
Agora é hora de mexer nas Palette
configurações.
Semelhante ao anterior, o menu suspenso coloca um conjunto de cores nas amostras abaixo dele. Você notará que há duas linhas de 8. Essas amostras substituem as 8 cores de primeiro plano ANSI e as 8 cores de fundo definidas por terminfo.
O que é importante ver é que você pode definir essas amostras para variações sutis de cores.
Além disso, as alterações feitas aqui afetam todos ou quase todos os programas baseados em texto que possuem cores ativadas. Portanto, tenha cuidado aqui. (Não posso dizer como fazer backup primeiro, porque ainda não sei. Faça, no mínimo, uma captura de tela.)
Embora eu não saiba para que servem todas essas amostras, alguns experimentos deduziram o seguinte.
Antes de começar a testar, abra algumas coisas de GNOME Terminal
: uma vim
sessão de edição de código de bash
e outra c
de ls
seu diretório inicial, uma tree
execução e uma tmux
sessão. À medida que você altera as coisas abaixo, você poderá ver melhor o que está mudando.
Tente fazer pequenas alterações no início. E certifique-se de clicar e desmarcar a caixa de seleção na parte inferior (explicada com mais detalhes abaixo).
Cuidado:Se você definir Palette
como Custom
e configurar manualmente as 16 amostras de cores como sugiro, tenha cuidado porque se você escolher outra coisa novamente no arquivo Built-in schemes:
, isso apagará suas Palette
configurações anteriores e, se você quiser novamente, Custom
terá que começar tudo de novo. o que é uma dor. (Parece não haver maneira de salvar suas configurações de cores personalizadas, exceto com uma captura de tela ou anotando-as uma por uma.)
Built-in schemes:
Custom
-- Color palette:
configurações
tmux status text status-backgr
tmux vi literals flow (orange) comments&fcns $names var names ?
vi C - literals types flow (brown) comments&fcns macros - ?
vi Bash - literals - flow (brown) comments&fcns Environ var names ? flow: brown (can't change with gnome)
Bash - user@dir $
Bash ls - Reverse-backg Reverse-foregr
gcc
black aqua green orange dark yellow purple blue, primary gray (X) <-- X=Don't care
#000000 #01B9E0 #389400 #FF8A00 #C6CF76 #C401C4 #005EEA #AAAAAA
0 1 2 3 4 5 6 7
------------ ------------ ------------ ------------ ------------ ------------ ------------ ------------ <-- 1st set are "normal colors"
------------ ------------ ------------ ------------ ------------ ------------ ------------ ------------ <-- 2nd set are the "brighter colors" (for check box below)
8 9 10 11 12 13 14 15
#555555 #FF5555 #55FF55 #FFFF55 #5397FE #FF55FF #55FFFF #D6D6D6
dark gray (X) red/orange lime yellow (X) blue, medium pink aqua, bright light gray (X) <-- X=Don't care
tmux ? ? ?
tmux vi ? ? ?
vi C ? ? ?
vi Bash ? ? ?
Bash ? root@dir # ? ?
Bash ls ? x.sh ? directories media files links ?
gcc ? errors ? ?
Por fim, na parte inferior, está a Show bold text in bright colors
caixa de seleção. A ajuda do GNOME diz:
Cores brilhantes para texto em negrito
Tradicionalmente, os terminais não separavam claramente o peso da fonte em negrito das cores intensas, muitas vezes ambos eram habilitados juntos. Melhorias recentes, como a introdução do suporte a cores verdadeiras e certos esquemas de cores (por exemplo, Solarizado) tornaram desejável separar os dois conceitos, ou seja, tornar o brilho independente da espessura da fonte.
...
Disable Show bold text in bright colors for the new default behavior, the complete separation of color intensity and font weight;
ou habilite esta opção para melhorar a compatibilidade com versões anteriores.
Quando marcada, ela pega o que foi exibido nas linhas superiores e exibe as cores da linha inferior. Se você verificar isso, notará que alguns dos nomes ls
mudarão um pouco de cor. Acho que está vinculado às sequências de cores nº 1 da ISO 6429, "para cores mais brilhantes" em $ man dir_colors
. Parece que isso afeta principalmente ls
e não vim
.
COMO SÃO AS CORES NOS ESQUEMAS INTEGRADOS
Quando built-in schemes
foram testados com o utilitário de teste de cores descrito aquiVejo os seguintes resultados (dica compilar e vincular com isto $ gcc -Wall -lcurses color-demo.C
):
Note oShow bold text in bright colors
caixa de seleção está marcada. Desmarque as cores de alta e baixa intensidade são iguais.
Linux console
(parece ser o conjunto de cores CGI original):
xterm
:
rxvt
(fora de ordem porque está mais próximo dos acima):
Tango
(fora de serviço porque está mais próximo do Solarizado abaixo):
Solarized
:
COMO POSSO CONFIGURAR MEUS COMANDOS PARA MOSTRAR EM CORES?
No seu /etc/.bashrc.shared
(chamado por ~/.bashrc
and /root/.bashrc
), ou se você não tiver isso no seu ~/.bashrc
and /root/.bashrc
:
# === ADD COLOR UNLESS DUMB TERMINAL ========================================
if [ "$TERM" != "dumb" ]; then
# ENVIRONMENT:
# You can turn off these colorizing aliases in the interactive environment by invoking
# shell with TERM="dumb bash".
# Assume LS_COLORS is already set by dircolors in /etc/profile. It can be adjusted later.
# Using color to distinguish file types is disabled both by default and with --color=never.
# With --color=auto, ls emits color codes only when standard output is connected to a terminal.
export COLOR_MODE='--color=auto'
# The use of alias limits color effects to the interactive command usage.
# It has advantage over exporting environment variable "export COLOR_MODE='--color=auto'"
# since color can be seen under pager programs such as less(1). If you wish to suppress
# color when piping to other programs, use "--color=auto" instead in the above example
# for "~/.bashrc".
# !! NOTE - alias is very picky about extra spaces around = sign
# --- grep
# Surround the matched (non-empty) strings, matching lines, context lines, file names,
# line numbers, byte offsets, and separators (for fields and groups of context lines)
# with escape sequences to display them in color on the terminal.
# The colors are defined by the environment variable GREP_COLORS, (plural).
# See grep man page for GREP_COLORS instructions.
alias grep=' grep ${COLOR_MODE}'
alias egrep='egrep ${COLOR_MODE}'
alias fgrep='fgrep ${COLOR_MODE}'
alias zgrep='zgrep ${COLOR_MODE}'
# --- ls ------------------------
alias ls='ls ${COLOR_MODE}'
# These next two use the ls alias above, i.e. the first one below is really 'ls ${LS_OPTS} -l'
alias ll='ls -l' # -l = long
alias l='ls -lA' # -A = amost all (.*, but not . nor ..)
# --- tree ----------------------
alias tree='tree -C' # -C adds color to tree
# --- less ----------------------
alias less='less -R' # Output raw control chars for ANSI colors
# --- man -----------------------
# ref: http://www.tuxarena.com/2012/04/tutorial-colored-man-pages-how-it-works/
# NOTE these seem to use TERMCAP which is obsolite.
# ANSI "color" escape sequences are sequences of the form: ESC [ ... m
export LESS_TERMCAP_mb=$(printf '\e[01;31m') # enter blinking mode
export LESS_TERMCAP_md=$(printf '\e[01;38;5;75m') # enter double-bright mode
export LESS_TERMCAP_me=$(printf '\e[0m') # turn off all appearance modes (mb, md, so, us)
export LESS_TERMCAP_so=$(printf '\e[01;33m') # enter standout mode
export LESS_TERMCAP_se=$(printf '\e[0m') # leave standout mode
export LESS_TERMCAP_us=$(printf '\e[04;38;5;200m') # enter underline mode
export LESS_TERMCAP_ue=$(printf '\e[0m') # leave underline mode
fi
Responder3
De onde o comando
dircolors --print-database
tira as configurações, quando não existe nenhum arquivo.
Conformemanual, ele usa um banco de dados pré-compilado na ausência de um arquivo.
Se file for especificado, dircolors o lê para determinar quais cores usar para quais tipos e extensões de arquivo. Caso contrário, um banco de dados pré-compilado será usado. Para obter detalhes sobre o formato desses arquivos, execute '
dircolors --print-database
'.
Para alterar as configurações para todos, você pode criar um /etc/dircolors
arquivo e adicionar o seguinte /etc/bashrc
:
d=/etc/dircolors
test -r $d && eval "$(dircolors $d)"
Responder4
Linux define cores de fundo do console com dircolors:
Seu arquivo dircolors controla as cores das palavras que aparecem por meio de ls no console. Encontre este .dircolors
arquivo para sua distribuição, um link para ajudar:
http://www.linuxfromscratch.org/blfs/view/svn/postlfs/profile.html
Para mim no Fedora 17, meu arquivo dircolors é:/etc/DIR_COLORS
Copie /etc/DIR_COLORS
para o seu /home/el/.dircolors
diretório. Crie-o se não existir.
Edite /home/el/.dircolors, procure o texto "dir".
Mude isso:
DIR 01;34 # directory
Para isso:
DIR 01;36 # directory
Salve, feche e reinicie o shell. Os diretórios vão do azul escuro no preto (ilegível) ao verde-azulado brilhante no preto (legível).