Blog do Eduardo Costa Meu blog pessoal

5Jun/090

Usando o "less" para navegar em logs

Se você precisa monitorar alguma aplicação linux que gere logs rotativos, o jeito mais prático e flexível é usando o less. Basta chamar "less <nomearq>" e pronto. Por ser uma ferramenta de visualização (e não de edição), a navegação dele é mais prática que a do VIM em alguns aspectos - o principal é que quase tudo é feito com uma tecla só. Por exemplo, algumas teclas de atalho:

  • "g" - vai para o início do arquivo;
  • "G" - vai para o fim do arquivo. Detalhe: esse comando também atualiza o arquivo, de forma que, se o log for do tipo de aumenta fácil, pode-se ir pressionando "G" para ver as novas linhas geradas;
  • "f" - monitora o fim do arquivo. Em termos simples, o "less" vira um "tail -f" (é como se pressionasse "G" toda hora). Para voltar ao modo navegável, basta pressionar "ctrl-c";
  • "v" - invoca o editor configurado na variável $EDITOR (normalmente o nano ou o VIM);
  • "/<texto>" - procura "<texto>" a partir do início do arquivo;
  • "?<texto>" - procura "<texto>" a partir do fim do arquivo;
  • "n" - repete a última pesquisa. Se a pesquisa foi com o "/", vai para a próxima ocorrência. Se foi com "?" vai para a ocorrência anterior;
  • "N" - repete a última pesquisa, no sentido contrário. Se usou o "/", vai para a ocorrência anterior;
  • "<numero>" - vai para a linha número "<numero>";
  • "r" - recarrega a tela (útil quando algum processo em background polui o terminal);
  • "R" - recarrega o arquivo (perfeito quando o log rotaciona);
  • "q" - sai.
18Mar/092

Polícia francesa adota o Linux

Recebi, hoje, um post da Geek, falando  que a polícia francesa adotou o Linux. Eu acredito que SO é que nem martelo (de borracha, de aço, leves, pesados, etc): cada um tem sua utilidade. Não sou radical a favor do uso de Linux, embora goste muito do pengüim, mas sei que para o office básico ele já está bom o suficiente.

Pagar uma fortuna com o XP/Vista, mais outra fortuna com o Office, e outras com antivírus e eteceteras só para acessar a Internet, ler e-mails e escrever documentos, é um absurdo (e um enorme desperdício).

O que mais gostei no artigo da Geek foi a explicação da migração: "Passar do XP para o Ubuntu, entretanto, mostrou-se muito fácil. As duas maiores diferenças foram os ícones e os jogos. Jogos não são nossa prioridade".

Só em países retrógrados esse tipo de coisa não acontece. Pra que perder tempo procurando onde fica a formatação de página do OpenOffice se é mais fácil atirar pedras nas gaivotas e continuar lustrando as janelas?

31Jul/080

Depurar execução de programas Linux sem o GDB

Alguma vez já precisou configurar um programa usando bibliotecas externas? Por exemplo, o IBM Websphere Broker precisa que configuremos um arquivo ".odbcini" (definido em uma variável $ODBCINI) que apontam para os SOs dos provedores ODBC (tipo o UKora823.so).

Após um upgrade feito pela consultoria, o broker parou de iniciar. Sem log nem nada, não tinha como avaliar o que ocorria. Então, usando meus conhecimentos arcanos sobre Linux, usei o seguinte comando:

( LD_DEBUG=libs mqsistart BROKER ) 2>&1 | less

Na hora, consegui um log de como o Linux carrega as bibliotecas, e, de brinde, achei o seguinte no log gerado:

calling init: /opt/ibm/mqsi/6.1/merant/lib/UKor823.so
/opt/ibm/mqsi/6.1/merant/lib/UKor823.so: error: symbol lookup error:
undefined symbol: SQLGetConnectAttr (fatal)

Junto com muitas outras linhas similares. Bastou usar o GREP para descobrir que o arquivo libsqora.so.10.1 não estava no LD_LIBRARY_PATH. Adicionando-o, funcionou.

Agora, uma explicação sobre o comando mágico. Ele pode ser dividido assim:

1: (
2:   LD_DEBUG=libs mqsistart BROKER
3: )
4: 2>&1
5: | less

A linha 2 é a principal. Tem o comando que quero executar ("mqsistart BROKER") e um extra ("LD_DEBUG=libs") que informa ao LD do linux para emitir ao STDERR o que ele está fazendo com relação às libs. Usando "LD_DEBUG=help", você recebe uma lista de opções que podem ser usadas. Para quem não sabe, é possível passar variáveis de ambiente extra, no Linux, usando essa sintaxe. Outro exemplo:

ORACLE_HOME=/xpto sqlplus

Assim, você pode executar o "sqlplus" com outra instalação do Oracle.

Voltando ao comando arcano, se você executar apenas a linha 2, vai receber quilômetros de log. Claro que você vai querer paginar, então, logo pensa na linha 5, para redirecionar a saída ao comando de paginação "less". Entretanto, o LD_DEBUG emite no STDERR da aplicação, logo, precisa usar a linha 4 para redirecionar o STDERR para o STDOUT (que será enviado, via pipe, ao less).

Só que, sem as linhas 1 e 3, você estará redirecionando a saída do mqsistart, e não do LD_DEBUG. Os parênteses agrupam um ou mais comandos em um "comando" só, permitindo que o STDERR do LD_DEBUG vá para o less.