Qualquer um que tenha usado um computador em qualquer capacidade sabe de ping, tracert / traceroute, ls, cat etc. Há um par de ferramentas intermediárias no entanto,
que são facilmente utilizados e me salvou de modo muito tempo. Não afirmo ser um deus * nix, mas acho isso incrível.
Devo enfatizar que este é apenas um olhar introdutório ao subconjunto de recursos de cada uma dessas ferramentas; elas têm muitos outros recursos dos quais eu nem saberei.
xargs – bash foreach
Programadores de nível superior podem pensar nisso como um foreach () sobre suas linhas no bash.
Muitos comandos no Linux funcionam apenas em um único arquivo, usando xargs você pode executar a mesma operação em um conjunto inteiro de linhas facilmente.
Um exemplo
A título de exemplo inventado, vamos acrescentar uma lista de diretórios.
xargs executará o comando para cada linha e o sinalizador -i permitirá que a string que está sendo enviada seja substituída pelos caracteres ‘{}’ fornecidos.
portanto…
ls | xargs -i echo '/an_additional_directory/'{}
… pegará cada arquivo ou pasta e acrescentará a string acima, obtendo:
exampleDir
exampleFile
e fazendo-os
/an_additional_directory/exampleDir
/an_additional_directory/exampleFile
Este é um exemplo inventado de manipulação de string, mas a seguir darei um exemplo realmente útil.
grep – pesquisa por string
É um comando bem conhecido, mas vou abordá-lo aqui. Grep permite encontrar uma determinada string regex em um arquivo, um fluxo de entrada ou uma hierarquia de pastas inteira. Isso permite uma pesquisa extremamente poderosa.
grep 'search string' file
Irá procurar uma string em um arquivo (muito, muito rápido)
grep 'search string' -r -i -l . w
Irá pesquisar uma estrutura de diretório inteira e subpastas (-r) começando daqui (com ‘.’) Enquanto ignora maiúsculas e minúsculas (-i) e listará apenas os arquivos que correspondem ao invés da string correspondente (-l)
ls | grep 'search string'
Irá pesquisar em um determinado conjunto de arquivos e pastas por uma string de pesquisa.
sed – editor de stream
sed é para edição de stream, ou seja. modificando as linhas conforme elas são fornecidas. Ele pode fazer modificações de strings no meio do tubo ou em arquivos, entre muitas outras coisas. Na verdade, cobrir seus recursos está além deste
humilde tutorial, mas aqui está uma coisa que ele pode fazer que é incrível:
sed -i -s 's/match regex/replace regex/' somefile
… que irá percorrer o arquivo, encontrando a string correspondente e substituindo-a.
O sinalizador -i diz ao sed para fazer isso em linha, portanto, não precisa se preocupar com problemas de tubulação (apenas use-o ou ele terá problemas para ler e gravar no mesmo arquivo).
Agora, tudo isso foi inventado e não é tão útil. No entanto, e quando é necessário remover, digamos, um e-mail de um site inteiro; talvez centenas de arquivos html.
Existem, sem dúvida, muitas maneiras de fazer isso, mas usando xargs , grep e sed podemos fazer isso facilmente e com uma linha.
grep -r -l 'bad-email@domain.com' .
… encontrará todas as instâncias dos arquivos no diretório atual contendo o e-mail ofensivo e os listará apenas.
xargs
… irá enviar o arquivo para:
sed -i -s 's/bad-email@domain.com/good-email@domain.com/'
… que substituirá o e-mail ofensivo em cada um dos arquivos.
Assim, o comando completo é:
grep -r -l 'bad-email@domain.com' . | xargs sed -i -s 's/bad-email@domain.com/good-email@domain.com/'
MTR – ping + traceroute
Em uma nota bastante diferente, mtr é um comando simples que permite uma excelente combinação de traceroute e ping para diagnosticar problemas de rede, particularmente pacotes perdidos e problemas de latência.
Não é instalado por padrão, então você pode ter que pegá-lo via gerenciador de pacotes:
sudo apt-get install mtr
… ou equivalente em seu sistema (funciona para mac também usando brew).
Vipe – Vim + tubo
O Vipe permite que você pegue o conteúdo enquanto canaliza e edita antes de enviá-lo. Faz parte do pacote de more-utils para instalar o seu:
sudo apt-get install moreutils
E para usá-lo, basta direcionar de e para ele como qualquer outro programa:
ls | vipe | xargs echo
A propósito
uma ferramenta de pesquisa simples para quando você não consegue encontrar o comando que está procurando.