Redirecionando as massas

Ainda que você seja um iniciante no Linux, provavelmente você já usouo alguma forma de redirecionamento pela linha de comando. Redirecionamentos usam > e < para passar dados entre comandos que você está executando. É mais usando para redirecionar uma saída de um comando para um arquivo. Por exemplo, se você digita dmesg >local.log o conteúdo do buffer do kernel(a saída do comando dmesg) será redirecionado para o arquivo local.log ao invés de aparecer na tela. Se você usar dois > a saída do comando dmesg será concatenada no final do arquivo ao invés de sobrescrevê-lo. Usa-se o < como argumento de entrada ao invés de destinação - mais comumente usando com grep. Ao digitar grep -i USB < local.log buscará por 'USB' no arquivo local.log por exemplo.

Redirecionamentos funcionam porque muitas aplicações Linux, grandes ou pequenas, têm três 'descrições de arquivo' possíveis para trabalhar com entrada e saída. São as entradas padrão, a saída padrão e o erro padrão. Normalmente você não percebe, pois os dispositivos usados para entrada e saída padrão são o teclado e o tela. Nos exemplos anteriores, estamos endereçando o descritor de saída e entrada usando < e >. Mas como você endereça o descritor de arquivo do erro padrão? Isto é feito com o número '2' antes de > - o 2 vem da prioridade dada para cada descritor de arquivo. Naturalmente, 0 é a entrada padrão, 1 é a saída padrão e 2 é a saída padrão de erro. É muito útil porque permite que você filtre condições de erro geradas por um comando, enquanto a saída continua sendo enviada para um arquivo de log.

Um exemplo útil. Os erros de permissão que resultam do comando find quando este não tem privilégios de acesso são enviadaos para o buraco negro do disposivito null enquanto os resultados de sucesso são enviados para a tela:

find / -name *.jpg 2>/dev/null

Mais em Truques de linha de comando.

O grande escape SSH

Um aspecto do SSH que facilitam muito as coisas quando você abre uma conexão, inicia uma série de jobs e percebe que precisa de encaminhar uma porta através da sesão atual. A resposta é usar uma seqncia de escape enquanto conecta ao SSH para trocar certas configurações sem necessidade de reconexão.

Uma seqüência de escape é justamente uma série de caracteres que instrui a utilidade do que você está usando (neste caso o SSH) para escapar do que está fazendo e executar uma tarefa de utilidade específica. O que é preciso é de uma seqüência de escape enquanto usa o shell. A seqüência de escape mais útil para SSH é executada quando você digita o til (~), seguido do C maiúsculo. Você não verá nada na sessão até que você complete a seqüência de escape até que o ponteiro do terminal será modificado para 'ssh>'. Isto significado que você foi enviado para a linha de comando SSH. Daqui você pode se conectar a uma porta na máqina remota por uma porta da máquina local e criar um túnel entre os dois através da conexão segura SSH.

Você pode usar esta técnica para criar um túnel para os dados de um servidor proxy Squid através do SSH para uma porta local na sua máquina remota usando o argumento -L, então digitando -L8089:localhost:3128 criariao túnel Squid da porta 8090 sem precisar reiniciar a sessão SSH. Você também pode encaminhar portas usando a seqüência ~# e cancelar portas encaminhadas digitando -Krhostport. Para cancelar o túnel Squid que acabamos de criar, digite -KR3128.

Mais em Truques de linha de comando.

Capturas de telas garantidas

Normalmente temos problemas para ilustrar jogos porque os jogos toma o monitor e o teclado para si e, a não ser que o desenvolvedor tenha incluído uma função interna para captura de tela, pode ser muito difícil tirar o conteúdo da tela e salvá-la em um arquivo. Ainda que tenha um modo de jogo em janela, como com Cold War, você ainda precisa encontrar uma maneira de retirar o controle do jogo do teclado e dar controle novamente para o sistema operacional antes que possa usar o utilitário do Gnome ou do KDE que capturam tela.

Há uma solução para quando você não consegue escapar das garras de uma aplicação que tenha tomado conta da sua sessão X Windows. A dica é que ainda quando você não pode ter sua área de trabalho de volta, você permanece tendo um dos terminais virtuais esperando pacientemente em segundo plano. Pressionando Ctrl+Alt+F1 troca-se da sua área de trabalho para o login baseado em texto do primeiro terminal virtual. Estes terminais remontam para quando Unix era um sistema predominantemente multi-usuário e o 'virtual' se referia ao fato de que estavam numa máquina local ao invés de um terminal burro.

Outros terminais virtuais são acessível substituindo-se F1 por F2-F6 e você pode retornar à sua área de trabalho ao acessar ao sétimo terminal virtual, Ctrl+Alt+F7, que também é a sua sessão X em execução. O que isso tem a ver com capturar telas? Bem, já que você tem uma linha de comando, agora é possível capturar a tela usando uma das várias ferramentas de ImageMagick que já está instalado por padrão no seu sistema.

O comando:

chvt 7;sleep 10;import -display :0.0 -window root image.png

Troca-se para o terminal virtual que está executando o X (chvt 7), aguarda 10 segundo e então usa o comando import do ImageMagick para retirar o conteúdo da tela para image.png. Maravilha!

Mais em Truques de linha de comando.

Pinte por números

Todos gostamos de um pouco de cor em nossa vida e apenas porque a linha de comando do Linux é uma interface texto para os trabalhos mais internos do seu sistema, isso não quer dizer que precisamos sofrer com textos monocromáticos. Esta dica vai lhe mostrar como escapar disso!

Há várias maneiras de adicionar cores e uma das mais populares é acompanhada da ajuda de um comando chamado dircolor. Se esta escrita lhe ofende (leitores americanos), você sempre poderá usar um link simbólico como o a seguir para amenizar:

sudo ln -s /usr/bin/dircolors /usr/bin/dircolours

Dircolors fará com que tipos de arquivos diferentes apareçam com várias cores diferentes até mesmo com o humilde comando ls. Se você executar o comando dircolors por si próprio, a saída é uma confusão de tipos de arquivos e códigos secretos. Será algo como pi=40;33: ou *.ogg=01;35:. A primeira parte de cara entrada é o tipo de arquivo e a segunda parte (após o símbolo =) consiste de dois valores que representam as cores da fonte e do plano de fundo. Se ficar confuso com as abreviações cripticas da primeira parte, digitar dircolors --print-database provê uma saída mais clara - revelando que pi=40;33: colorirá o símbolo 'pipe' (pi) com a cor de fundo preto (40) e cor da fonte amarelo (33), por exemplo.

Se olhar com mais detalhes a saída de dircolors verá que inicia com LS_COLORS= e termina com export LS_COLORS. É porque o comando não faz nada mais do que definir um grande variável de ambiente com sua lista de tipos de arquivos e cores. Você pode salvar esta saída e adicioná-la ao final do seu arquivo .bashrc para que as cores sejam usadas automaticamente.

Mais em Truques de linha de comando.

Ressureição de Lázaro

É horrível quando recebemos uma mensagem como

No usable partitions/No OS found

da útil entrada da BIOS. Normalmente temos alguns segundos para perceber - seu disco rígido falhou, ou está falhando, e não há mais boot para o sistema operacional. Há várias razões para que isso aconteça e cada uma com seu potencial de causar perda de dados. Com um disco rídigo quebrado você perder tudo. Mas isso também pode ser apenas o resultado de um carregador de boot com erro ou a instalação de uma distribuição superzelosa. Nestes casos, há uma boa chance de que seus dados sobreviveram intactos - mas o que você faz? Os que periodicamente armazenam backups dos dados podem se sentar, sorrir levemente e restaurar seu trabalho suado pelo último backup. Apesar de saber o quão importante é isso, muitos de nós nunca conseguem reservar tempo para fazer backup dos dados que passamos a vida reunindo. Se há um bom momento para um Live CD Linux entrar em ação, é este.

Os Live CDs são equipados com ferramentas que podem ser usadas para ressuscitar discos rígidos, e muitas das ferramentas Linux rivalizam quando não ultrapassam as funcionalidades da maioria das soluções comerciais. A primeira coisa a fazer é montar o disco perdido a partir do Live CD.

Sugeriríamos usar o PCLinuxOS que muitas vezes é considerada a melhor distribuição atual para encontrar e montar partições problemáticas. Ele também faz um bom trabalho para encontrar partições NTFS do Windows no mesmo disco. O PCLinuxOS detectará automaticamente tudo que encontrar e os montará na área de trabalho. Você deve estar pronto para copiar os dados em um local seguro. Se isto não funcionar, sua salvação será digitar testdisk do console do root.

Testdisk é uma das ferramentas mais subestimadas, mas que pode realmente fazer a diferença entre perder ou manter tudo. É prefeito para restaurar gravações na MBR ou para reconstruir tabela de partições.

Mais em Truques de linha de comando.

Matando o tempo

Uma vez que você comece a usar a linha de comando, usa ps time para gerenciar sua lista de processos. Digitar apenas ps listará os processos que pertencem à sessão atual e que, a não ser que você esteja executando alguma coisa em segundo plano, serão apenas dois: o shell do Bash (se for a sua escolha) e o próprio comando ps. Não há muito uso: a maioria das pessoas usa ps ux para ver todos os processos próprios e ps aux para listar todos os processos do sistema.

É fácil encontrar processos que está procurando passando o resultado de ps para o grep, como em ps aux|grep firefox. Para processos zumbis, tipicamente sai-se à caça dos processos quando o comportamento estranho é iniciado antes de chamar kill -9 pid para matar o ofensor. pid é o número de identificação do processo como informado pela saída do comando ps.

Mas há outra opção - usar o comando pidof para pegar o ID de um processo que você sabe que está executando. Usando o Forefox como um exemplo, basta digitar pidof firefox. A saída será semelhante a:

pidof firefox
18380 18021 24825 13081 6478 6473 6472

Isto significa que há sete instâncias do Firefox executando no momento e cada número é o ID de processo de cada instância. O maior número é o processo mais recente. Por exemplo, você poderia matar o último Firefox em execulção com kill -9 18380.

Um dos aspectos mais úteis de pidof é que você pode usá-lo para trabalhar com o identificador do processo quando não pode manualmente manipular a saída do ps. É perfeito para scripts que precisam encontrar e matar um processo ou talvez dá-los uma maior ou menor prioridade sem perder tempo procurando pela saída do ps·

Mais em Truques de linha de comando.

Brincando com o horário

Quantos das suas máquinas gerenciam para negociar com sucesso a transição da luz do dia em outubro? É importante, porque há mais que ter tempo do que o simpático relógio situado no canto do painel da sua área de trabalho - seu sistema é regulado para executar algumas coisas em certos horários. Seja o horário registrado num e-mail enviado ou data e hora de um arquivo, tudo depende do relógio do seu sistema.

O caminho mais simples de verificar o relógio do seu sistema é usar o comando date. Quando date é executado na linha de comando, você recebe uma linha que contém o dia e a hora em forma abreviada. Você pode usar este formato de saída para definir dia e hora como entrada de um comando date, mas isso é facilmente configurável. Muitas opções podem ser usadas para entrar ou sair com alguma coisa pelo horário em nanosegundos do século presente.

O último campo da saída do comando date lhe dirá em que fuso horário sua máquina está configurada. Se você estiver no Brasil espera-se que você veja 'BRST' para Brazillian Summer Time (horário de verão do Brasil) nesta época do ano. O arquivo de configuração pode ser mapeado para /etc/timezone, que contém uma descrição para sua localização. Para BRST, será algo como 'America/Sao_Paulo'. Se estiver errado, você pode escolher um fuso horário mais adequado em /usr/share/zoneinfo/directory. Este diretório inclui uma lista dos lugares mais populares para se viver no planeta ordenados por continente e país.

Há dois relógios no seu sistema. Um é o relógio do sistema, que é o que é examinado por date. O outro é o relógio do hardware. Este reside na BIOS do seu sistema e mantém o horário enquanto seu computador está desligado. O relógio do sistema pega o horário do relógio do hardware como parte do processo de boot. Você pode consultar e definir o relógio do hardware usando o comando hwclock, digitando:

hwclock --systohc

você define o relógio do hardware para o mesmo horário do relógio do seu sistema.

Mais em Truques de linha de comando.

Redirecionando o Editor

Se você usa uma distribuição baseada no Debian, como o Ubuntu, já se perguntou para que serve o misterioso diretório /etc/alternatives? Se você olhar o conteúdo, verá que está cheio de alguns dos comandos de sistema mais conhecidos. Mas se você olhar de perto, cada arquivo é na verdade um link simbólico para a localização real do comando em algum lugar do sistema. Este diretório está cheio de links porque os desenvolvedores originais do Debian não queriam assumir que uma ferramenta seria usada sobre qualquer outra. Eles usaram o utilitário cron para destacar o problema.

O Cron é usado para agendar evento a serem executados em certos dias e horários e ele faz isso abrindo um editor de texto de onde você necessitar para que você adicione seus próprios trabalhos. Mas a grande questão para os desenvolvedores do Debian era 'Qual editor de texto?'. Para os usuários do Linux não há resposta fácil e é uma pergunta que gera guerras infindáveis e gasta-se muito tempo para ter alguma resposta definitiva. Enquanto uns preferem Emacs, Vi ou Nano, a obrigatoriedade de escolher um a outros sempre causará problemas.

A solução foi /etc/alternatives. Se você digitar cron no Ubuntu, o sistema carregará o bem amigável editor Nano. Mas se você olhar com atenção, cron está na verdade executanto o editor de comando localizado em /usr/bin que é, por sua vez, um link para /etc/alternatives/editor.

Como você já deve estar imaginando, este arquivo é um link para o editor real - neste caso, é /usr/bin/nano. É um passo seguro o recurso de escolher qual editor selecionar dentre todos que você tem como editor padrão quando basta trocar o link para apontar para o seu editor favorito no lugar do Nano. Há até um comando que pode executar esta tarefa para você. Digite update-alternatives --set editor /usr/bin/vim para trocar o editor para o vim, por exemplo. Você também pode listar os editores disponíveis uisando o parâmetro -display editor ou exatamente o mesmo para todos os outros comandos que estão localizados no diretório /etc/alternatives.

Mais em Truques de linha de comando.