Definindo a variável de ambiente TOPCOLORS

5

Eu não consigo encontrar nenhum exemplo na Internet para esta variável de ambiente, que top aparentemente irá ler e usar para exibir cores.

Como eu configuraria essa variável corretamente, então top usava cores alternativas em sua saída?

Eu tenho o Solaris top versão 3.5beta9.

    
por Captain Lepton 09.12.2013 / 15:22

3 respostas

7

A variável TOPCOLORS neste top (também conhecido como unixtop ) não está disponível na versão que você está usando. Ele apareceu pela primeira vez na versão 3.6 deste utilitário, conforme declarado na seção COLOR do arquivo README . Por alguma razão, parece que o BSD comum não inclui uma versão atualizada do top (o FreeBSD 9.1 possui 3.5beta12).

Se você puder instalar ou compilar uma versão atualizada, a página man deverá fornecer mais informações sobre como definir cores. Na versão 3.8beta1 é isso que é impresso:

TOPCOLORS

Especifica as cores a serem usadas e as condições para as quais elas devem ser usadas. No momento, apenas números na área de exibição de resumo podem ser colori. Em uma versão futura, será possível destacar números na área de exibição do processo também. A variável de ambiente é a única maneira de especificar cores: não há opção de linha de comando equivalente. Observe que a variável de ambiente TOPCOLOURS também é compreendida. o Ortografia britânica tem precedência. O uso da cor só funciona em terminais que entendem e processam sequências de escape de cor ANSI.

A variável de ambiente é uma sequência de especificações de cores, separada por dois pontos Cada especificação assume o formato tag=min,max#code em que

  • tag é o nome do valor a verificar,
  • min e max especificam um intervalo para o valor e
  • code é um código de cor ANSI.

Vários códigos de cores podem ser listados e separados por ponto e vírgula. Um min ausente implica o menor valor possível (geralmente 0) e um max ausente implica infinito. A vírgula deve estar sempre presente.

Ao especificar números para médias de carga, eles devem ser multiplicados por 100. Por exemplo, a especificação:

  • 1min=500,1000#31 indica que uma média de carga de 1 minuto entre 5 e 10 deve ser exibida em vermelho.

Os atributos de cor podem ser combinados. Por exemplo, a especificação:

  • 5min=1000,#37;41 indica que uma média de carga de 5 minutos acima de 10 deve ser exibida com caracteres brancos em um fundo vermelho.

Uma tag especial chamada header é usado para controlar a cor do cabeçalho da exibição do processo. Deveria ser especificado sem limites inferior e superior, especificamente header=,# seguido pelo código de cores ANSI.

Você pode ver uma lista de códigos de cores reconhecidos por esta instalação do topo com a opção -T . Isso também mostrará o conjunto atual de testes usados para cor highligting, conforme especificado no ambiente.

(extrato de final de página man)

Códigos de cores

O arquivo color.h do código-fonte lista as tags e os códigos que o utilitário entende. As tags são:

/*
 * These color tag names are currently in use
 * (or reserved for future use):
 *
 * cpu, size, res, time, 1min, 5min, 15min, host
 */

E a cor são as ANSI:

/*
 * Valid ANSI values for colors are:
 *
 * 0    Reset all attributes
 * 1    Bright
 * 2    Dim
 * 4    Underscore  
 * 5    Blink
 * 7    Reverse
 * 8    Hidden
 * 
 *  Foreground Colours
 * 30   Black
 * 31   Red
 * 32   Green
 * 33   Yellow
 * 34   Blue
 * 35   Magenta
 * 36   Cyan
 * 37   White
 * 
 *  Background Colours
 * 40   Black
 * 41   Red
 * 42   Green
 * 43   Yellow
 * 44   Blue
 * 45   Magenta
 * 46   Cyan
 * 47   White
 */

Exemplo

Usando a seguinte configuração, você pode ter um vislumbre das possibilidades (aqui para o topo 3.8beta1 compilado no FreeBSD):

export TOPCOLORS="header=,#1\
:1min=,399#32:1min=400,799#33:1min=800,#31\
:5min=,299#32:5min=300,599#33:5min=600,#31\
:15min=,199#32:15min=200,399#33:15min=400,#31\
:cpu.user=,9#32:cpu.user=10,49#33:cpu.user=50,#31\
:cpu.system=,9#32:cpu.system=10,49#33:cpu.system=50,#31\
:cpu.interrupt=,9#32:cpu.interrupt=10,49#33:cpu.interrupt=50,#31"

Uma chamada para top -T mostrará diretamente se a top entende a configuração de cores que você declarou. Ele também listará todas as tags entendidas (que, no meu caso, são um pouco diferentes do conteúdo do arquivo color.h ).

Alternativas

Em diferentes sistemas UNIX, alternativas são usadas. No Linux, você geralmente encontra o utilitário top vindo do pacote procps . Você também pode instalar o htop , que é uma boa alternativa colorida que também está disponível em OSX e FreeBSD (onde se baseia na camada Linux), mas AFAIK não no Solaris.

    
por 09.12.2013 / 20:40
2

Não é exatamente o que você está procurando, mas I achei isso .toprc que funciona com a versão 3.3.9 e posterior, que define cores personalizadas em algum lugar:

Blockquote

RCfile for "top with windows"           
Id:a, Mode_altscr=0, Mode_irixps=1, Delay_time=3.000, Curwin=0
Def     fieldscur=AEHIOQTWKNMbcdfgjplrsuvyzX
        winflags=63800, sortindx=10, maxtasks=0
        summclr=2, msgsclr=1, headclr=3, taskclr=1
Job     fieldscur=ABcefgjlrstuvyzMKNHIWOPQDX
        winflags=62777, sortindx=0, maxtasks=0
        summclr=6, msgsclr=6, headclr=7, taskclr=6
Mem     fieldscur=ANOPQRSTUVbcdefgjlmyzWHIKX
        winflags=62777, sortindx=13, maxtasks=0
        summclr=5, msgsclr=5, headclr=4, taskclr=5
Usr     fieldscur=ABDECGfhijlopqrstuvyzMKNWX
        winflags=62777, sortindx=4, maxtasks=0
        summclr=3, msgsclr=3, headclr=2, taskclr=3
    
por 12.07.2016 / 18:46
1

Exemplo impressionante acima. Eu tentei algo muito mais simples (embora um pouco mais atraente) no FreeBSD 10.1. Eu precisava instalar o top 3.8 da fonte. Os seguintes trabalhos fomr csh / tcsh

    setenv TOPCOLORS "header=,#35;1:1min=,#31;1:5min=,#31;1:15min=,#31;1:cpu.user=,#32:cpu.system=,#32:cpu.nice=,#32:cpu.interrupt=,#32:cpu.idle=,#32:memory.wired=,#36:memory.active=,#36:memory.inact=,#36:memory.cache=,#36:memory.buf=,#36:memory.free=,#36:kernel.ctxsw=,#33:kernel.trap=,#33:kernel.intr=,#33:kernel.soft=,#33:kernel.fork=,#33:kernel.flt=,#33:kernel.pgin=,#33:kernel.pgout=,#33:kernel.fr=,#33:swap.total=,#34;1:swap.used=,#34;1:swap.free=,#34;1:swap.inuse=,#34;1:swap.in=,#34;1:swap.out=,#34;1"
    
por 17.02.2015 / 06:33