Pipes e redirecionamento no Linux: texto, grep e find

Aprenda a trabalhar com texto na linha de comando do Linux. Visualize arquivos com cat, less, head e tail, envie saídas e mensagens de erro para arquivos e encadeie pequenos comandos para contar, ordenar e recortar texto. Busque em arquivos com grep e expressões regulares, encontre arquivos por nome, tamanho e tempo desde a modificação e edite arquivos de configuração nos editores de terminal nano e vi.

BásicoAula 3 de 7 do curso Curso de Fundamentos de Linux

O que você vai aprender

  1. Exibir arquivos curtos na íntegra, navegar por arquivos longos e mostrar apenas as primeiras ou as últimas linhas de um arquivo.
    • Exibir arquivos e navegar por seu conteúdo com cat e less
      Exibir arquivos curtos com cat, ler arquivos longos uma tela por vez com less e navegar e buscar dentro do less.
    • Exibir as primeiras ou as últimas linhas com head e tail
      Usar head e tail para mostrar o início ou o fim de um arquivo, pular uma linha de cabeçalho, selecionar um intervalo de linhas e acompanhar um arquivo de log que recebe novas linhas.
  2. Explicar os três fluxos padrão de um comando e redirecionar entradas, saídas e mensagens de erro de e para arquivos.
    • Compreender a entrada padrão, a saída padrão e a saída de erro padrão
      Descrever os três fluxos padrão, por que saídas e erros são separados e como um comando pode ler sua entrada de um arquivo em vez do teclado.
    • Redirecionar a saída e os erros para arquivos
      Salvar saídas e mensagens de erro em arquivos por sobrescrita ou acréscimo ao final, combinar ou descartar fluxos e evitar destruir um arquivo ao redirecionar para ele.
  3. Conectar pequenos comandos com pipes para contar, ordenar, remover duplicatas e recortar texto, respondendo a perguntas sobre dados em uma única linha de comando.
    • Conectar comandos com pipes e tee
      Usar o pipe para passar a saída de um comando ao seguinte, construir e verificar um encadeamento etapa por etapa e salvar uma cópia durante o processo com tee.
    • Contar, ordenar e remover linhas duplicadas
      Contar linhas, palavras e bytes com wc, ordenar linhas alfabeticamente, numericamente ou por campo com sort e remover ou contar duplicatas com uniq.
    • Extrair colunas com cut
      Selecionar campos de texto delimitado e caracteres de posições fixas com cut e usá-lo em encadeamentos para responder a perguntas sobre dados.
  4. Encontrar linhas em arquivos com grep e descrever com precisão o texto a buscar usando expressões regulares básicas e estendidas.
    • Buscar texto em arquivos com grep e suas principais opções
      Usar grep para exibir, contar, numerar ou inverter linhas correspondentes, buscar em pastas inteiras e escolher entre buscas por padrão e por texto literal.
    • Escrever expressões regulares básicas
      Construir padrões com caracteres literais, ponto, âncoras, expressões entre colchetes e asterisco, e evitar confundi-los com caracteres curinga de nomes de arquivo.
    • Usar expressões regulares estendidas com grep -E
      Usar os operadores ?, +, { }, | e ( ) com grep -E para encontrar texto opcional, repetido e alternativo e exibir apenas os trechos correspondentes.
  5. Localizar arquivos em qualquer ponto da árvore de diretórios com find e locate e executar comandos nos arquivos encontrados.
    • Pesquisar na árvore de diretórios com find
      Usar find com testes de nome, tipo, tamanho e tempo, combinar testes e evitar os problemas de aspas e permissões encontrados por iniciantes.
    • Executar ações nos arquivos encontrados e usar buscas mais rápidas
      Executar comandos em cada arquivo retornado por find, excluir correspondências com segurança e saber quando locate ou which é a ferramenta mais rápida.
  6. Abrir, alterar, salvar e fechar arquivos de texto nos dois editores de terminal encontrados na maioria dos sistemas Linux: o simples nano e o modal vi.
    • Editar e salvar um arquivo no nano
      Abrir um arquivo no nano, digitar e alterar texto, buscar e substituir, recortar e colar linhas e salvar e sair corretamente.
    • Trabalhar nos modos do vi
      Alternar entre os modos normal, de inserção e de linha de comando do vi, navegar e editar com comandos de uma tecla e salvar ou sair sem perder o trabalho.

Guia de estudo de Pipes e redirecionamento no Linux

6 capítulos

1

Visualizar arquivos pelo terminal

Um arquivo de texto pode conter algumas anotações ou milhares de configurações. Escolha uma visualização adequada ao que você precisa: o arquivo inteiro, uma tela pela qual você pode navegar ou uma pequena parte próxima de uma das extremidades. Você aprenderá a navegar e buscar sem editar, selecionar um intervalo exato de linhas e acompanhar a chegada de texto a um arquivo que recebe novas linhas. Esses comandos de visualização também aceitam a saída de outros comandos, então as mesmas habilidades ajudam você a inspecionar uma listagem longa de diretório ou os resultados de um encadeamento.

1.1 Exibir arquivos e navegar por seu conteúdo com cat e less

Arquivos curtos são fáceis de exibir. Arquivos longos são mais fáceis de ler quando a visualização espera por você. Nem cat nem a visualização normal de leitura do less editam o arquivo.

Exibir ou concatenar texto com cat

cat notes.txt envia o arquivo inteiro para a saída padrão, normalmente seu terminal. O nome vem de concatenate: com vários nomes de arquivo, ele exibe seus conteúdos na ordem informada. Ele não insere um cabeçalho entre os arquivos.

Suponha que a.txt contenha as linhas “a” e “b”, e que b.txt contenha “c d”. Execute:

cat -n a.txt b.txt

Você vê três linhas numeradas. Os números continuam entre os dois arquivos; -n numera a saída, não os arquivos armazenados. Para salvar o texto concatenado, use cat a.txt b.txt > ab.txt. O novo arquivo contém as três linhas originais sem numeração. Incluir -n também salvaria os números.

Exibir um arquivo grande pode fazer seu início passar para fora da tela visível. Um paginador permite controlar a visualização. less /etc/services abre um arquivo de texto longo e mostra uma tela de conteúdo. Ele pode mostrar a primeira tela antes de ler o arquivo inteiro, o que ajuda com arquivos grandes.

Navegar no less

O prompt do shell fica oculto enquanto less está em execução. O programa está aguardando uma tecla de navegação:

TeclaAção
Espaço ou fAvançar uma tela
bVoltar uma tela
Seta para baixo, Enter ou jDescer uma linha
Seta para cima ou kSubir uma linha
g / GIr para a primeira / última linha
h / qMostrar ajuda / sair

Maiúsculas fazem diferença: g e G vão para extremidades opostas. Para terminar a leitura, pressione q; esperar por um novo prompt do shell sem sair pode fazer o paginador parecer travado.

Buscar na visualização

Digite /, insira uma palavra e pressione Enter para buscar para a frente. Por exemplo, /ssh encontra o próximo texto correspondente. Digite ?ssh e Enter para buscar para trás. Em seguida, n repete a busca na direção atual, enquanto N vai na direção oposta. Após uma busca para trás, n continua para trás.

A busca usa uma expressão regular. /^# encontra uma linha que começa com “#” porque ^ marca o início de uma linha. Você pode aprender as regras de padrões separadamente enquanto usa palavras simples por enquanto.

less -N notes.txt acrescenta números de linha à visualização. Para registros largos, less -S notes.txt mantém uma linha longa em uma única linha da tela, cortando a extremidade direita visível; as setas para a esquerda e para a direita movem a visualização lateralmente. O texto permanece no arquivo. Sem -S, linhas longas são quebradas em linhas adicionais na tela. more é um paginador mais antigo, com menos opções de navegação.

Paginar a saída de outro comando

ls -l /usr/bin | less permite navegar pela listagem longa. O pipe entrega a listagem ao paginador. Para um arquivo existente, less notes.txt o abre diretamente; cat notes.txt | less introduz um comando adicional para a mesma visualização.

Use esses comandos em texto. Exibir um programa binário como /bin/ls pode mostrar caracteres de controle e distorcer o terminal. Se isso acontecer, digite reset e pressione Enter para restaurar a visualização.

Principais conclusões

  • cat exibe arquivos na ordem informada; -n numera a saída combinada.
  • less pagina texto sem editá-lo; q retorna ao shell.
  • No less, / busca para a frente, ? busca para trás e n repete na direção atual.
  • less -N mostra números de linha; less -S permite rolar horizontalmente por linhas largas.

1.2 Exibir as primeiras ou as últimas linhas com head e tail

Quando você precisa apenas das primeiras entradas ou das mais recentes de um arquivo, exibir tudo esconde a parte útil. head seleciona o início e tail seleciona o fim. Ambos exibem 10 linhas por padrão.

Escolher um número de linhas

Se numbers.txt contém de 1 a 100, um número por linha, head numbers.txt exibe de 1 a 10, enquanto tail numbers.txt exibe de 91 a 100. Use -n para mudar a contagem:

head -n 3 numbers.txt
tail -n 3 numbers.txt

O primeiro comando exibe 1, 2, 3. O segundo exibe 98, 99, 100. Se um arquivo tem menos linhas que o solicitado, o comando exibe as disponíveis.

head -c 5 seleciona cinco bytes em vez de cinco linhas. Para um texto que começa com “banana”, ele exibe “banan”. Bytes são unidades de armazenamento; em texto UTF-8, um caractere pode usar mais de um byte, então uma contagem de bytes nem sempre é uma contagem de caracteres.

Interpretar corretamente a posição inicial

Um sinal de mais altera o significado de tail -n. Compare:

ComandoSignificado
tail -n 2 fileExibir as duas últimas linhas
tail -n +2 fileExibir da linha 2 até o fim

tail -n +2 scores.csv remove a primeira linha, o que é útil quando ela contém os títulos das colunas. Ele não seleciona apenas a segunda linha. No arquivo numerado, tail -n +98 numbers.txt exibe de 98 a 100.

O head do GNU também aceita uma contagem negativa: head -n -97 numbers.txt omite as últimas 97 linhas, deixando de 1 a 3. O sinal pertence à contagem e faz parte da instrução.

Selecionar um intervalo no meio

Para exibir as linhas de 11 a 20, primeiro mantenha tudo até a linha 20. Depois mantenha as últimas 10 linhas dessa seleção:

head -n 20 numbers.txt | tail -n 10

Após head, os dados vão de 1 a 20. As últimas dez linhas vão de 11 a 20. Um intervalo inclusivo contém o número final menos o número inicial mais uma linha; esse último um inclui ambas as extremidades. Usar tail -n 11 também incluiria a linha 10.

Ambos os comandos podem ler um pipe quando nenhum arquivo de entrada é informado. ls /etc | head -n 5 limita uma listagem aos seus primeiros cinco nomes. Com ls -lt | head -n 4, lembre-se de que a primeira linha de saída é a linha “total”: apenas três entradas vêm depois dela.

Acompanhar o crescimento de um arquivo

tail -f /var/log/app.log primeiro exibe as linhas finais, depois espera e exibe o texto acrescentado ao arquivo. Use-o enquanto um programa escreve novas entradas. Pressione Ctrl+C para parar o acompanhamento e retornar ao shell. A espera nessa visualização é intencional; ela é diferente da saída única e concluída de tail sem opções.

tail -F também tenta novamente e acompanha o nome do arquivo quando um log é removido e criado novamente durante a rotação. Com vários arquivos de entrada, head e tail identificam a saída de cada arquivo com um cabeçalho como “==> fruit.txt <==”. Acrescente -q quando precisar do texto selecionado sem esses cabeçalhos.

Principais conclusões

  • head e tail mostram 10 linhas por padrão; -n define uma contagem de linhas.
  • tail -n +K começa na linha K; não significa as últimas K linhas.
  • Para um intervalo inclusivo, mantenha primeiro a quantidade de linhas até a linha final e depois a quantidade correspondente ao tamanho do intervalo.
  • tail -f acompanha o texto acrescentado; Ctrl+C interrompe o acompanhamento.
  • tail -F acompanha um nome de arquivo mesmo após sua substituição, e -q omite cabeçalhos de vários arquivos.
2

Controlar a origem da entrada e o destino da saída e dos erros

Um comando pode produzir resultados úteis e mensagens de erro na mesma execução. O Linux fornece caminhos separados para eles, além de um caminho para a entrada. O shell pode conectar cada caminho a um arquivo antes de o comando começar. Compreender essas conexões permite salvar um relatório, manter erros em um arquivo separado e fornecer dados sem digitá-los. A ordem dos redirecionamentos importa, e um arquivo de saída pode ser esvaziado antes de o programa ler qualquer entrada.

2.1 Compreender a entrada padrão, a saída padrão e a saída de erro padrão

Um comando se comunica por fluxos padrão. Pensar na entrada e na saída como caminhos separados explica como o mesmo programa pode ler o teclado, ler um arquivo ou receber a saída de outro comando.

Identificar os três fluxos

Um descritor de arquivo é o número usado para identificar um fluxo aberto. Um comando comum do shell herda estes três:

NúmeroNomeConexão habitual no terminal
0Entrada padrão, stdinEntrada do teclado
1Saída padrão, stdoutResultados normais na tela
2Saída de erro padrão, stderrErros e mensagens de estado na tela

Embora stdout e stderr normalmente compartilhem a tela, são conexões separadas. Um programa pode informar um resultado em stdout e explicar um problema em stderr durante a mesma execução.

Por exemplo, ls /etc/hostname /nonexistent > out.txt lista um caminho existente e encontra um caminho inexistente. A listagem vai para out.txt. A mensagem “No such file or directory” permanece no terminal porque > redireciona stdout, não stderr. Ver um erro na tela não significa que o redirecionamento da saída falhou.

Fornecer a um comando entrada de um arquivo

Comandos como cat, sort, wc, grep, head e tail podem ler stdin quando nenhum arquivo de entrada é informado. Execute sort sozinho, digite algumas linhas e pressione Ctrl+D no início de uma linha vazia. Isso sinaliza o fim da entrada, permitindo que sort exiba as linhas ordenadas. Ctrl+C interrompe o comando em vez de concluir a entrada.

O operador de entrada < conecta um arquivo a stdin:

wc -l < fruit.txt

Se fruit.txt tem seis linhas terminadas com caracteres de nova linha, a saída é “6”. Compare com wc -l fruit.txt, que exibe “6 fruit.txt”. Na forma redirecionada, o shell abre o arquivo e wc recebe um fluxo sem o nome original do arquivo. Na forma com argumento, o próprio wc abre o arquivo indicado.

O shell prepara os redirecionamentos antes de iniciar o programa. Portanto, sort < fruit.txt e < fruit.txt sort conectam o mesmo arquivo ao mesmo fluxo de entrada. A posição habitual após o comando é mais fácil de ler.

Fornecer algumas linhas diretamente

Um documento de entrada embutido coloca a entrada abaixo do comando. A palavra após << marca onde essa entrada termina:

cat <<EOF > greeting.txt
Hello
See you soon
EOF

cat recebe as duas linhas de saudação em stdin e as escreve no arquivo de saída. A última linha contém apenas EOF; ela é um delimitador, não faz parte do texto salvo. Outra palavra pode ser usada como delimitador se a linha de encerramento corresponder exatamente a ela.

No Bash, uma string de entrada embutida fornece uma string mais um caractere de nova linha. wc -w <<< "a b c" informa três palavras. Essas duas formas fornecem entrada diretamente, sem criar primeiro um arquivo de entrada.

Leia a seta antes de executar o comando

sort < fruit.txt lê o arquivo. sort > fruit.txt abre-o como destino de saída, esvazia o conteúdo existente e aguarda entrada do teclado. O shell realiza essa abertura destrutiva antes de sort ser executado. Mantenha os arquivos de entrada separados dos destinos de saída, a menos que o comando tenha uma forma documentada de atualizar sua entrada com segurança.

Principais conclusões

  • stdin, stdout e stderr usam os descritores de arquivo 0, 1 e 2.
  • < fornece um arquivo por stdin; > altera o destino de stdout.
  • Ctrl+D em uma linha de entrada vazia sinaliza o fim da entrada; Ctrl+C interrompe o comando.
  • Um documento de entrada embutido usa um delimitador correspondente em uma linha isolada.

2.2 Redirecionar a saída e os erros para arquivos

O redirecionamento altera o destino de um fluxo. É uma operação do shell, então os mesmos operadores funcionam com muitos programas diferentes. Comece decidindo qual fluxo enviar e se um arquivo existente deve ser substituído ou receber conteúdo adicional.

Salvar resultados normais ou acrescentá-los

echo one > log.txt cria o arquivo ou o esvazia antes de escrever a linha “one”. Um echo two >> log.txt posterior acrescenta “two”, deixando duas linhas. >> também cria um arquivo inexistente.

OperadorEfeito
> out.txtEscrever stdout, substituindo o conteúdo existente
>> out.txtAcrescentar stdout ao final
2> err.txtEscrever stderr, substituindo o conteúdo existente
2>> err.txtAcrescentar stderr ao final

ls /etc/hostname /nonexistent > out.txt 2> err.txt separa a listagem bem-sucedida do erro de caminho inexistente. O descritor deve ficar junto ao operador. ls 2> err.txt redireciona erros; ls 2 > err.txt pede a ls que liste um arquivo chamado “2” e redireciona sua saída normal.

Combinar fluxos na ordem correta

2>&1 direciona stderr ao destino atual de stdout. Leia os redirecionamentos da esquerda para a direita:

ls /etc/hostname /nonexistent > all.txt 2>&1

Primeiro, stdout é direcionada a all.txt. Depois, stderr copia essa conexão. Ambos os fluxos agora chegam ao arquivo. &> all.txt do Bash é uma forma mais curta, e &>> all.txt acrescenta ambos os fluxos ao final.

Inverter a ordem altera o resultado:

ls /etc/hostname /nonexistent 2>&1 > out.txt

Primeiro, stderr aponta para onde stdout aponta naquele momento: o terminal. Depois, stdout é direcionada ao arquivo. Stderr mantém a conexão anterior, então o erro permanece visível. 2>&1 estabelece uma conexão naquele momento; não faz stderr acompanhar todas as alterações posteriores em stdout.

Descartar um fluxo deliberadamente

/dev/null descarta os dados escritos nele. find / -name passwd 2>/dev/null deixa os caminhos correspondentes em stdout enquanto oculta diagnósticos como “Permission denied”. Essas mensagens podem identificar pastas que não foram pesquisadas, então descartá-las também remove informações sobre lacunas na busca.

Proteger um arquivo de entrada

Não escreva sort fruit.txt > fruit.txt. O shell esvazia o destino antes de sort lê-lo. Use um caminho de saída diferente, verifique o resultado e depois renomeie-o. Especificamente para sort, sort -o fruit.txt fruit.txt usa sua opção de arquivo de saída para atualizar esse arquivo com segurança.

O Bash também pode rejeitar sobrescritas acidentais:

set -o noclobber

Com essa configuração, > comum falha para um arquivo comum existente. >> continua acrescentando ao final. Use >| para uma sobrescrita intencional ou set +o noclobber para desativar a configuração. A proteção é útil ao salvar relatórios repetidos, mas não altera as opções de escrita em arquivos do próprio comando.

Principais conclusões

  • > sobrescreve, enquanto >> acrescenta ao final; use o descritor 2 para stderr.
  • > all.txt 2>&1 captura ambos os fluxos porque os redirecionamentos são processados da esquerda para a direita.
  • 2>&1 > out.txt deixa stderr no destino anterior de stdout.
  • /dev/null descarta o fluxo selecionado, incluindo diagnósticos úteis.
  • Evite redirecionar para um arquivo de entrada; sort -o oferece uma alternativa compatível.
  • A proteção noclobber do Bash rejeita > comum em arquivos comuns existentes; >| permite sobrescrevê-los.
3

Combinar comandos em encadeamentos

Pequenos comandos de texto tornam-se mais úteis quando suas entradas e saídas se encaixam. Um encadeamento pode remover um cabeçalho, selecionar uma coluna, agrupar valores repetidos e contá-los sem criar um arquivo após cada etapa. Cada etapa altera o que a seguinte recebe. Examine as etapas separadamente para identificar se um total incorreto vem da seleção, da ordenação ou da contagem, e salve resultados intermediários quando precisar inspecioná-los.

3.1 Conectar comandos com pipes e tee

Um pipe, escrito |, une a saída normal de um comando à entrada do próximo. Você pode conectar várias pequenas tarefas sem salvar um arquivo temporário entre elas.

Acompanhar o fluxo de texto

Em ls /etc | wc -l, ls escreve nomes e wc -l conta os caracteres de nova linha que recebe. Um comando que lê stdin, seleciona ou altera texto e escreve em stdout é chamado de filtro. sort, uniq, wc, cut, grep, head e tail podem servir como filtros.

A forma geral é command1 | command2 | command3. Cada etapa recebe a saída da etapa anterior, que pode ter uma forma diferente da do arquivo original. Uma etapa posterior não pode recuperar linhas ou colunas removidas por uma etapa anterior.

Construir uma contagem em etapas

Suponha que fruit.txt contenha seis linhas: “banana”, “apple”, “cherry”, “apple”, “banana”, “apple”. Para contar os nomes diferentes, primeiro execute:

sort fruit.txt

A saída tem três linhas “apple”, duas linhas “banana” e uma linha “cherry”. Os nomes iguais agora estão lado a lado. Acrescente uma etapa:

sort fruit.txt | uniq

uniq remove repetições adjacentes, deixando “apple”, “banana” e “cherry”. Por fim, sort fruit.txt | uniq | wc -l informa 3. Contar diretamente o arquivo original informaria seis linhas, o que responde a outra pergunta.

Execute cada versão ampliada do encadeamento e inspecione seu resultado antes de acrescentar o próximo comando. Para saídas muito longas, acrescente temporariamente | head para ver as primeiras dez linhas. Isso facilita identificar um cabeçalho que não foi removido ou um campo selecionado incorretamente.

Manter erros separados

Um pipe comum transporta stdout, não stderr. Com um caminho existente e um inexistente, ls /etc/hostname /nonexistent | wc -l conta a única linha normal da listagem. O erro continua aparecendo no terminal.

Para incluir diagnósticos nos dados, use ls /etc/hostname /nonexistent 2>&1 | wc -l, que conta duas linhas neste exemplo. |& do Bash também combina stdout e stderr no pipe. A utilidade de incluir erros depende do que você quer que a contagem final signifique.

As etapas são executadas simultaneamente. tail -f /var/log/app.log | grep ERROR exibe no terminal as novas linhas correspondentes acrescentadas. Essa é uma visualização ao vivo, não um processo que espera o arquivo terminar. No entanto, programas podem armazenar a saída em buffer; a exibição imediata não é garantida para todo encadeamento possível.

Salvar uma cópia durante o processo

tee escreve sua entrada tanto em um arquivo quanto em stdout:

sort fruit.txt | uniq | tee unique.txt | wc -l

O terminal mostra 3, enquanto unique.txt armazena os três nomes. tee -a acrescenta ao final em vez de substituir o arquivo salvo. Colocar tee antes salvaria uma forma anterior dos dados.

Um pipe conecta a um comando, enquanto > indica um arquivo. ls > less cria um arquivo chamado “less”; não inicia o paginador. O comando que recebe os dados também precisa ler stdin: enviar texto por pipe para echo ou ls não transforma esse texto em argumentos deles.

Principais conclusões

  • | conecta stdout a stdin do próximo comando.
  • Verifique um encadeamento uma etapa por vez; cada etapa recebe a saída da anterior.
  • Stderr fica fora de um pipe comum, a menos que você combine os fluxos.
  • tee salva a entrada e a passa adiante; tee -a acrescenta ao final.
  • O texto enviado por pipe é stdin, não uma lista de argumentos de comando.

3.2 Contar, ordenar e remover linhas duplicadas

Contar e ordenar são tarefas separadas. Antes de usar uma contagem, decida se você precisa de registros, palavras, bytes ou valores distintos. Antes de remover duplicatas, decida se as linhas iguais já estão lado a lado.

Contar o que interessa com wc

wc file sem opções informa linhas, palavras e bytes, nessa ordem, e depois o nome do arquivo. A lista de frutas de seis linhas contendo “banana”, “apple”, “cherry”, “apple”, “banana”, “apple” produz “6 6 39 fruit.txt”. Cada linha contribui com suas letras mais um byte de nova linha.

OpçãoO que conta
-lCaracteres de nova linha
-wPalavras separadas por espaços em branco
-cBytes
-mCaracteres

Um trecho final de texto sem um caractere de nova linha não é contado por wc -l. Portanto, um texto contendo “one”, um caractere de nova linha e depois “two” tem contagem 1. Em UTF-8, “café” seguido por um caractere de nova linha usa seis bytes, mas cinco caracteres, porque “é” usa dois bytes. Com vários arquivos de entrada, wc exibe suas contagens e um total adicional.

Escolher ordenação textual ou numérica

sort escreve linhas ordenadas sem alterar o arquivo de entrada. Sua ordem padrão segue a configuração de idioma atual. sort -f compara sem distinguir maiúsculas de minúsculas.

A ordenação textual compara caracteres: “100”, “25”, “9” aparecem nessa ordem porque seus primeiros dígitos são “1”, “2”, “9”. sort -n compara valores numéricos, produzindo 9, 25, 100. Acrescente -r para inverter a ordem, como em sort -rn. sort -h reconhece sufixos de tamanho como “2K”, “300M” e “1G”.

Ordenar por um campo

Para registros separados por vírgulas, -t, define o separador. -k3,3nr seleciona apenas o campo 3, compara numericamente e inverte a ordem:

tail -n +2 scores.csv | sort -t, -k3,3nr | head -n 3

Com “name,city,score” seguido de “Ana,Lisbon,82”, “Ben,Oslo,75”, “Chen,Lisbon,91”, “Dara,Oslo,68” e “Eli,Lisbon,88”, o resultado é Chen, Eli e depois Ana, com seus registros completos. A primeira etapa remove o cabeçalho. Caso contrário, sua chave de pontuação não numérica vale zero durante a ordenação numérica.

Sem -t, espaços em branco separam os campos. -k2 estende a chave do campo 2 até o fim da linha; -k2,2 limita-a ao campo 2.

Agrupar duplicatas antes de contá-las

uniq compara cada linha com a sequência adjacente. Na lista de frutas não ordenada, ele mantém as seis linhas porque não há nomes iguais adjacentes. sort fruit.txt | uniq exibe os três nomes diferentes; sort -u fruit.txt também pode produzir uma lista ordenada sem duplicatas.

Após a ordenação, uniq -c informa a contagem de cada sequência: “3 apple”, “2 banana”, “1 cherry”, com espaços preenchendo as contagens. uniq -d exibe uma cópia de cada valor repetido, e uniq -u exibe apenas os valores que ocorrem uma vez. uniq -i ignora maiúsculas e minúsculas em suas comparações.

Para mostrar primeiro os valores mais frequentes, use sort fruit.txt | uniq -c | sort -rn. A ordenação inicial agrupa linhas idênticas; a ordenação final classifica suas contagens. Omitir a primeira ordenação conta separadamente as sequências dispersas.

Principais conclusões

  • wc -l conta caracteres de nova linha, -w palavras, -c bytes e -m caracteres.
  • sort -n compara números; -r inverte a ordem; -h interpreta sufixos de tamanho.
  • sort -t, -k3,3nr ordena registros separados por vírgulas numericamente pelo campo 3 em ordem decrescente.
  • Remova o cabeçalho antes de ordenar os registros de dados.
  • uniq remove repetições adjacentes; ordene primeiro quando valores iguais estiverem dispersos.
  • uniq -c conta sequências, -d seleciona valores repetidos e -u seleciona valores que ocorrem uma vez.
  • sort | uniq -c | sort -rn agrupa valores, conta-os e ordena as contagens.

3.3 Extrair colunas com cut

Um registro muitas vezes contém mais informações do que uma pergunta exige. cut seleciona campos ou posições fixas de cada linha e escreve a seleção em stdout. Ele não reorganiza nem edita o arquivo original.

Selecionar campos pelo separador

Um delimitador separa campos. Em /etc/passwd, dois-pontos separam o nome de usuário, o marcador de senha, o identificador de usuário, o identificador de grupo, o nome completo, o diretório pessoal e o shell de login. Para este registro de exemplo:

alice:x:1001:1001:Alice Smith:/home/alice:/bin/bash

cut -d: -f1,6 exibe “alice:/home/alice”. Os números dos campos começam em 1, e o delimitador permanece entre os campos selecionados. cut -d: -f5 exibe “Alice Smith”; o espaço interno faz parte desse campo porque o delimitador é dois-pontos.

SeleçãoCampos exibidos
-f1,3Campos 1 e 3
-f2-4Campos de 2 a 4
-f3-Do campo 3 até o último campo

A lista seleciona campos, não uma nova ordem. cut -d, -f3,1 continua exibindo o campo 1 seguido do campo 3. Por padrão, o separador é uma tabulação, então cut -f2 file seleciona o segundo campo separado por tabulações.

Uma linha sem delimitador é exibida inteira. Por exemplo, cut -f2 exibe “sem tabulações aqui” sem alterações porque ela não tem tabulação. Acrescente -s para omitir linhas sem delimitador. Uma linha que contém delimitadores, mas não possui um campo solicitado, é um caso diferente; -s não é um teste geral de registros completos.

Selecionar posições fixas

cut -c1-5 seleciona as posições de 1 a 5. No registro de conta acima, ele exibe “alice”. A seleção por posição é adequada para texto de largura fixa, em que as colunas desejadas começam nas mesmas posições em todas as linhas. A seleção por campo é adequada para registros cujos campos têm comprimentos variáveis, mas cujos separadores permanecem consistentes.

Verificar como os separadores funcionam

Com cut -d' ' -f2, cada espaço individual é um separador. O texto “a b” tem um segundo campo vazio entre seus dois espaços, então o resultado é uma linha vazia. Se espaços repetidos são apenas preenchimento entre colunas, tr -s ' ' | cut -d' ' -f2 primeiro reduz cada sequência de espaços a um só.

cut também trata vírgulas dentro de valores entre aspas como separadores. Um valor CSV entre aspas como “Smith, Ann” não é mantido junto automaticamente. Use exemplos simples separados por delimitadores apenas quando os limites dos campos realmente corresponderem à regra do delimitador.

Contar valores de uma coluna selecionada

Para contar cidades em scores.csv, comece com cut -d, -f2 scores.csv. Com os registros de Ana, Ben, Chen, Dara e Eli, isso exibe “city”, “Lisbon”, “Oslo”, “Lisbon”, “Oslo”, “Lisbon”. Depois:

cut -d, -f2 scores.csv | tail -n +2 | sort | uniq -c | sort -rn

Remover a primeira linha elimina “city”. A ordenação agrupa as três entradas Lisbon e as duas entradas Oslo; uniq -c as conta, e a última ordenação coloca “3 Lisbon” antes de “2 Oslo”. Esquecer a etapa do cabeçalho cria um valor extra, “1 city”, porque um cabeçalho continua sendo texto para esses comandos.

Principais conclusões

  • cut -d define o delimitador e -f seleciona campos numerados a partir de 1.
  • Listas de campos selecionam campos na ordem original; -c seleciona posições fixas.
  • O delimitador padrão é uma tabulação; -s omite linhas sem delimitador.
  • Espaços repetidos criam campos vazios, e cut não interpreta o uso de aspas em CSV.
  • Para contagens de frequência, remova o cabeçalho, selecione o valor, agrupe linhas iguais e conte.
4

Buscar texto com grep e expressões regulares

Uma busca de texto começa pela definição do que conta como correspondência. Você pode precisar de uma frase literal, uma palavra inteira, uma linha completa ou um padrão como duas letras seguidas de quatro dígitos. grep pode exibir as linhas correspondentes ou informar seus números, suas contagens e os nomes dos arquivos. As expressões regulares descrevem os padrões, enquanto as aspas impedem que o shell os altere antes. Você avançará de correspondências simples para alternativas agrupadas e partes repetidas.

4.1 Buscar texto em arquivos com grep e suas principais opções

grep busca texto e normalmente exibe todas as linhas que contêm uma correspondência. Uma busca útil começa pela escolha do padrão e do tipo de resultado necessário: linhas, contagens, números de linha ou nomes de arquivo.

Começar com um padrão entre aspas

A forma habitual é grep 'pattern' file. Sem um argumento de arquivo, grep lê stdin. As buscas diferenciam maiúsculas de minúsculas, a menos que você acrescente -i.

Suponha que server.log tenha cinco entradas: uma linha INFO de inicialização, uma linha ERROR de disco cheio, uma linha WARN de nova tentativa, uma linha “error timeout” em minúsculas e uma linha INFO de backup. grep 'ERROR' server.log exibe apenas a linha com ERROR em maiúsculas. grep -i 'error' server.log exibe ambas as linhas de erro.

Coloque os padrões entre aspas mesmo quando parecerem simples. grep 'disk full' server.log busca as duas palavras juntas. Sem aspas, grep disk full server.log usa “disk” como padrão e trata “full” como outro nome de arquivo. As aspas também impedem que o shell expanda asteriscos e outros caracteres especiais antes de grep recebê-los.

Escolher a saída necessária
OpçãoResultado
-iEncontrar correspondências sem distinguir maiúsculas de minúsculas
-vExibir linhas que não correspondem
-cExibir o número de linhas correspondentes
-nColocar os números das linhas antes das correspondências
-wExigir correspondência de palavra inteira
-xExigir correspondência da linha inteira

As opções podem ser combinadas: grep -ic 'error' server.log informa 2, enquanto grep -n 'WARN' server.log identifica a linha 3. -c conta linhas correspondentes, não o número de ocorrências dentro delas. Uma linha contendo “error error” acrescenta um à contagem.

Considere as linhas “error”, “terror”, “errors” e “Error found”. grep 'error' sem opções encontra as três primeiras. grep -w 'error' encontra apenas a primeira porque “error” não é uma palavra inteira em “terror” ou “errors”. Acrescentar -i também encontra “Error found”. -x exige uma linha inteira correspondente, então “Error found” continua não correspondendo a uma busca pela linha inteira “error”.

Buscar em vários arquivos

Ao pesquisar vários arquivos, grep normalmente coloca os nomes dos arquivos antes das correspondências. grep -r 'TODO' notes pesquisa arquivos em toda a árvore de pastas. Acrescente -l para exibir apenas nomes de arquivos com correspondências: grep -rl 'TODO' notes. -L maiúsculo lista arquivos sem correspondência. Esses resultados selecionam arquivos, não contam linhas correspondentes.

Decidir se o padrão é literal

Por padrão, grep interpreta uma expressão regular. Um ponto corresponde a qualquer caractere individual, então '10.0.0.7' também pode corresponder a “10a0b0c7”. grep -F '10.0.0.7' file busca o texto exato. Escapar cada ponto, como em '10\.0\.0\.7', também torna os pontos literais.

grep -q suprime a saída normal e informa o resultado pelo código de saída: 0 para uma correspondência, 1 para nenhuma correspondência e normalmente 2 para um erro no grep do GNU. Um arquivo de entrada inexistente é um erro, não prova de que o padrão estava ausente.

Em um encadeamento, grep -i 'error' server.log | wc -l conta linhas correspondentes assim como grep -ic. A primeira forma deixa espaço para outros filtros entre a seleção das linhas e sua contagem.

Principais conclusões

  • grep exibe linhas correspondentes e diferencia maiúsculas de minúsculas, a menos que -i seja usado.
  • Coloque o padrão entre aspas para que o shell o passe intacto.
  • -c conta linhas correspondentes; -n as numera; -v seleciona as que não correspondem.
  • -w exige uma palavra inteira e -x uma linha inteira.
  • -r pesquisa uma árvore, -l lista arquivos com correspondência e -L lista arquivos sem correspondência.
  • -F trata um padrão como texto literal; -q informa o resultado de uma busca pelo código de saída.

4.2 Escrever expressões regulares básicas

Uma expressão regular, ou regex, descreve texto que pode corresponder a um padrão. grep normalmente procura um trecho correspondente em qualquer lugar de uma linha e depois exibe a linha inteira. A maioria das letras corresponde a si mesma; caracteres especiais descrevem posições, escolhas ou repetições.

Encontrar um caractere ou uma posição

O ponto . corresponde a um caractere dentro de uma linha. Com as linhas “cat”, “cart”, “coat”, “cut”, “act”, “scat” e “color”, o padrão 'c.t' corresponde a “cat”, “cut” e “scat”. A última contém “cat” como trecho correspondente. “coat” tem dois caracteres entre “c” e “t”, então um ponto não pode cobrir ambos.

Use âncoras para restringir posições. ^ marca o início de uma linha e $ o fim:

PadrãoO que exige
^cUma linha que começa com “c”
t$Uma linha que termina com “t”
^c.t$Exatamente “c”, um caractere e depois “t”
^$Uma linha vazia

grep '^c.t$' words.txt exibe apenas “cat” e “cut”. Ancorar ambas as extremidades exclui uma linha mais longa como “scat”.

Escolher um caractere de um conjunto

Uma expressão entre colchetes corresponde a um caractere. [ao] significa “a” ou “o”, então 'c[ao]t' corresponde à parte “cat” de “cat” e “scat”. [0-9] descreve um dígito. Um acento circunflexo imediatamente após o colchete de abertura nega o conjunto: 'c[^a]t' corresponde a “cut”, mas não a “cat”. Nessa posição, o circunflexo exclui um caractere; ele não marca o início de uma linha.

Classes nomeadas descrevem categorias na configuração de idioma atual. [[:digit:]] seleciona um dígito, [[:alpha:]] uma letra, [[:alnum:]] uma letra ou dígito, e [[:upper:]] ou [[:lower:]] uma letra no formato indicado, maiúsculo ou minúsculo. [[:space:]] inclui espaços, tabulações e outros caracteres de espaço em branco. Mantenha os dois pares de colchetes: o nome da classe fica dentro da expressão externa do conjunto.

Repetir o item anterior

* significa zero ou mais ocorrências do item imediatamente anterior. 'ca*t' pode corresponder a “ct”, “cat” ou “caat”. Também corresponde a “act” porque essa linha contém “ct”, usando zero ocorrências de “a”. Para encontrar qualquer sequência de caracteres, combine ponto e asterisco como .*.

'^c.*t$' corresponde a “cat”, “cart”, “coat” e “cut” na lista de palavras. Um caractere curinga de nome de arquivo e uma expressão regular usam regras diferentes para o asterisco: o padrão de shell *.txt descreve nomes terminados em “.txt”, mas a expressão regular para essa terminação é '\.txt$'.

Tornar literal um caractere especial

Uma barra invertida pode remover um significado especial. \. corresponde a um ponto literal, \* a um asterisco e \[ a um colchete de abertura. [.] também seleciona um ponto literal. grep '\.conf$' file seleciona linhas terminadas em “.conf”.

Uma busca em configuração pode remover comentários simples e linhas vazias com grep -v '^#' app.conf | grep -v '^$'. O primeiro teste reconhece comentários apenas quando “#” é o primeiro caractere. A sintaxe básica padrão trata ?, +, chaves, | e parênteses sem escape como caracteres comuns. O grep do GNU aceita formas de operador com barra invertida; grep -E fornece a sintaxe estendida sem essas barras invertidas.

Principais conclusões

  • grep busca um trecho correspondente, a menos que âncoras exijam a linha inteira.
  • . corresponde a um caractere; ^ e $ ancoram o início e o fim.
  • Uma expressão entre colchetes seleciona um caractere; [^a] exclui “a”.
  • Classes nomeadas como [[:digit:]] exigem os dois pares de colchetes.
  • * repete o item anterior zero ou mais vezes; .* corresponde a uma sequência de caracteres.
  • Use \. ou [.] para um ponto literal.

4.3 Usar expressões regulares estendidas com grep -E

As expressões regulares estendidas acrescentam formas úteis de expressar partes opcionais, grupos repetidos e alternativas. Use grep -E para que o padrão seja lido nessa sintaxe. O ponto, as âncoras, os conjuntos e o asterisco mantêm seus significados anteriores.

Contar repetições

Um operador vem após o item que modifica. Esse item pode ser um caractere, uma expressão entre colchetes ou um grupo:

OperadorNúmero de ocorrências
?Zero ou uma
+Uma ou mais
{n}Exatamente n
{n,}Pelo menos n
{n,m}De n a m

'logs?' corresponde a “log” e “logs”: apenas o “s” é opcional. 'ca+t' exige pelo menos um “a”, então corresponde a “cat” e ao trecho correspondente em “scat”, mas não a “ct” dentro de “act”. Omitir -E transforma um ponto de interrogação ou sinal de mais sem escape em texto literal na sintaxe básica.

Para um código inteiro de duas letras maiúsculas e quatro dígitos, use:

grep -E '^[A-Z]{2}[0-9]{4}$' codes.txt

“AB1234” e “QZ0042” correspondem. “A12345” tem apenas uma letra inicial, “ab1234” usa minúsculas e “XY98765” tem um dígito extra. As duas âncoras impedem que um trecho de aparência válida dentro de um código mais longo seja aceito. Acrescentar -i também permitiria o código em minúsculas.

Agrupar alternativas

| indica uma alternativa dentro de um padrão estendido. 'cat|cut' busca qualquer uma das duas palavras em qualquer lugar de uma linha. Parênteses definem os limites de um grupo: 'c(a|o)t' escolhe “a” ou “o” entre “c” e “t”. Um quantificador seguinte se aplica ao grupo inteiro, então '(ab)+' corresponde a uma ou mais cópias de “ab”.

Mantenha o padrão entre aspas. Em grep -E cat|cut words.txt, o shell interpreta a barra vertical sem aspas como um pipe entre comandos. Em grep -E 'cat|cut' words.txt, ele entrega esse caractere ao grep como parte de um único padrão.

Exibir correspondências em vez de linhas completas

-o exibe apenas os trechos correspondentes, um por linha de saída. O comando abaixo extrai um formato de números separados por pontos de uma linha mais longa:

grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' server.log

A parte entre parênteses é composta por um a três dígitos seguidos de um ponto literal; {3} repete essa parte três vezes. A parte final acrescenta um a três dígitos. Ele extrai “10.0.0.7” de uma linha que o contém, mas também aceita “999.999.999.999”. Encontrar um formato correspondente não verifica se cada número está dentro do intervalo válido de um endereço.

Remover linhas vazias e de comentário juntas

grep -Ev '^[[:space:]]*(#|$)' app.conf seleciona configurações ativas. Leia o padrão em ordem: comece no início, permita espaços em branco e depois encontre “#” ou o fim da linha. Assim, ele reconhece comentários indentados e linhas compostas apenas por espaços em branco, além de linhas vazias. -v mantém as linhas que não se encaixam nessa descrição, como “port=8080”. O nome antigo de comando egrep é considerado obsoleto no grep do GNU; use grep -E.

Principais conclusões

  • grep -E habilita ?, +, chaves, | e parênteses sem escape como operadores.
  • Quantificadores se aplicam ao caractere, conjunto ou grupo anterior.
  • Use âncoras ao redor de um padrão quando o registro inteiro precisar corresponder a ele.
  • | fornece alternativas e parênteses as agrupam; coloque o padrão entre aspas.
  • -o exibe cada trecho correspondente, não a linha inteira.
  • Uma expressão regular que encontra um formato ainda pode aceitar valores inválidos no sistema real.
5

Localizar arquivos por nome, tipo, tamanho e tempo desde a modificação

Uma busca de arquivo pergunta onde um item está; uma busca de texto pergunta o que há dentro dele. Comece uma busca de arquivo na pasta correta e depois restrinja-a por nome, tipo, tamanho ou tempo desde a modificação. Você pode passar os caminhos correspondentes a outro comando sem dividir nomes que contêm espaços. Uma busca atual na árvore de diretórios e uma consulta rápida a um banco de dados têm vantagens diferentes. Antes de aplicar uma ação a muitas correspondências, inspecione a seleção e entenda quando a ação é executada.

5.1 Pesquisar na árvore de diretórios com find

find percorre uma árvore de diretórios e testa os itens que encontra. Primeiro escolha a pasta inicial: find project exibe o próprio project e as entradas abaixo dele. Acrescentar testes restringe a seleção.

Encontrar nomes, caminhos e tipos

find project -name '*.txt' seleciona nomes terminados em “.txt” em qualquer lugar abaixo da pasta inicial. Coloque o caractere curinga entre aspas para que o shell o passe sem alterações. -name diferencia maiúsculas de minúsculas, então “Guide.TXT” precisa de -iname '*.txt' para uma correspondência sem essa distinção.

O padrão deve corresponder ao nome inteiro do item, sem suas pastas pai. -name 'guide' não corresponde a “guide.txt”; -name 'guide*' corresponde. Use -path '*/src/*' quando a parte referente à pasta for relevante. find exibe na ordem do percurso, então acrescente | sort quando quiser caminhos ordenados.

-type f seleciona arquivos comuns, -type d diretórios e -type l links simbólicos. find project -type f -name '*.txt' exige que tanto o teste de tipo quanto o de nome sejam satisfeitos. Um diretório chamado “notes.txt” falha no teste de tipo mesmo que seu nome corresponda.

Entender comparações de tamanho

-size compara um tamanho após arredondá-lo para cima até a unidade selecionada. c significa bytes, k significa kibibytes de 1.024 bytes, M significa mebibytes de 1.048.576 bytes e G significa gibibytes. Um sinal de mais no início significa maior que, um sinal de menos significa menor que e a ausência de sinal significa igual ao número especificado de unidades.

Para -size +100M, o tamanho arredondado deve exceder 100 unidades de MiB. Um arquivo um byte maior que 100 MiB é arredondado para 101 unidades e corresponde. Um arquivo não vazio menor que 1 MiB é arredondado para uma unidade, então -size -1M encontra apenas arquivos vazios. Use um teste em bytes para um limite exato em bytes ou uma unidade menor para um intervalo útil de arquivos pequenos.

Testar o tempo e limitar a profundidade

-mtime usa períodos completos de 24 horas desde a modificação. -mtime -7 seleciona itens modificados há menos de sete dias. -mtime +30 seleciona tempos com mais de 30 períodos completos: pelo menos 31 dias. -mmin -30 usa minutos para alterações recentes. -user alice seleciona um proprietário, e -empty seleciona arquivos ou diretórios vazios.

Para examinar a pasta inicial e suas entradas imediatas sem entrar em subpastas, use find project -maxdepth 1 -type f. Coloque -maxdepth antes dos testes.

Combinar testes e preservar padrões

Testes escritos lado a lado significam E. -o significa OU, como em find project -name '*.txt' -o -name '*.md'. ! -name '*.c' nega um teste de nome. Para uma seleção simples, mantenha clara a relação entre os testes antes de acrescentar ações.

Um caractere curinga sem aspas é expandido pelo shell na pasta atual. Se apenas notes.txt corresponder ali, find . -name *.txt torna-se uma busca por esse único nome, deixando de encontrar outros arquivos de texto. Com várias correspondências locais, o comando pode falhar porque nomes adicionais aparecem dentro da expressão de teste.

Uma busca em pastas protegidas pode informar “Permission denied”. 2>/dev/null oculta esses erros, mas não torna pesquisáveis as pastas que não podem ser lidas. find verifica a árvore durante a execução; um sistema de arquivos em uso ainda pode mudar antes que um comando posterior use os caminhos retornados.

Principais conclusões

  • find percorre a partir de um caminho inicial e exibe itens que passam em seus testes.
  • Coloque caracteres curinga de nome entre aspas; -name testa o nome inteiro e -path testa o caminho completo.
  • Use -type f, d ou l para arquivos comuns, diretórios ou links simbólicos.
  • Testes de tamanho arredondam para cima antes da comparação; -size -1M seleciona apenas arquivos vazios.
  • -mtime +30 começa em 31 dias completos, enquanto -mmin usa minutos.
  • Testes adjacentes significam E, -o significa OU e ! nega um teste.

5.2 Executar ações nos arquivos encontrados e usar buscas mais rápidas

Depois de selecionar arquivos, você pode fornecer seus caminhos a outro comando. Manter a seleção e a ação na mesma expressão find evita que espaços dentro dos nomes de arquivo sejam tratados como separadores entre nomes.

Executar um comando em cada correspondência

A ação -exec command {} \; executa o comando uma vez por item correspondente. find substitui {} pelo caminho desse item. Por exemplo:

find project -name 'main.c' -exec wc -l {} \;

Se a correspondência for project/src/main.c, isso executa wc -l project/src/main.c. O ponto e vírgula escapado encerra a ação. A barra invertida impede que o shell use o ponto e vírgula para encerrar primeiro o comando inteiro do shell.

Use {} + para passar lotes de caminhos a menos execuções do comando:

find notes -type f -name '*.txt' -exec grep -l 'TODO' {} +

grep recebe os caminhos dos arquivos selecionados como argumentos e lista os que contêm “TODO”. Ambas as formas preservam um caminho como “notes/team plan.txt” como um único argumento. A forma com + reduz o trabalho de inicialização quando muitos arquivos correspondem.

Combinar seleção de arquivos com seleção de texto

find testa propriedades dos arquivos; grep examina o conteúdo. Acrescente -mtime -7 antes da ação para pesquisar apenas arquivos de texto modificados recentemente:

find notes -type f -name '*.txt' -mtime -7 -exec grep -l 'TODO' {} +

Primeiro, os testes de nome, tipo e tempo desde a modificação selecionam os arquivos. Depois, grep pesquisa seu texto. grep -r sozinho pode pesquisar o conteúdo de uma árvore, mas não substitui esses testes de propriedades de arquivo.

Aplicar a exclusão somente após verificar a seleção

-delete remove correspondências sem confirmação ou possibilidade de desfazer. Primeiro execute a seleção sem uma ação de exclusão e leia os caminhos. Só então acrescente -delete ao final, como em find /tmp/build -type f -name '*.tmp' -delete. Para uma solicitação de confirmação por item, -ok rm {} \; pergunta antes de executar o comando de remoção.

As ações são executadas à medida que a expressão é avaliada. Colocar -delete antes de -name '*.tmp' permite que a exclusão aconteça antes que esse teste de nome possa restringi-la. Um teste posterior não pode proteger um item de uma ação já realizada.

Escolher uma busca mais rápida quando for adequada

locate guide.txt pesquisa um índice de caminhos armazenados que contêm “guide.txt”. Ele pode responder rapidamente sem percorrer o disco. Como o banco de dados é atualizado periodicamente, um arquivo novo pode estar ausente ou um caminho excluído pode permanecer. updatedb reconstrói o índice; uma atualização de todo o sistema geralmente precisa de permissões de administrador. Algumas distribuições exigem um pacote opcional como plocate.

which grep procura um arquivo de programa executável nas pastas de PATH, geralmente informando /usr/bin/grep. Ele não descreve todas as formas pelas quais o Bash resolve um comando. type echo, por exemplo, pode identificar um comando interno mesmo quando também existe um programa externo chamado “echo”. Use type commandname para a interpretação do Bash, find para uma busca atual na árvore e locate para uma busca rápida de nome no índice.

Principais conclusões

  • -exec command {} \; executa uma vez por caminho; {} + agrupa caminhos em lotes.
  • Use find para propriedades de arquivo e grep para conteúdo, combinando-os quando necessário.
  • Visualize as correspondências para exclusão e depois coloque -delete após os testes que restringem a seleção.
  • locate pesquisa um índice que pode estar desatualizado.
  • which encontra arquivos executáveis em PATH; type explica como o Bash resolve comandos.
6

Editar arquivos de texto no nano e no vi

Editores de terminal permitem alterar anotações e arquivos de configuração durante uma sessão remota ou em um sistema sem área de trabalho gráfica. O nano permite digitar imediatamente e mostra atalhos na parte inferior da tela. O vi atribui funções diferentes às teclas em modos diferentes, então mudar de modo faz parte da edição. Pratique abrir, encontrar texto, fazer uma pequena alteração e salvar ou sair de forma consciente; essas etapas são tão importantes quanto conhecer um comando de exclusão.

6.1 Editar e salvar um arquivo no nano

nano notes.txt abre texto em um editor de terminal. Você pode navegar com as teclas de seta e digitar diretamente no texto. Se o arquivo não existe, o nano inicia um buffer vazio, o texto de trabalho mantido na memória; ao salvar, o arquivo é criado no disco.

Ler os rótulos dos atalhos

As linhas inferiores mostram combinações de teclas. ^ significa Ctrl, então ^X significa Ctrl+X. M- significa Meta, geralmente Alt, então M-U significa Alt+U. Ctrl+G abre a ajuda. Esses rótulos descrevem teclas a pressionar juntas, não caracteres a digitar no arquivo.

Fazer e salvar uma pequena alteração

Para alterar “port=8080” para “port=9090” em app.conf:

  1. Execute nano app.conf.
  2. Pressione Ctrl+W, digite “8080” e pressione Enter.
  3. Na correspondência, exclua os quatro dígitos e digite “9090”.
  4. Pressione Ctrl+O e depois Enter para confirmar o nome do arquivo e salvar.
  5. Pressione Ctrl+X para sair.

De volta ao shell, grep 'port' app.conf deve mostrar “port=9090”. Isso verifica o arquivo salvo, não apenas o que estava visível no editor.

Ctrl+O é Gravar (Write Out), não um comando para abrir arquivos. Ctrl+R lê o conteúdo de outro arquivo para o buffer atual na posição do cursor. Confundir essas ações pode inserir texto indesejado no arquivo que você está editando.

Buscar, substituir e navegar

Ctrl+W busca texto. Alt+G vai para um número de linha solicitado, útil quando uma mensagem de erro identifica uma linha específica. Ctrl+C mostra a linha e a coluna atuais.

Alt+R, também disponível como Ctrl+, inicia a substituição. Digite o texto a encontrar e depois seu substituto. Para cada correspondência, responda Y para substituir ou N para ignorar; A substitui todas. Escolher substituições individualmente ajuda quando os mesmos dígitos aparecem em várias configurações e apenas uma deve mudar.

Mover texto e desfazer alterações
AtalhoAção
Ctrl+KRecortar a linha atual inteira
Ctrl+UColar o texto recortado na posição do cursor
Alt+AIniciar a marcação de uma seleção
Alt+U / Alt+EDesfazer / refazer

Pressionar Ctrl+K repetidamente reúne linhas consecutivas. Com uma seleção marcada, Ctrl+K recorta o texto marcado em vez da linha inteira. Ctrl+U então insere esse texto onde o cursor está. Desfazer é útil imediatamente após um recorte ou uma substituição acidental.

Sair de forma consciente

Ctrl+X sai. Se o buffer tiver alterações não salvas, o nano pergunta se deve salvá-lo. Y salva, seguido de Enter para confirmar o nome; N sai sem salvar essas alterações; Ctrl+C cancela a saída e retorna à edição. Responder N é uma decisão de descartar o trabalho, não uma forma de continuar editando.

nano -l app.conf mostra números de linha, e nano +12 app.conf começa na linha 12. Se o salvamento falhar por falta de permissão, o buffer editado não terá sido salvo nesse caminho. Arquivos de sistema exigem permissões adequadas, por exemplo, sudo nano /etc/hosts quando uma alteração autorizada do sistema precisa de acesso de administrador. Para praticar, use um arquivo em sua própria pasta.

Principais conclusões

  • O nano aceita texto digitado imediatamente; um novo arquivo é criado ao ser salvo.
  • ^ significa Ctrl e M- geralmente significa Alt nos rótulos de atalhos.
  • Ctrl+O e Enter salvam; Ctrl+X sai e pergunta sobre alterações não salvas.
  • Ctrl+W busca, Alt+R substitui e Alt+G vai para uma linha.
  • Ctrl+K recorta, Ctrl+U cola e Alt+U desfaz.

6.2 Trabalhar nos modos do vi

vi notes.txt abre um editor de terminal no modo normal. Nesse modo, uma tecla como x é um comando. Para digitar texto, primeiro entre no modo de inserção. Em muitos sistemas Linux, vi inicia o Vim ou outro editor compatível com vi.

Acompanhar o modo atual
ModoFunçãoComo entrar
NormalNavegar, excluir, copiar e emitir comandosEsc
InserçãoDigitar texto no bufferi, a, o ou outro comando de inserção
Linha de comandoInserir comandos como o de salvar: a partir do modo normal

O Vim mostra “-- INSERT --” durante a inserção. Esc retorna ao modo normal. A partir do modo normal, i insere antes do cursor e a depois dele. I começa antes do primeiro caractere não branco da linha, preservando a indentação; A acrescenta no fim. o abre uma linha abaixo e O uma linha acima.

Navegar sem digitar texto

No modo normal, h, j, k e l movem para a esquerda, para baixo, para cima e para a direita. As teclas de seta também funcionam. w vai para a próxima palavra, 0 para o início da linha e $ para seu fim. G vai para a última linha. 1G vai para a primeira; o Vim também oferece gg. Um número antes de G seleciona uma linha, então 12G vai para a linha 12. :12 e Enter fazem o mesmo. Contagens também repetem movimentos: 5j desce cinco linhas.

Editar a partir do modo normal

x exclui o caractere sob o cursor. dd recorta uma linha; 3dd recorta três linhas. yy copia uma linha. Para texto de linhas inteiras, p cola abaixo da linha atual e P acima dela. Para texto de caracteres, p cola depois do cursor e P antes dele.

cw substitui o restante da palavra atual e entra no modo de inserção. r seguido de um caractere substitui apenas um caractere. u desfaz uma alteração; Ctrl+R do Vim a refaz. Um ponto . repete a última alteração.

Encontrar e alterar uma configuração

Para substituir “8080” por “9090” em app.conf, execute vi app.conf, depois digite /8080 e Enter. No primeiro “8”, digite cw, digite “9090” e pressione Esc. Digite :wq e Enter para salvar e sair.

Busque para trás com ?text e Enter. n repete a direção atual da busca e N a inverte. As buscas aceitam expressões regulares. Para substituir todas as ocorrências em um arquivo, :%s/8080/9090/g usa % para todas as linhas e g para todas as ocorrências em cada linha. :set number mostra números de linha durante a edição.

Salvar ou sair intencionalmente

A partir do modo normal, :w e Enter salvam; :w newname.txt salva com um novo nome. :q sai apenas se não houver alterações não salvas que impeçam a saída. :wq, :x ou ZZ salva e sai. :q! descarta alterações não salvas e sai.

Se digitar mover o cursor ou excluir texto inesperadamente, pressione Esc para estabelecer o modo normal e depois use u para desfazer edições indesejadas antes de continuar. Entre no modo de inserção antes de digitar o texto de substituição. Ao encerrar uma tentativa de edição, escolha se deseja salvar ou descartar; o ponto de exclamação em :q! autoriza o descarte do trabalho não salvo.

Principais conclusões

  • O vi inicia no modo normal; entre no modo de inserção para digitar e pressione Esc para voltar.
  • i, a, o e suas formas maiúsculas escolhem onde a inserção começa.
  • dd recorta uma linha, yy copia e p coloca texto de linha inteira abaixo ou texto de caracteres depois do cursor.
  • u desfaz e . repete a última alteração.
  • /text busca para a frente; n repete e N inverte a direção da busca.
  • :wq salva e sai; :q! descarta alterações não salvas e sai.

Exercícios resolvidos de Pipes e redirecionamento no Linux

6 Lições Interativas

1

Ler um arquivo sem perder sua posição

10 passos
Escolher um comando de visualização, navegar em um paginador e selecionar uma parte precisa de um arquivo.
  1. 1
    IntroduçãoEscolha quanto texto visualizar

    Um terminal pode mostrar um arquivo inteiro, uma tela por vez ou apenas uma parte selecionada. A escolha altera a facilidade de encontrar o que importa.

    Use uma anotação curta para aprender cat e depois passe para less com um arquivo longo demais para caber na tela. Por fim, use head e tail quando souber qual parte precisa. Esses comandos leem texto sem editar o arquivo armazenado.

  2. 2
    ExemploConcatene duas anotações curtas

    a.txt contém “a” e “b” em linhas separadas. b.txt contém “c d”. Execute cat -n a.txt b.txt.

    A saída tem três linhas numeradas, nessa ordem. A numeração continua do primeiro arquivo para o segundo; os números são acrescentados apenas à saída. Para salvar o texto original concatenado sem numeração, execute cat a.txt b.txt > ab.txt.

  3. 3
    ExplicaçãoAbra uma visualização de leitura

    Execute less /etc/services para ler um arquivo longo uma tela por vez. O programa mantém a visualização aberta e aguarda teclas de navegação.

    Espaço avança uma tela, b volta e as teclas de seta percorrem as linhas. g vai para a primeira linha; G para a última. Pressione q para fechar a visualização e retornar ao shell. A ausência do prompt do shell é normal enquanto o paginador está aberto.

  4. 4
    ExemploBusque e continue

    No less, digite /ssh e pressione Enter para buscar “ssh” para a frente. Pressione n para a próxima correspondência nessa direção ou N para ir na direção oposta.

    Uma busca para trás começa com ?ssh. Após essa busca, n continua para trás. A direção vem da busca que você iniciou. less -N file acrescenta números de linha se você precisar anotar a localização de uma correspondência.

  5. 5
    DesafioEncontre a correspondência anterior

    Você buscou “listen” para a frente em um arquivo longo com less. Você quer a correspondência anterior e depois quer sair do paginador. Quais teclas deve pressionar?

    ---reveal---

    Pressione N para ir na direção oposta à busca para a frente e depois q para sair. O n minúsculo continuaria para a frente. Sair é o que restaura o prompt do shell; chegar a uma correspondência ou ao fim do arquivo não fecha o paginador.

  6. 6
    ExplicaçãoEscolha uma contagem ou uma linha inicial

    head -n 4 file exibe as primeiras quatro linhas. tail -n 4 file exibe as últimas quatro. Sem -n, cada um mostra dez linhas por padrão.

    Um sinal de mais muda a função do tail: tail -n +4 file começa na linha 4 e exibe tudo a partir dela. Para um arquivo com uma linha de cabeçalho, tail -n +2 file remove esse cabeçalho. Ele mantém todos os registros de dados, não apenas os dois finais.

  7. 7
    ExemploSelecione as linhas de 11 a 20

    Suponha que um arquivo contenha os números de 1 a 100, um por linha. Comece com head -n 20 numbers.txt, que mantém de 1 a 20.

    Acrescente | tail -n 10. As últimas dez linhas da entrada selecionada vão de 11 a 20. Ambas as extremidades contam, então esse intervalo contém dez linhas. Pedir onze linhas ao tail também incluiria a linha 10, deslocando o início para trás.

  8. 8
    DesafioEscolha outro intervalo no meio

    Um arquivo tem pelo menos 17 linhas. Escreva um encadeamento usando head e tail que exiba as linhas de 12 a 17, incluindo ambas as extremidades.

    ---reveal---

    Use head -n 17 file | tail -n 6. Primeiro mantenha as linhas 1–17 e depois as últimas seis delas: 12, 13, 14, 15, 16 e 17. Usar uma contagem de cinco omitiria a linha 12, pois as extremidades estão incluídas no intervalo solicitado.

  9. 9
    DesafioInspecione o texto mais recente e continue acompanhando

    Você precisa ver as entradas mais recentes de um arquivo longo de aplicativo e continuar acompanhando a chegada de novas entradas. Qual comando é adequado e como você sai dele?

    ---reveal---

    Use tail -f app.log e depois Ctrl+C quando terminar. tail sem opções mostraria o final atual e sairia. tail -F é útil quando o programa substitui o arquivo durante a rotação, pois acompanha o nome do arquivo mesmo após a substituição.

  10. 10
    RecapitulaçãoUse a visualização adequada à tarefa

    Para um arquivo curto inteiro, use cat; para navegar e buscar, abra less. Um paginador permanece aberto até você sair dele.

    Use head e tail para o início, o fim ou um intervalo no meio. Leia um sinal de mais na contagem de linhas do tail como uma posição inicial. Para uma visualização ao vivo, acompanhe o texto acrescentado com tail -f e pare com Ctrl+C. A seleção também funciona quando o texto chega por um pipe.

2

Acompanhar entrada, resultados e erros

11 passos
Conectar arquivos a fluxos padrão e acompanhar a ordem dos redirecionamentos do shell.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoDesenhe três caminhos separados
  2. 2
    ExplicaçãoNomeie os fluxos padrão
  3. 3
    ExemploForneça os mesmos dados por outro caminho
  4. 4
    DesafioConclua a entrada pelo teclado
  5. 5
    ExemploForneça várias linhas abaixo de um comando
  6. 6
    ExplicaçãoEscolha entre substituição e acréscimo
  7. 7
    ExemploCombine resultados e diagnósticos
  8. 8
    DesafioInverta as conexões
  9. 9
    DicaMantenha a entrada intacta
  10. 10
    DesafioConte a entrada e separe um diagnóstico
  11. 11
    RecapitulaçãoAcompanhe a preparação feita pelo shell
3

Construir um relatório de texto útil

14 passos
Inspecionar um encadeamento enquanto ele seleciona uma coluna, agrupa valores, conta-os e salva resultados.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoDê uma tarefa a cada etapa
  2. 2
    ExplicaçãoConecte os dois comandos
  3. 3
    DesafioEscolha um pipe ou um arquivo
  4. 4
    ExplicaçãoSaiba o que o contador mede
  5. 5
    ExemploSepare ordenação de contagem
  6. 6
    DesafioExplique uma duplicata que permanece
  7. 7
    ExplicaçãoSelecione a coluna relevante
  8. 8
    ExemploRemova o rótulo e inspecione os valores
  9. 9
    DesafioVerifique uma suposição sobre o separador
  10. 10
    ExemploAgrupe os valores selecionados
  11. 11
    ExemploOrdene as contagens
  12. 12
    ConexãoGuarde os dados antes da contagem final
  13. 13
    DesafioDiagnostique uma categoria extra
  14. 14
    RecapitulaçãoVerifique o que passa entre as etapas
4

Construir padrões que correspondam ao texto desejado

15 passos
Escolher opções do grep e depois construir padrões básicos e estendidos um operador por vez.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoDecida o que conta como correspondência
  2. 2
    ExplicaçãoEscolha um relatório de busca
  3. 3
    ExemploDiferencie uma palavra de uma linha
  4. 4
    DesafioBusque um rótulo exato de versão
  5. 5
    DicaPesquise uma pasta ou faça uma consulta silenciosa
  6. 6
    ExplicaçãoPosicione uma correspondência dentro da linha
  7. 7
    ExemploSelecione um caractere de um conjunto
  8. 8
    Ideia-chavePermita zero ocorrências
  9. 9
    DesafioEncontre uma terminação literal de nome de arquivo
  10. 10
    ExplicaçãoAtive operadores estendidos
  11. 11
    ExemploVerifique um código inteiro
  12. 12
    ExemploAgrupe uma escolha ou uma parte repetida
  13. 13
    DesafioExtraia trechos e examine seus limites
  14. 14
    DesafioMantenha apenas configurações ativas
  15. 15
    RecapitulaçãoVerifique o padrão e o relatório separadamente
5

Selecionar arquivos antes de executar ações neles

12 passos
Escolher uma raiz de busca, aplicar testes de arquivo e passar caminhos completos ao próximo comando.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoSepare nomes de conteúdo
  2. 2
    ExplicaçãoEscolha a pasta inicial
  3. 3
    ExemploCombine tipo com nome
  4. 4
    DesafioPreserve o caractere curinga para find
  5. 5
    ExplicaçãoCompare unidades de tamanho arredondadas
  6. 6
    DesafioInterprete o limite em dias
  7. 7
    ExplicaçãoPasse caminhos como argumentos
  8. 8
    ExemploPesquise apenas o conteúdo selecionado
  9. 9
    DicaColoque uma ação destrutiva após seus testes
  10. 10
    ExplicaçãoEscolha um índice ou uma busca de comando
  11. 11
    DesafioEscolha uma verificação atual de conteúdo
  12. 12
    RecapitulaçãoAjuste a busca às informações necessárias
6

Fazer e salvar uma pequena edição no terminal

13 passos
Editar uma configuração no nano e no vi e depois escolher se as alterações de trabalho serão salvas ou descartadas.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoDiferencie o texto de trabalho do texto salvo
  2. 2
    ExplicaçãoLeia os controles do nano
  3. 3
    ExemploEncontre e substitua um valor
  4. 4
    DesafioMova uma linha e recupere-se de um erro
  5. 5
    DicaLide com a pergunta ao sair
  6. 6
    ExplicaçãoEntre no modo de digitação do vi
  7. 7
    ExemploVá até o texto necessário
  8. 8
    ExemploAltere a configuração no vi
  9. 9
    DesafioCole o tipo de texto que você copiou
  10. 10
    DicaFaça pequenas edições e desfaça
  11. 11
    DesafioEscolha se a edição no vi deve ser mantida
  12. 12
    DesafioCompare duas edições não concluídas
  13. 13
    RecapitulaçãoTermine salvando ou descartando de forma deliberada

Questões de Pipes e redirecionamento no Linux

50 Questões de Prática em 5 conjuntos

Conjunto 1: Escolher comandos e interpretar correspondências10 Questões de Prática

Questão 1 de 10

Após buscar para trás com ?queue no less, o que n faz?
  1. Encontra a próxima correspondência para a frente.
  2. Encontra a próxima correspondência para trás.
  3. Avança para a próxima tela.
  4. Vai para a primeira linha do arquivo.
Mostrar respostaOcultar resposta
Resposta: B
A tecla n repete a busca na direção estabelecida, que é para trás após ?queue. N maiúsculo inverteria essa direção e buscaria para a frente. As teclas significam próxima ou anterior em relação à busca, não permanentemente para baixo ou para cima no arquivo.

Questão 2 de 10

labels.txt tem oito linhas terminadas com caracteres de nova linha. Como a saída de wc -l < labels.txt difere da saída de wc -l labels.txt?
  1. Ela omite a contagem, mas mantém o nome do arquivo.
  2. Ela exibe uma contagem diferente sem nome.
  3. Ela acrescenta uma linha de total após a mesma contagem.
  4. Ela omite o nome do arquivo, mas mantém a contagem 8.
Mostrar respostaOcultar resposta
Resposta: D
Com <, o shell abre o arquivo e fornece a wc um fluxo de entrada anônimo, então wc exibe a contagem sem o nome original. Um argumento com nome de arquivo permite que wc exiba ambos. As duas formas contam os mesmos oito caracteres de nova linha; o redirecionamento de entrada não altera o conteúdo do arquivo.

Questão 3 de 10

Em um terminal recém-aberto, um comando escreve resultados em stdout e diagnósticos em stderr. Para onde vai cada um em command 2>&1 > result.txt?
  1. Resultados para o arquivo; diagnósticos para o terminal.
  2. Resultados para o terminal; diagnósticos para o arquivo.
  3. Ambos os fluxos para o arquivo; nenhum para o terminal.
  4. Ambos os fluxos para o terminal; nenhum para o arquivo.
Mostrar respostaOcultar resposta
Resposta: A
O primeiro redirecionamento copia a conexão atual de stdout com o terminal para stderr. O segundo move apenas stdout para o arquivo, deixando stderr ligada ao destino anterior. Capturar ambos os fluxos no arquivo exige a ordem inversa, > result.txt 2>&1.

Questão 4 de 10

teams.csv contém “name,team”, “Uma,Blue”, “Zed,Gold”, “Ivo,Blue” e “Moe,Gold”, com caracteres de nova linha ao final. O que cut -d, -f2 teams.csv | sort | uniq | wc -l informa?
  1. 2
  2. 4
  3. 3
  4. 5
Mostrar respostaOcultar resposta
Resposta: C
A coluna selecionada contém o cabeçalho “team”, além de “Blue” e “Gold”. A ordenação e uniq deixam três linhas distintas, então a contagem é 3. Contar apenas as duas equipes exigiria remover o cabeçalho antes de eliminar duplicatas; nenhuma etapa desse encadeamento o remove.

Questão 5 de 10

Qual comando busca em build.txt o texto literal “v3.8”, incluindo o ponto literal?
  1. grep -F 'v3.8' build.txt
  2. grep -E 'v3.8' build.txt
  3. grep -i 'v3.8' build.txt
  4. grep -w 'v3.8' build.txt
Mostrar respostaOcultar resposta
Resposta: A
A opção -F trata cada caractere do padrão como texto literal, então o ponto deve ser um ponto de fato. Com a interpretação de expressão regular, . pode corresponder a outro caractere, como o “x” em “v3x8”. As aspas protegem o padrão do shell, mas não removem seus significados de expressão regular.

Questão 6 de 10

As linhas são “dog”, “dig”, “drag” e “undog”. Quais linhas correspondem a grep '^d.g$' file?
  1. Todos, exceto “drag”.
  2. “dog” e “dig”.
  3. Todos, exceto “undog”.
  4. Todos, exceto “dig”.
Mostrar respostaOcultar resposta
Resposta: B
As âncoras exigem que a linha completa contenha d, um caractere e g. Tanto “dog” quanto “dig” correspondem. “undog” contém um trecho correspondente de três caracteres, mas falha na âncora de início, enquanto “drag” tem dois caracteres centrais onde o único ponto permite apenas um.

Questão 7 de 10

Quais linhas correspondem a grep '^ba*t$' file entre “bt”, “bat”, “baat” e “boat”?
  1. Apenas “bat” e “baat”.
  2. “bat”, “baat” e “boat”.
  3. “bt”, “bat” e “boat”.
  4. “bt”, “bat” e “baat”.
Mostrar respostaOcultar resposta
Resposta: D
O asterisco aplica-se apenas a “a” e permite zero ou mais ocorrências entre b e t. Isso inclui “bt”, “bat” e “baat”. Exigir pelo menos um “a” excluiria incorretamente “bt”, enquanto permitir quaisquer letras no meio aceitaria incorretamente “boat”; o padrão não faz nenhuma dessas coisas.

Questão 8 de 10

Uma árvore notes contém nomes de arquivo com espaços. Você precisa dos nomes dos arquivos .txt modificados recentemente que contêm “REVIEW”. Qual comando aplica as três restrições?
  1. find notes -type f -name '*.txt' -mtime -7 | grep -l 'REVIEW'
  2. find notes -type f -name '*.md' -mtime -7 -exec grep -l 'REVIEW' {} +
  3. find notes -type f -name '*.txt' -mtime -7 -exec grep -l 'REVIEW' {} +
  4. find notes -type f -name '*.txt' -mtime +7 -exec grep -l 'REVIEW' {} +
Mostrar respostaOcultar resposta
Resposta: C
find seleciona arquivos de texto comuns alterados há menos de sete dias e depois passa seus caminhos completos a grep como argumentos. -l lista arquivos cujo conteúdo corresponde. Enviar os caminhos exibidos por find a grep por um pipe pesquisa o texto dos caminhos, enquanto -L selecionaria arquivos sem correspondência no conteúdo.

Questão 9 de 10

Na pergunta de saída “Save modified buffer?” do nano, qual tecla retorna à edição sem sair do editor?
  1. N
  2. Ctrl+C
  3. Y
  4. Ctrl+O
Mostrar respostaOcultar resposta
Resposta: B
Ctrl+C cancela a saída e retorna ao buffer atual. N, por sua vez, aceita sair sem salvar, descartando as edições não salvas. Essa pergunta solicita como concluir uma tentativa de saída; ela não pergunta se você quer permanecer no editor.

Questão 10 de 10

No modo normal do vi, você copia uma linha com yy e pressiona p. Onde a linha copiada aparece?
  1. Acima da linha atual.
  2. Depois do cursor dentro da linha.
  3. Antes do cursor dentro da linha.
  4. Abaixo da linha atual.
Mostrar respostaOcultar resposta
Resposta: D
O comando yy copia uma linha inteira, então p a coloca abaixo da linha atual. Colar depois do cursor aplica-se a texto de caracteres, como um caractere excluído, não a uma cópia de linha inteira. P maiúsculo colocaria essa linha copiada acima da linha atual.
Conjunto 2: Ler texto e acompanhar seu fluxo10 Questões de Prática

Salve esta aula para ver todas as respostas e praticar cada conjunto.

Questão 1 de 10

Você está lendo um arquivo longo no less. Qual tecla retorna você ao shell?
  1. g
  2. h
  3. q
  4. n
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 2 de 10

O que tail -n +3 records.txt exibe?
  1. Todas as linhas a partir da linha 3.
  2. Apenas as três linhas finais.
  3. Apenas a linha 3 do arquivo.
  4. Todas as linhas antes da linha 3.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 3 de 10

Os resultados normais de um comando são salvos com > report.txt, mas seus diagnósticos permanecem visíveis. Qual fluxo transporta esses diagnósticos?
  1. Entrada padrão, descritor 0.
  2. Saída padrão, descritor 1.
  3. Saída padrão, descritor 2.
  4. Saída de erro padrão, descritor 2.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 4 de 10

Você quer manter um relatório existente e acrescentar a stdout de um comando ao final dele. Qual redirecionamento faz isso?
  1. > report.txt
  2. >> report.txt
  3. 2> report.txt
  4. < report.txt
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 5 de 10

Um comando exibe cinco linhas de resultados normais e duas linhas de diagnóstico. Qual contagem de linhas command | wc -l informa?
  1. 7
  2. 2
  3. 5
  4. 0
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 6 de 10

Um arquivo contém “18”, “4” e “105”, cada um em sua própria linha. Qual ordem sort -n produz?
  1. 105, 18, 4
  2. 18, 105, 4
  3. 4, 105, 18
  4. 4, 18, 105
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 7 de 10

supplies.txt contém “clip”, “ring”, “clip”, “pad”, “clip”, “ring” e “clip”, cada um terminado por um caractere de nova linha. Quais duas linhas aparecem primeiro em sort supplies.txt | uniq -c | sort -rn | head -n 2, ignorando o preenchimento das contagens?
  1. “4 clip” e depois “2 ring”.
  2. “4 clip” e depois “1 pad”.
  3. “4 ring” e depois “2 clip”.
  4. “1 clip” e depois “1 ring”.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 8 de 10

Um arquivo tem as linhas “FAIL”, “fail”, “failure” e “all clear”. Quantas linhas grep -ic 'fail' file conta?
  1. 1
  2. 3
  3. 2
  4. 4
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 9 de 10

A árvore contém um arquivo comum docs/a.txt, um diretório docs/b.txt e um arquivo comum docs/c.TXT. O que find docs -type f -name '*.txt' seleciona?
  1. Apenas docs/a.txt.
  2. Tanto docs/a.txt quanto docs/b.txt.
  3. Tanto docs/a.txt quanto docs/c.TXT.
  4. Os três caminhos abaixo de docs.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 10 de 10

Você terminou de editar no nano. Qual sequência de teclas salva o buffer atual com o nome exibido?
  1. Ctrl+R e depois Enter.
  2. Ctrl+K e depois Ctrl+U.
  3. Ctrl+O e depois Enter.
  4. Ctrl+X e depois N.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Conjunto 3: Acompanhar encadeamentos e corrigir erros10 Questões de Prática

Salve esta aula para ver todas as respostas e praticar cada conjunto.

Questão 1 de 10

Qual dos tamanhos 0 bytes, 1 byte, 800.000 bytes e 1.048.576 bytes passa no teste -size -1M do find do GNU?
  1. Até 1 byte.
  2. Todos abaixo de 1 MiB.
  3. Todos os quatro tamanhos.
  4. Apenas 0 bytes.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 2 de 10

Um arquivo tem pelo menos 28 linhas. Qual comando exibe exatamente as linhas de 19 a 28?
  1. head -n 28 file | tail -n 9
  2. head -n 19 file | tail -n 10
  3. head -n 28 file | tail -n +19 | head -n 9
  4. head -n 28 file | tail -n 10
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 3 de 10

O que acontece com o conteúdo existente antes de echo done > state.txt escrever sua saída?
  1. Ele permanece antes da nova linha no final.
  2. Ele é removido quando o shell abre o arquivo.
  3. Ele vai para stderr antes de a nova linha ser escrita.
  4. Ele permanece a menos que echo informe uma escrita bem-sucedida.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 4 de 10

parts.txt contém “pin”, “bolt”, “pin”, “nut” e “bolt”, cada um terminado por um caractere de nova linha. O que sort parts.txt | uniq | tee distinct.txt | wc -l faz?
  1. Exibe 5; salva as cinco linhas originais.
  2. Exibe 3; salva apenas a própria contagem.
  3. Exibe 3; salva três nomes distintos.
  4. Exibe 5; salva três nomes distintos.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 5 de 10

runs.txt contém “b”, “a”, “b”, “a” e “a”, cada um em sua própria linha. Qual par de contagem e valor aparece primeiro na saída de uniq -c runs.txt | sort -rn?
  1. 2 a
  2. 3 a
  3. 2 b
  4. 1 b
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 6 de 10

O que cut -d: -f3,1 exibe a partir da linha “Nia:ops:42”?
  1. “42:Nia”
  2. “Nia:42”
  3. “Nia:ops”
  4. “42:ops”
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 7 de 10

Quais linhas completas correspondem a grep -E '^(go)+$' file?
  1. “go” e “gogo”.
  2. “go” e “goo”.
  3. “g” e “go”.
  4. “go” e “gog”.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 8 de 10

Uma linha contém “node=7 node=24 node=301”. Qual saída grep -Eo '[0-9]{1,2}' produz a partir dessa linha?
  1. “7” e “24”, em linhas separadas.
  2. “7”, “24” e “301”, em linhas separadas.
  3. “7”, “24”, “30” e “1”, em linhas separadas.
  4. “7”, “2”, “4”, “3”, “0” e “1”, em linhas separadas.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 9 de 10

Por que locate plan.txt pode mostrar um caminho que foi excluído hoje de manhã?
  1. Ele lê o conteúdo de arquivos excluídos da entrada padrão.
  2. Seu teste de nome ignora o estado atual de todos os diretórios.
  3. Seu banco de dados de caminhos ainda não refletiu a exclusão.
  4. Ele pesquisa PATH antes de verificar o nome solicitado.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 10 de 10

Você está no modo de inserção do vi com alterações que quer manter. Qual sequência salva e sai?
  1. Esc, :wq, Enter.
  2. Esc, :q!, Enter.
  3. Esc, :q, Enter.
  4. Esc, wq, Enter.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Conjunto 4: Diagnosticar processos de trabalho com arquivos e texto10 Questões de Prática

Salve esta aula para ver todas as respostas e praticar cada conjunto.

Questão 1 de 10

No nano, você recorta uma linha acidentalmente e quer restaurá-la revertendo essa ação. Qual atalho faz isso?
  1. Alt+U
  2. Ctrl+U
  3. Ctrl+K
  4. Alt+A
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 2 de 10

Você quer salvar first.txt seguido de second.txt em joined.txt, com os números das linhas de saída continuando entre os dois arquivos de entrada. Qual comando faz isso?
  1. cat -n first.txt second.txt > joined.txt
  2. cat first.txt second.txt > joined.txt
  3. cat -n second.txt first.txt > joined.txt
  4. cat -n first.txt second.txt | wc -l > joined.txt
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 3 de 10

ls -lt produz um cabeçalho “total” seguido de entradas de arquivo. Quantas entradas ls -lt | head -n 6 exibe quando existem pelo menos seis entradas?
  1. 6
  2. 4
  3. 5
  4. 7
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 4 de 10

Ao inserir linhas em sort interativamente, o que sinaliza o fim da entrada no início de uma linha vazia?
  1. Ctrl+C
  2. Ctrl+D
  3. Ctrl+O
  4. Ctrl+W
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 5 de 10

Um comando emite quatro linhas em stdout e uma linha em stderr. O que command 2>&1 | tee combined.txt | wc -l produz?
  1. Exibe 4; salva apenas resultados normais.
  2. Exibe 5; salva apenas a contagem final.
  3. Exibe 4; salva resultados e diagnósticos.
  4. Exibe 5; salva resultados e diagnósticos.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 6 de 10

A linha de entrada é “A B C”, com dois espaços após A. O que cut -d' ' -f2 exibe?
  1. “B”
  2. “C”
  3. Uma linha vazia.
  4. “A”
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 7 de 10

Um arquivo contém “alert alert”, “prealert”, “Alert raised” e “all clear”. O que grep -icw 'alert' file informa?
  1. 2
  2. 1
  3. 3
  4. 4
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 8 de 10

Uma lista contém “x.cfg”, “xXcfg”, “x.cfg.old” e “cfg”. Qual padrão seleciona apenas linhas terminadas com o sufixo literal “.cfg”?
  1. .cfg$
  2. \.cfg
  3. ^\.cfg$
  4. \.cfg$
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 9 de 10

Uma árvore tem os arquivos comuns “old.cfg” (modificado há 30,9 dias), “notes.txt” (há 31,1 dias) e “runtime.cfg” (há 31,1 dias), além do diretório “archive.cfg” (há 31,1 dias). O que find . -type f -name '*.cfg' -mtime +30 seleciona?
  1. Ambos os arquivos “.cfg”.
  2. Apenas “runtime.cfg”.
  3. Todo arquivo de 31,1 dias.
  4. Todo “.cfg” de 31,1 dias.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 10 de 10

Uma linha do vi começa com quatro espaços antes de “enabled=yes”. A partir do modo normal, onde I começa a inserção?
  1. Antes dos quatro espaços, na primeira coluna.
  2. Antes de “enabled”, após os quatro espaços.
  3. Após “enabled=yes”, no fim da linha.
  4. Em uma nova linha vazia acima da configuração.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Conjunto 5: Combinar regras em casos desconhecidos10 Questões de Prática

Salve esta aula para ver todas as respostas e praticar cada conjunto.

Questão 1 de 10

No modo normal do vi, x exclui um caractere. Você então pressiona p. Onde esse caractere é inserido?
  1. Antes do cursor.
  2. Abaixo da linha atual.
  3. Depois do cursor.
  4. Acima da linha atual.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 2 de 10

Um arquivo de dados tem um cabeçalho de uma linha seguido de 30 registros. Qual comando exibe as linhas 14 a 18 do arquivo original após remover o cabeçalho?
  1. tail -n +2 file | head -n 18 | tail -n 5
  2. tail -n +2 file | head -n 17 | tail -n 4
  3. tail -n +2 file | head -n 17 | tail -n 5
  4. tail -n +2 file | head -n 14 | tail -n 5
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 3 de 10

Um comando escreve duas linhas normais e uma linha de diagnóstico. Tanto log.txt quanto err.txt já contêm texto antigo. O que acontece com command >> log.txt 2> err.txt?
  1. As linhas normais substituem log; o diagnóstico é acrescentado a err.
  2. As linhas normais são acrescentadas a log; o diagnóstico substitui err.
  3. Ambos os fluxos são acrescentados a log; err mantém seu texto antigo.
  4. As linhas normais são acrescentadas a err; o diagnóstico substitui log.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 4 de 10

sizes.csv contém “name,size”, “alpha,8”, “beta,110” e “gamma,24”. Qual encadeamento exibe primeiro os dois registros completos de dados com os maiores tamanhos numéricos?
  1. tail -n +2 sizes.csv | sort -t, -k2,2r | head -n 2
  2. tail -n +2 sizes.csv | sort -t, -k2,2n | head -n 2
  3. tail -n +2 sizes.csv | sort -t, -k1,1nr | head -n 2
  4. tail -n +2 sizes.csv | sort -t, -k2,2nr | head -n 2
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 5 de 10

jobs.csv contém “id,zone”, “1,North”, “2,South”, “3,North”, “4,East” e “5,North”. Qual é o primeiro par de contagem e valor resultante de tail -n +2 jobs.csv | cut -d, -f2 | sort | uniq -c | sort -rn?
  1. 3 North
  2. 1 North
  3. 2 North
  4. 1 zone
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 6 de 10

Qual opção curta faz grep exibir os números das linhas de entrada junto às linhas correspondentes?
  1. -c
  2. -n
  3. -l
  4. -o
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 7 de 10

Qual linha corresponde a grep '^r[^ae]d$' file entre “rad”, “red”, “rid” e “road”?
  1. “rad”
  2. “red”
  3. “rid”
  4. “road”
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 8 de 10

Um arquivo de configuração contém “ # memo”, três espaços, “mode=fast” e “x#y=on”, cada um em uma linha separada. O que permanece após grep -Ev '^[[:space:]]*(#|$)' file?
  1. “mode=fast” e “x#y=on”.
  2. Apenas “mode=fast”.
  3. “ # memo” e “mode=fast”.
  4. Três espaços e “x#y=on”.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 9 de 10

Você quer saber como o Bash interpreta um comando, incluindo um possível apelido ou comando interno. Qual comando deve usar para o nome echo?
  1. which echo
  2. locate echo
  3. find . -name echo
  4. type echo
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 10 de 10

Você precisa de arquivos comuns imediatamente dentro de work, sem incluir arquivos de pastas mais profundas. Qual busca faz isso?
  1. find work -maxdepth 1 -type d
  2. find work -maxdepth 1 -type f
  3. find work -maxdepth 2 -type f
  4. find work -maxdepth 0 -type f
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Travou em uma questão sua? Ajuda com Tarefas

Termos-Chave

72 Termos-Chave, cada um com sua definição

A

Acréscimo ao final
Acrescentar ao final é adicionar saída ao fim de um arquivo preservando seu conteúdo existente, usando >> para a saída padrão de um comando.
Comandos repetidos que usam >> report.txt reúnem seus resultados em um arquivo em vez de substituí-lo.
Alternância
A alternância expressa uma escolha entre padrões de expressão regular usando | na sintaxe estendida, muitas vezes com parênteses para limitar o alcance da escolha.
Em ^(east|west)$, ambas as alternativas devem preencher a linha inteira porque compartilham as âncoras.

Â

Âncora
Uma âncora restringe uma correspondência de expressão regular a uma posição, como ^ para o início ou $ para o fim de uma linha em buscas comuns do grep.
Acrescentar ambas as âncoras a d.g exclui uma linha mais longa como “undog”, embora ela contenha “dog”.

B

Buffer
Um buffer é a cópia de trabalho de texto de um editor na memória, que pode conter alterações ainda não gravadas no arquivo em disco.
Se o nano informar um erro de permissão ao salvar, o buffer editado pode diferir do arquivo armazenado.
Busca por texto literal
Uma busca por texto literal trata os caracteres do padrão como texto literal, então pontos e asteriscos perdem seus significados de expressão regular quando grep usa -F.
Use grep -F "v2.4" releases.txt para exigir o ponto literal no rótulo de versão.
Busca recursiva
Uma busca recursiva visita um diretório e seus subdiretórios; grep -r busca texto em arquivos por toda essa árvore de diretórios.
grep -rl TODO notes lista nomes de arquivos correspondentes sem exibir todo o texto correspondente neles.

C

Campo
Um campo é uma parte de um registro separado por delimitadores, numerada a partir de 1 por cut e selecionada de acordo com o delimitador usado nesse registro.
Em “Lena,Oslo,74”, o campo 2 é “Oslo” quando a vírgula é o separador escolhido para a linha.
Campo vazio
Um campo vazio não tem caracteres entre seus separadores, então delimitadores consecutivos podem produzir um campo que se parece com um valor ausente.
Com um delimitador de espaço, “a b” tem um segundo campo vazio entre seus dois espaços.
Canal de comunicação
Um canal de comunicação conecta a saída padrão de um comando à entrada padrão de outro comando, passando dados sem um arquivo intermediário salvo.
Em grep -i error app.log | wc -l, as linhas selecionadas passam para o comando que as conta.
Caractere de nova linha
Um caractere de nova linha marca o fim de uma linha de texto; wc -l conta esses marcadores, então uma linha final sem esse terminador não aumenta o total informado.
Um texto contendo “one”, um caractere de nova linha e depois “two” resulta em uma contagem de 1 se não houver um marcador final.
cat
cat é um comando que exibe o conteúdo de um ou mais arquivos na saída padrão, seguindo a ordem de seus argumentos de arquivo.
Executar cat -n a.txt b.txt numera a saída combinada sem editar nenhum dos arquivos de entrada.
Chave de ordenação
Uma chave de ordenação é o campo ou a parte de uma linha usada para comparação, selecionada com sort -k e interpretada usando o separador escolhido.
A chave -k3,3nr compara apenas o campo 3, numericamente e em ordem inversa, em uma classificação de pontuações.
Classe de caracteres
Uma classe de caracteres é um grupo nomeado, como dígitos, letras ou espaços em branco, usado dentro de uma expressão entre colchetes e vinculado às configurações de idioma.
A expressão completa [[:digit:]] seleciona um dígito; ambos os pares de colchetes são necessários.
Código de saída
Um código de saída é um número que um comando retorna ao shell, como os códigos habituais do grep: 0 para uma correspondência, 1 para nenhuma correspondência ou 2 para um erro.
Uma busca silenciosa com grep -q usa seu código para informar um resultado sem exibir linhas correspondentes.
Concatenação
Concatenação une sequências de texto em ordem, como ao exibir o conteúdo de vários arquivos um após o outro com cat.
Com cat first.txt second.txt > combined.txt, o texto do primeiro arquivo precede o texto do segundo.
Contagem de frequência
Uma contagem de frequência informa quantas vezes cada valor ocorre, sendo geralmente construída pelo agrupamento de linhas iguais com sort e pela contagem de sequências com uniq -c.
Acrescente sort -rn após uniq -c para colocar as maiores contagens primeiro ao inspecionar entradas comuns.
Cópia de texto
A cópia de texto no vi permite colá-lo depois, como yy faz para uma linha inteira sem removê-la do buffer de trabalho.
Use yy seguido de p para duplicar uma linha abaixo de sua posição original no arquivo.
Correspondência de palavra inteira
Uma correspondência de palavra inteira exige que o texto correspondente ocupe uma palavra inteira, embora outras palavras ainda possam aparecer na mesma linha.
grep -w error file corresponde a “error found”, mas rejeita o trecho dentro de “terror”.
cut
cut é um filtro que seleciona campos ou posições fixas de caracteres de cada linha de entrada, preservando as partes selecionadas em sua ordem original.
O comando cut -d: -f1,6 /etc/passwd associa cada nome de conta ao campo de seu diretório pessoal.

D

Data e hora de modificação
A data e hora de modificação registram quando o conteúdo de um arquivo foi alterado pela última vez; -mtime de find testa o tempo decorrido em períodos completos de 24 horas.
Um arquivo alterado há 30,5 dias falha em -mtime +30 porque passaram apenas 30 períodos completos de um dia.
Delimitador
Um delimitador é um separador entre campos, como dois-pontos, vírgula ou tabulação; cut -d seleciona o caractere usado para dividir cada linha.
Para o registro “Mia:ops:41”, um delimitador de dois-pontos torna “ops” o campo 2, independentemente do comprimento da palavra.
Descritor de arquivo
Um descritor de arquivo é um número que identifica uma conexão aberta de entrada ou saída, incluindo 0 para stdin, 1 para stdout e 2 para stderr.
O 2 em 2> errors.txt seleciona o fluxo de erro e deve ficar junto ao operador de redirecionamento.
Dispositivo nulo
O dispositivo nulo, /dev/null, é um arquivo especial que descarta os dados escritos nele, permitindo ocultar deliberadamente um fluxo de saída escolhido.
Acrescentar 2>/dev/null oculta diagnósticos de uma busca de arquivos, incluindo mensagens sobre pastas que não podem ser lidas.
Documento de entrada embutido
Um documento de entrada embutido fornece várias linhas como entrada padrão e termina quando o shell encontra uma linha contendo apenas o delimitador escolhido.
Com cat <<EOF, as linhas inseridas antes do EOF de encerramento são dados, enquanto essa linha final é um marcador.
Duplicação de descritor
A duplicação de descritor conecta um fluxo numerado ao destino atual de outro fluxo, como 2>&1 faz para stderr e stdout.
Em command > all.txt 2>&1, stderr recebe a conexão com o arquivo que stdout já possui.

E

Editor modal
Um editor modal atribui significados diferentes às mesmas teclas em modos diferentes, separando a entrada de texto dos comandos de navegação e edição.
No vi, pressionar “x” exclui um caractere no modo normal, mas digita um “x” no modo de inserção.
Encadeamento de comandos
Um encadeamento de comandos é uma série de comandos unidos por pipes, em que cada etapa recebe dados produzidos pela etapa imediatamente anterior.
Em sort values.txt | uniq | wc -l, a contagem final mede valores distintos agrupados.
Entrada padrão
A entrada padrão é o fluxo de dados de entrada de um comando, de número 0, que o shell pode conectar ao teclado, a um arquivo ou a um pipe.
Em sort < names.txt, o shell conecta o arquivo à entrada padrão do comando antes de executá-lo.
Escape de caracteres
O escape de caracteres usa uma barra invertida para alterar a forma como um caractere especial é interpretado, por exemplo, fazendo um ponto de expressão regular corresponder a um ponto literal em vez de qualquer caractere.
O padrão \.txt$ exige uma terminação literal “.txt”, enquanto .txt$ permite outro caractere antes de “txt”.
Expressão entre colchetes
Uma expressão entre colchetes seleciona um caractere de um conjunto ou intervalo, com um circunflexo inicial dentro do conjunto invertendo quais caracteres são aceitos.
O padrão b[ae]t corresponde a “bat” ou “bet”, enquanto b[^a]t exclui “a” da posição central.
Expressão regular
Uma expressão regular é um padrão que descreve texto correspondente por meio de caracteres literais e operadores para posições, escolhas ou repetições.
O padrão ^web[0-9]$ descreve uma linha inteira contendo “web” seguido de um dígito.
Expressão regular estendida
Uma expressão regular estendida atribui a operadores como ?, +, |, chaves e parênteses seus significados especiais sem barras invertidas.
Use grep -E antes de um padrão agrupado como ^(red|blue)$ para habilitar a alternativa.
Extração de correspondências
A extração de correspondências exibe trechos de texto correspondentes em vez de linhas de entrada inteiras, como a opção -o do grep faz para cada correspondência não vazia.
Se uma linha contém “id=42 id=57”, grep -Eo '[0-9]+' exibe os dois números em linhas separadas.

F

Filtro
Um filtro lê dados da entrada padrão, seleciona-os ou altera-os e escreve um resultado na saída padrão, permitindo seu uso em um encadeamento.
sort, cut e grep atuam como filtros quando recebem texto de um comando anterior.
find
find pesquisa uma árvore de diretórios a partir de caminhos iniciais especificados, testa as propriedades de cada item encontrado e exibe os caminhos selecionados ou executa ações neles.
find notes -type f -name '*.txt' seleciona arquivos comuns com nomes de texto em toda essa árvore de pastas.
find -exec
find -exec executa outro comando nos caminhos selecionados, substituindo {} e usando um ponto e vírgula escapado ou um sinal de mais para encerrar a ação.
A ação -exec wc -l {} + passa lotes de caminhos correspondentes a um comando que conta suas linhas.

G

Gravar
Gravar é a ação de salvar do nano, iniciada com Ctrl+O e concluída pela confirmação do nome do arquivo de destino, normalmente com Enter.
Após alterar uma configuração, use Gravar antes de sair se quiser preservar o novo texto no disco.
grep
grep é um comando de busca de texto que normalmente exibe cada linha de entrada contendo uma correspondência para um padrão, com opções para alterar o relatório.
Use grep -n WARN app.log para mostrar linhas correspondentes junto com suas posições no arquivo.
Grupo
Um grupo de expressão regular coloca uma sequência entre parênteses para que um operador possa atuar sobre ela como um único item ou para que alternativas possam compartilhar o texto ao redor.
A expressão (ab)+ permite “ab” e “abab” porque o sinal de mais repete o grupo completo de dois caracteres.

H

head
head é um filtro que exibe o início de sua entrada, selecionando dez linhas por padrão ou outra contagem de linhas ou bytes quando solicitada.
Inspecione o início de um arquivo com head -n 4 notes.txt antes de decidir se precisa do arquivo inteiro.

I

Intervalo de linhas
Um intervalo de linhas é uma seleção consecutiva de linhas numeradas com uma posição inicial e uma final, normalmente incluindo ambas as extremidades.
Para mostrar as linhas 11–20, mantenha as primeiras 20 linhas com head e depois as últimas dez dessa seleção.

L

less
less é um paginador que permite navegar para a frente e para trás, buscar texto e visualizar arquivos ou saída recebida por pipe sem editar o texto.
Use less -N notes.txt quando quiser números de linha ao localizar um trecho específico em um arquivo.
locate
locate é uma busca rápida de caminhos que pesquisa um banco de dados preparado, cujo conteúdo pode estar desatualizado em relação às alterações no sistema de arquivos em uso.
Uma anotação recém-criada pode estar ausente dos resultados de locate até que o banco de dados de caminhos seja atualizado.

M

Metacaractere
Um metacaractere tem um significado especial em padrões, como o ponto de expressão regular para um caractere ou o asterisco para repetição do item anterior.
As aspas protegem * do shell, mas grep ainda o interpreta como operador de expressão regular ao recebê-lo.
Modo de acompanhamento
O modo de acompanhamento mantém tail esperando por dados acrescentados após sua saída inicial, para que novo texto possa aparecer enquanto um programa escreve no arquivo.
Execute tail -f app.log durante uma verificação do aplicativo e pressione Ctrl+C quando terminar o acompanhamento.
Modo de inserção
O modo de inserção faz os caracteres digitados tornarem-se texto no buffer do vi; ele é iniciado por comandos como i, a ou o e encerrado com Esc.
Depois que cw remover o restante de uma palavra, digite seu substituto no modo de inserção e pressione Esc.
Modo de linha de comando
O modo de linha de comando aceita um comando na linha inferior do vi após : ser digitado no modo normal e o executa quando Enter é pressionado.
O comando :wq salva o buffer e sai após Enter; um wq sem os dois-pontos no modo normal não faz isso.
Modo normal
O modo normal é o estado de comando do vi, no qual as teclas movem o cursor ou editam texto e Esc estabelece esse estado antes de outro comando.
Pressione Esc e depois dd para recortar a linha atual sem digitar acidentalmente essas duas letras.

N

nano
nano é um editor de texto de terminal que aceita texto digitado diretamente e exibe atalhos para salvar, buscar, recortar e sair.
Abra nano +12 app.conf quando um programa informar que uma configuração na linha 12 precisa de atenção.

O

Ordenação numérica
Uma ordenação numérica compara os valores numéricos de campos de texto, de modo que valores como 9 e 100 sejam ordenados por magnitude em vez do primeiro dígito.
Use sort -n para colocar “9” antes de “100” quando as linhas representarem quantidades em vez de rótulos.

P

Paginador
Um paginador é um programa que exibe texto uma tela por vez e aguarda teclas de navegação, permitindo que você leia uma saída longa no seu ritmo.
Abra uma lista longa com less /etc/services e pressione Espaço para a próxima tela ou q para sair.
PATH
PATH é a lista de pastas do shell para buscar comandos executáveis externos, usada por uma ferramenta como which para localizar um arquivo de programa.
which grep pesquisa pastas de comandos em vez de percorrer todos os diretórios do computador.
Percurso da árvore de diretórios
Um percurso da árvore de diretórios visita itens nessa árvore, passando por subpastas conforme necessário; a ordem do percurso de find não precisa ser alfabética.
Acrescente | sort a uma busca simples de caminhos quando a ordem dos resultados exibidos precisar ser previsível.
Profundidade de busca
A profundidade de busca mede os níveis abaixo de um caminho inicial; -maxdepth de find limita até onde o percurso pode descer em subdiretórios.
Use -maxdepth 1 para inspecionar a pasta inicial e suas entradas imediatas sem entrar em pastas mais profundas.
Proteção contra sobrescrita
A proteção contra sobrescrita é uma configuração do Bash que bloqueia o redirecionamento comum com > para arquivos comuns existentes, ajudando a impedir a substituição acidental.
Após set -o noclobber, use >| apenas quando pretender sobrescrever apesar da proteção de arquivos existentes.

Q

Quantificador
Um quantificador especifica quantas vezes o item anterior de uma expressão regular pode ocorrer, como ? para texto opcional ou {4} para exatamente quatro repetições.
A expressão [0-9]{4} exige quatro dígitos; âncoras podem fazer disso o conteúdo inteiro da linha.

R

Redirecionamento
Redirecionamento é uma operação do shell que altera de onde um comando lê a entrada ou para onde envia a saída, estabelecendo as conexões antes da execução.
Em sort < names.txt > ordered.txt, o shell fornece um arquivo como entrada e abre outro para saída.

S

Saída de erro padrão
A saída de erro padrão é o fluxo de diagnóstico de número 2, mantido separado dos resultados normais para que erros e mensagens de estado possam ser direcionados independentemente.
Salvar uma listagem de diretório com > pode deixar uma mensagem de caminho inexistente visível na saída de erro padrão.
Saída padrão
A saída padrão é o fluxo de resultados normais de um comando, de número 1, que pode ir para o terminal, um arquivo de saída ou outro comando.
Em wc -l < names.txt > count.txt, a contagem de linhas passa pela saída padrão para o arquivo de relatório.
Seleção marcada
Uma seleção marcada é o texto escolhido entre uma marca inicial e o cursor, permitindo que o nano recorte a parte escolhida em vez de uma linha inteira.
Pressione Alt+A para começar a marcar, vá até a outra extremidade e use Ctrl+K para recortar o texto selecionado.
String de entrada embutida
Uma string de entrada embutida é um redirecionamento de entrada do Bash que fornece a um comando uma única string seguida de um caractere de nova linha pela entrada padrão.
O comando wc -w <<< "red blue green" recebe três palavras sem precisar de um arquivo de entrada separado.
Substituição
Uma substituição troca o texto correspondente por meio da linha de comando do vi, com um intervalo que escolhe as linhas e indicadores que controlam a substituição dentro delas.
O comando :%s/old/new/g substitui todos os trechos “old” correspondentes em todas as linhas do arquivo.

T

tail
tail é um filtro que exibe o fim de sua entrada ou começa em uma linha numerada quando a contagem de linhas é precedida por um sinal de mais.
Use tail -n +2 scores.csv para omitir um cabeçalho de uma linha e manter todos os registros de dados restantes.
tee
tee é um filtro que copia sua entrada tanto para um arquivo indicado quanto para a saída padrão, salvando um resultado enquanto permite que um encadeamento continue.
Insira tee selected.txt antes de uma etapa de contagem quando também precisar inspecionar as linhas selecionadas.
Teste de nome
Um teste de nome compara o nome base inteiro de um item com um padrão de caracteres curinga; -name de find diferencia maiúsculas de minúsculas, enquanto -iname ignora essa diferença.
O teste -name 'plan*' aceita “plan.txt”, enquanto -name 'plan' exige esse nome base exato.
Teste de tipo
Um teste de tipo restringe uma busca de arquivos a um tipo de item, usando códigos como f para arquivo comum, d para diretório ou l para link.
Acrescentar -type f impede que um diretório chamado “old.txt” seja selecionado em uma busca por arquivos de texto.
Texto de largura fixa
O texto de largura fixa coloca informações em posições consistentes de caracteres em cada linha, permitindo a seleção por posição em vez da divisão por delimitador.
Um código de cinco caracteres no início de cada linha pode ser selecionado com cut -c1-5, mesmo que o texto posterior varie.
Truncamento
O truncamento esvazia um arquivo de saída existente quando o shell o abre para um redirecionamento comum com >, antes de o comando começar a ler a entrada.
O comando sort names.txt > names.txt perde os dados originais porque o truncamento acontece primeiro.
type
type é um comando interno do Bash que descreve como um nome de comando é interpretado, incluindo um apelido, uma função, um comando interno ou um caminho de executável.
type echo pode informar um comando interno mesmo quando which echo aponta para um arquivo executável externo.

U

uniq
uniq é um filtro que detecta linhas iguais adjacentes, removendo cópias repetidas ou informando sequências selecionadas e suas contagens por meio de opções.
Ordenar valores dispersos antes de uniq -c faz a frequência completa de cada valor aparecer como uma única contagem.
updatedb
updatedb reconstrói o banco de dados usado para buscas de caminhos em um índice, fazendo com que sua visão armazenada reflita os caminhos incluídos durante a atualização.
Um administrador pode executar sudo updatedb quando uma atualização imediata de todo o sistema for apropriada.

W

wc
wc é um comando de contagem que informa caracteres de nova linha, palavras e bytes por padrão, com opções para selecionar uma medida ou contar caracteres.
Para texto UTF-8 como “café”, compare wc -c com wc -m para distinguir bytes de caracteres.

Sobre esta aula

Por StudeliRelatar um erro

Crie seus próprios Materiais de Estudo

Transforme suas anotações, slides e documentos em Guias de Estudo, Questões de Prática, Flashcards e mais 6 ferramentas.

Começar