Categorias
Linux

Velhos favoritos do bash

É sempre válido revisitar comandos esquecidos do bash. Três dos mais úteis que parecem ter sido esquecidos no uso comum são o cut, paste e o comando de tradução, tr. cut e paste fazem exatamente o que você espera, e apesar de soarem banais, surpreende quão poderosos podem ser quando usados na linha de comando ou em scripts.

cut normalmente é um pouco mais útil do que o comando paste. Executar o cut recorta parte de uma linha e a redireciona para a saída padrão. Predeterminadamente, o comando usa tabulação como separador de campos, mas isto pode ser alterado usando -d, e os campos são selecionadas ao usar o indicador -f.

paste efetivamente permite que você possa mesclar conteúdos em colunas, como um cat vertical. A melhor maneira de ver como funciona é criando dois arquivos de texto, cada um com três linhas de dados separadas. A saída do paste será o conteúdo do primeiro arquivo numa coluna à esquerda no segundo arquivo.

O comando tr é usado para apagar saídas irrelevantes, como espaços ou tabulações. A opção mais útil é a -s, que remove espaços repetidos em seqüências de um simples caracter. Use a saída de ls -al, que gera uma longa lista de diretórios incluindo o tamanho dos arquivos preenchidos com espaços para melhor visualização. O comando tr pode ser usado para removê-los e colocar um simples caracter de espaço como separação de campos.

Um exemplo de como estes comandos podem trabalhar juntos:

ls -al --sort=size /usr/bin | tr -s ' ' | cut -d ' ' -f 5,8

A longa saída de ls é classificada e então transportada para o comando de tradução. Este remove o preenchimento, deixando os campos separados por um caracter de espaço. Depois o cut usa o caracter de espaço como um delimitador de campo e pega os campos 5 e 6 da saída. O que você tem é uma lista de arquivos, classificadas por tamanho, mostrando apenas o tamanho e o nome do arquivo.

Categorias
Linux

Apelidos para comando de exclusão segura

Todos conhecemos o terrível sentimento: você digita rm * e assim que seu dedo aperta o Enter, a horrível sensação de que você está no diretório errada lhe ataca, mas você pode apenas observar indefeso enquanto seu dedo completa sua pequena mas destrutiva jornada, enviando seus arquivos para uma piscina de zeros e uns.

Por padrão, muitos comandos Unix são destrutivos. rm apaga arquivos, cp e mv sobrescreve-os sem hesitação nem misericórdia. Há opções que adicionam um nível de segurança - os argumentos -i ou --interactive para os comandos acima irá lhe perguntar se você quer confirmar sua intenção a cada passo - mas se você tiver tempo de parar e pensar sobre usá-los, você teria tempo de checar se está no diretório correto ou algo parecido. Se você quer usá-los por padrão, adicione estas linhas a /etc/profile ou ~/.bashrc

alias cp='cp -i'
alias mv='mv -i'
alias rm='rm -i'

para que os comandos sejam executados com a opção -i por padrão. Você pode sempre usar -f se quiser habilitar o máximo da destrutividade.

Apelidar um comando não significa limitar a prevenção do armagedon do arquivo - você também pode adicionar opções que melhoram a saída de um comando, como adicionar -h a ls ou df para ver o tamanho em leitura humana como KB, MB ou GB.

Categorias
Linux

Faça suas próprias Bash wormholes

Até mesmo para o Bash aficionado, o comando mkfifo é provavelmente um dos menos usados em sua coleção. Ele cria um sinal para compartilhamento de dados, conectando dois serviços em execução com um tipo de wormhole de linha de comando. Os dados enviadas no final de uma aparecerá instantaneamente na outra.

Antes de olharmos como usá-lo, é válido lembrar como nós tipicamente vemos canalização (ou pipes). Se você está acostumado a usar o shell para qualquer coisa diferente de assustar seus amigos com cat /dev/random, você estará acostumado com a idéia de canalização. Na maioria das vezes é usado para redirecionar a saída de um programa para a entrada de outro. Um uso comum é quando texto demais na saída de um comando para ler. Canalizando a saída em outro - normalmente também menor ou maior - permite que você interrompa e pagine através da saída em seu próprio tempo:

cat /var/log/messages | less

Nesta intância, a canalização é temporariamente criada para a execução de um único comando, mas usando mkinfo é possível criar canalizações persistentes que você pode usar em tarefas similares.

A parte 'fifo' do comando referencia à natureza da canalização - os dados que é o primeiro a entrar é o primeiro a sair. Criar a própria canalização é uma tão simples quando digitar mkfifo, seguido do nome pelo qual você quer chamá-lo. É igualmente possível definir as permissões para a canalização (usando o parâmetro --mode) para restringir o acesso. Uma vez criada a canalização você precisa apenas direcionar os dados por ela. Aqui está um pequeno exemplo. Primeiro criamos a canalização e usamos tail -f para processar a saída de qualquer dado que é enviado para ela:

mkfifo fifo_pipe
tail -f fifo_pipe

O próximo passo, normalmente por outro terminal ou conta de usuário (caso a permissão tenha sido definida), é enviar dados para a canalização. Digitando echo "Um teste" >> fifo_pipe irá enviar a mensagem de teste, que terá a saída processada pelo comando tail que anexamos à canalização.