- Aprender
- Computação e TI
- TI, redes e nuvem
- Fundamentos de Linux
- Pipes e redirecionamento no Linux
Pipes e redirecionamento no Linux: texto, grep e find
BásicoAula 3 de 7 do curso Curso de Fundamentos de Linux
O que você vai aprender
- 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 lessExibir 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 tailUsar 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.
- Exibir arquivos e navegar por seu conteúdo com cat e less
- 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ãoDescrever 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 arquivosSalvar 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.
- Compreender a entrada padrão, a saída padrão e a saída de erro padrão
- 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 teeUsar 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 duplicadasContar 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 cutSelecionar campos de texto delimitado e caracteres de posições fixas com cut e usá-lo em encadeamentos para responder a perguntas sobre dados.
- Conectar comandos com pipes e tee
- 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çõesUsar 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ásicasConstruir 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 -EUsar os operadores ?, +, { }, | e ( ) com grep -E para encontrar texto opcional, repetido e alternativo e exibir apenas os trechos correspondentes.
- Buscar texto em arquivos com grep e suas principais opções
- 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 findUsar 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ápidasExecutar comandos em cada arquivo retornado por find, excluir correspondências com segurança e saber quando locate ou which é a ferramenta mais rápida.
- Pesquisar na árvore de diretórios com find
- 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 nanoAbrir um arquivo no nano, digitar e alterar texto, buscar e substituir, recortar e colar linhas e salvar e sair corretamente.
- Trabalhar nos modos do viAlternar 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.
- Editar e salvar um arquivo no nano
Guia de estudo de Pipes e redirecionamento no Linux
1Visualizar 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:
| Tecla | Ação |
|---|---|
Espaço ou f | Avançar uma tela |
b | Voltar uma tela |
Seta para baixo, Enter ou j | Descer uma linha |
Seta para cima ou k | Subir uma linha |
g / G | Ir para a primeira / última linha |
h / q | Mostrar 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
catexibe arquivos na ordem informada;-nnumera a saída combinada.lesspagina texto sem editá-lo;qretorna ao shell.- No
less,/busca para a frente,?busca para trás enrepete na direção atual. less -Nmostra números de linha;less -Spermite 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:
| Comando | Significado |
|---|---|
tail -n 2 file | Exibir as duas últimas linhas |
tail -n +2 file | Exibir 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
headetailmostram 10 linhas por padrão;-ndefine uma contagem de linhas.tail -n +Kcomeç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 -facompanha o texto acrescentado; Ctrl+C interrompe o acompanhamento.tail -Facompanha um nome de arquivo mesmo após sua substituição, e-qomite cabeçalhos de vários arquivos.
2Controlar 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úmero | Nome | Conexão habitual no terminal |
|---|---|---|
| 0 | Entrada padrão, stdin | Entrada do teclado |
| 1 | Saída padrão, stdout | Resultados normais na tela |
| 2 | Saída de erro padrão, stderr | Erros 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.
| Operador | Efeito |
|---|---|
> out.txt | Escrever stdout, substituindo o conteúdo existente |
>> out.txt | Acrescentar stdout ao final |
2> err.txt | Escrever stderr, substituindo o conteúdo existente |
2>> err.txt | Acrescentar 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>&1captura ambos os fluxos porque os redirecionamentos são processados da esquerda para a direita.2>&1 > out.txtdeixa stderr no destino anterior de stdout./dev/nulldescarta o fluxo selecionado, incluindo diagnósticos úteis.- Evite redirecionar para um arquivo de entrada;
sort -ooferece uma alternativa compatível. - A proteção noclobber do Bash rejeita
>comum em arquivos comuns existentes;>|permite sobrescrevê-los.
3Combinar 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.
teesalva a entrada e a passa adiante;tee -aacrescenta 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ção | O que conta |
|---|---|
-l | Caracteres de nova linha |
-w | Palavras separadas por espaços em branco |
-c | Bytes |
-m | Caracteres |
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 -lconta caracteres de nova linha,-wpalavras,-cbytes e-mcaracteres.sort -ncompara números;-rinverte a ordem;-hinterpreta sufixos de tamanho.sort -t, -k3,3nrordena registros separados por vírgulas numericamente pelo campo 3 em ordem decrescente.- Remova o cabeçalho antes de ordenar os registros de dados.
uniqremove repetições adjacentes; ordene primeiro quando valores iguais estiverem dispersos.uniq -cconta sequências,-dseleciona valores repetidos e-useleciona valores que ocorrem uma vez.sort | uniq -c | sort -rnagrupa 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ção | Campos exibidos |
|---|---|
-f1,3 | Campos 1 e 3 |
-f2-4 | Campos 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 -ddefine o delimitador e-fseleciona campos numerados a partir de 1.- Listas de campos selecionam campos na ordem original;
-cseleciona posições fixas. - O delimitador padrão é uma tabulação;
-somite linhas sem delimitador. - Espaços repetidos criam campos vazios, e
cutnã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.
4Buscar 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ção | Resultado |
|---|---|
-i | Encontrar correspondências sem distinguir maiúsculas de minúsculas |
-v | Exibir linhas que não correspondem |
-c | Exibir o número de linhas correspondentes |
-n | Colocar os números das linhas antes das correspondências |
-w | Exigir correspondência de palavra inteira |
-x | Exigir 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
grepexibe linhas correspondentes e diferencia maiúsculas de minúsculas, a menos que-iseja usado.- Coloque o padrão entre aspas para que o shell o passe intacto.
-cconta linhas correspondentes;-nas numera;-vseleciona as que não correspondem.-wexige uma palavra inteira e-xuma linha inteira.-rpesquisa uma árvore,-llista arquivos com correspondência e-Llista arquivos sem correspondência.-Ftrata um padrão como texto literal;-qinforma 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ão | O que exige |
|---|---|
^c | Uma 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:
| Operador | Nú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 -Ehabilita?,+, 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.-oexibe 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.
5Localizar 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
findpercorre a partir de um caminho inicial e exibe itens que passam em seus testes.- Coloque caracteres curinga de nome entre aspas;
-nametesta o nome inteiro e-pathtesta o caminho completo. - Use
-type f,doulpara arquivos comuns, diretórios ou links simbólicos. - Testes de tamanho arredondam para cima antes da comparação;
-size -1Mseleciona apenas arquivos vazios. -mtime +30começa em 31 dias completos, enquanto-mminusa minutos.- Testes adjacentes significam E,
-osignifica 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
findpara propriedades de arquivo e grep para conteúdo, combinando-os quando necessário. - Visualize as correspondências para exclusão e depois coloque
-deleteapós os testes que restringem a seleção. locatepesquisa um índice que pode estar desatualizado.whichencontra arquivos executáveis em PATH;typeexplica como o Bash resolve comandos.
6Editar 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:
- Execute
nano app.conf. - Pressione Ctrl+W, digite “8080” e pressione Enter.
- Na correspondência, exclua os quatro dígitos e digite “9090”.
- Pressione Ctrl+O e depois Enter para confirmar o nome do arquivo e salvar.
- 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
| Atalho | Ação |
|---|---|
| Ctrl+K | Recortar a linha atual inteira |
| Ctrl+U | Colar o texto recortado na posição do cursor |
| Alt+A | Iniciar a marcação de uma seleção |
| Alt+U / Alt+E | Desfazer / 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 eM-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
| Modo | Função | Como entrar |
|---|---|---|
| Normal | Navegar, excluir, copiar e emitir comandos | Esc |
| Inserção | Digitar texto no buffer | i, a, o ou outro comando de inserção |
| Linha de comando | Inserir 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,oe suas formas maiúsculas escolhem onde a inserção começa.ddrecorta uma linha,yycopia epcoloca texto de linha inteira abaixo ou texto de caracteres depois do cursor.udesfaz e.repete a última alteração./textbusca para a frente;nrepete eNinverte a direção da busca.:wqsalva e sai;:q!descarta alterações não salvas e sai.
Exercícios resolvidos de Pipes e redirecionamento no Linux
1Ler um arquivo sem perder sua posição
10 passos
- 1Introduçã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
cate depois passe paralesscom um arquivo longo demais para caber na tela. Por fim, useheadetailquando souber qual parte precisa. Esses comandos leem texto sem editar o arquivo armazenado. - 2ExemploConcatene duas anotações curtas
a.txtcontém “a” e “b” em linhas separadas.b.txtcontém “c d”. Executecat -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. - 3ExplicaçãoAbra uma visualização de leitura
Execute
less /etc/servicespara 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,
bvolta e as teclas de seta percorrem as linhas.gvai para a primeira linha;Gpara a última. Pressioneqpara fechar a visualização e retornar ao shell. A ausência do prompt do shell é normal enquanto o paginador está aberto. - 4ExemploBusque e continue
No
less, digite/sshe pressione Enter para buscar “ssh” para a frente. Pressionenpara a próxima correspondência nessa direção ouNpara ir na direção oposta.Uma busca para trás começa com
?ssh. Após essa busca,ncontinua para trás. A direção vem da busca que você iniciou.less -N fileacrescenta números de linha se você precisar anotar a localização de uma correspondência. - 5DesafioEncontre 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
Npara ir na direção oposta à busca para a frente e depoisqpara sair. Onminú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. - 6ExplicaçãoEscolha uma contagem ou uma linha inicial
head -n 4 fileexibe as primeiras quatro linhas.tail -n 4 fileexibe 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 filecomeça na linha 4 e exibe tudo a partir dela. Para um arquivo com uma linha de cabeçalho,tail -n +2 fileremove esse cabeçalho. Ele mantém todos os registros de dados, não apenas os dois finais. - 7ExemploSelecione 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. - 8DesafioEscolha 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. - 9DesafioInspecione 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.loge depois Ctrl+C quando terminar.tailsem 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. - 10RecapitulaçãoUse a visualização adequada à tarefa
Para um arquivo curto inteiro, use
cat; para navegar e buscar, abraless. Um paginador permanece aberto até você sair dele.Use
headetailpara 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 comtail -fe pare com Ctrl+C. A seleção também funciona quando o texto chega por um pipe.
2Acompanhar entrada, resultados e erros
11 passos
Salve esta aula para seguir cada Lição Interativa passo a passo.
- 1IntroduçãoDesenhe três caminhos separados
- 2ExplicaçãoNomeie os fluxos padrão
- 3ExemploForneça os mesmos dados por outro caminho
- 4DesafioConclua a entrada pelo teclado
- 5ExemploForneça várias linhas abaixo de um comando
- 6ExplicaçãoEscolha entre substituição e acréscimo
- 7ExemploCombine resultados e diagnósticos
- 8DesafioInverta as conexões
- 9DicaMantenha a entrada intacta
- 10DesafioConte a entrada e separe um diagnóstico
- 11RecapitulaçãoAcompanhe a preparação feita pelo shell
3Construir um relatório de texto útil
14 passos
Salve esta aula para seguir cada Lição Interativa passo a passo.
- 1IntroduçãoDê uma tarefa a cada etapa
- 2ExplicaçãoConecte os dois comandos
- 3DesafioEscolha um pipe ou um arquivo
- 4ExplicaçãoSaiba o que o contador mede
- 5ExemploSepare ordenação de contagem
- 6DesafioExplique uma duplicata que permanece
- 7ExplicaçãoSelecione a coluna relevante
- 8ExemploRemova o rótulo e inspecione os valores
- 9DesafioVerifique uma suposição sobre o separador
- 10ExemploAgrupe os valores selecionados
- 11ExemploOrdene as contagens
- 12ConexãoGuarde os dados antes da contagem final
- 13DesafioDiagnostique uma categoria extra
- 14RecapitulaçãoVerifique o que passa entre as etapas
4Construir padrões que correspondam ao texto desejado
15 passos
Salve esta aula para seguir cada Lição Interativa passo a passo.
- 1IntroduçãoDecida o que conta como correspondência
- 2ExplicaçãoEscolha um relatório de busca
- 3ExemploDiferencie uma palavra de uma linha
- 4DesafioBusque um rótulo exato de versão
- 5DicaPesquise uma pasta ou faça uma consulta silenciosa
- 6ExplicaçãoPosicione uma correspondência dentro da linha
- 7ExemploSelecione um caractere de um conjunto
- 8Ideia-chavePermita zero ocorrências
- 9DesafioEncontre uma terminação literal de nome de arquivo
- 10ExplicaçãoAtive operadores estendidos
- 11ExemploVerifique um código inteiro
- 12ExemploAgrupe uma escolha ou uma parte repetida
- 13DesafioExtraia trechos e examine seus limites
- 14DesafioMantenha apenas configurações ativas
- 15RecapitulaçãoVerifique o padrão e o relatório separadamente
5Selecionar arquivos antes de executar ações neles
12 passos
Salve esta aula para seguir cada Lição Interativa passo a passo.
- 1IntroduçãoSepare nomes de conteúdo
- 2ExplicaçãoEscolha a pasta inicial
- 3ExemploCombine tipo com nome
- 4DesafioPreserve o caractere curinga para find
- 5ExplicaçãoCompare unidades de tamanho arredondadas
- 6DesafioInterprete o limite em dias
- 7ExplicaçãoPasse caminhos como argumentos
- 8ExemploPesquise apenas o conteúdo selecionado
- 9DicaColoque uma ação destrutiva após seus testes
- 10ExplicaçãoEscolha um índice ou uma busca de comando
- 11DesafioEscolha uma verificação atual de conteúdo
- 12RecapitulaçãoAjuste a busca às informações necessárias
6Fazer e salvar uma pequena edição no terminal
13 passos
Salve esta aula para seguir cada Lição Interativa passo a passo.
- 1IntroduçãoDiferencie o texto de trabalho do texto salvo
- 2ExplicaçãoLeia os controles do nano
- 3ExemploEncontre e substitua um valor
- 4DesafioMova uma linha e recupere-se de um erro
- 5DicaLide com a pergunta ao sair
- 6ExplicaçãoEntre no modo de digitação do vi
- 7ExemploVá até o texto necessário
- 8ExemploAltere a configuração no vi
- 9DesafioCole o tipo de texto que você copiou
- 10DicaFaça pequenas edições e desfaça
- 11DesafioEscolha se a edição no vi deve ser mantida
- 12DesafioCompare duas edições não concluídas
- 13RecapitulaçãoTermine salvando ou descartando de forma deliberada
Questões de Pipes e redirecionamento no Linux
Conjunto 1: Escolher comandos e interpretar correspondências10 Questões de Prática
Questão 1 de 10
?queue no less, o que n faz?Mostrar respostaOcultar resposta
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?Mostrar respostaOcultar resposta
<, 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
command 2>&1 > result.txt?Mostrar respostaOcultar resposta
> 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?Mostrar respostaOcultar resposta
Questão 5 de 10
build.txt o texto literal “v3.8”, incluindo o ponto literal?Mostrar respostaOcultar resposta
-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
grep '^d.g$' file?Mostrar respostaOcultar resposta
Questão 7 de 10
grep '^ba*t$' file entre “bt”, “bat”, “baat” e “boat”?Mostrar respostaOcultar resposta
Questão 8 de 10
.txt modificados recentemente que contêm “REVIEW”. Qual comando aplica as três restrições?Mostrar respostaOcultar resposta
-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
Mostrar respostaOcultar resposta
Questão 10 de 10
yy e pressiona p. Onde a linha copiada aparece?Mostrar respostaOcultar resposta
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
less. Qual tecla retorna você ao shell?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 2 de 10
tail -n +3 records.txt exibe?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 3 de 10
> report.txt, mas seus diagnósticos permanecem visíveis. Qual fluxo transporta esses diagnósticos?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 4 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 5 de 10
command | wc -l informa?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 6 de 10
sort -n produz?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?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 8 de 10
grep -ic 'fail' file conta?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 9 de 10
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?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 10 de 10
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
-size -1M do find do GNU?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 2 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 3 de 10
echo done > state.txt escrever sua saída?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?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?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 6 de 10
cut -d: -f3,1 exibe a partir da linha “Nia:ops:42”?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 7 de 10
grep -E '^(go)+$' file?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 8 de 10
grep -Eo '[0-9]{1,2}' produz a partir dessa linha?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 9 de 10
locate plan.txt pode mostrar um caminho que foi excluído hoje de manhã?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 10 de 10
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
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 2 de 10
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?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 4 de 10
sort interativamente, o que sinaliza o fim da entrada no início de uma linha vazia?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 5 de 10
command 2>&1 | tee combined.txt | wc -l produz?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 6 de 10
cut -d' ' -f2 exibe?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 7 de 10
grep -icw 'alert' file informa?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 8 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 9 de 10
find . -type f -name '*.cfg' -mtime +30 seleciona?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 10 de 10
I começa a inserçã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
x exclui um caractere. Você então pressiona p. Onde esse caractere é inserido?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 2 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 3 de 10
log.txt quanto err.txt já contêm texto antigo. O que acontece com command >> log.txt 2> err.txt?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?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?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 6 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 7 de 10
grep '^r[^ae]d$' file entre “rad”, “red”, “rid” e “road”?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 8 de 10
grep -Ev '^[[:space:]]*(#|$)' file?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 9 de 10
echo?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 10 de 10
work, sem incluir arquivos de pastas mais profundas. Qual busca faz isso?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Travou em uma questão sua? Ajuda com Tarefas
Termos-Chave
A
Acréscimo ao final
>> para a saída padrão de um comando.>> report.txt reúnem seus resultados em um arquivo em vez de substituí-lo.Alternância
| na sintaxe estendida, muitas vezes com parênteses para limitar o alcance da escolha.^(east|west)$, ambas as alternativas devem preencher a linha inteira porque compartilham as âncoras.Â
Âncora
^ para o início ou $ para o fim de uma linha em buscas comuns do grep.d.g exclui uma linha mais longa como “undog”, embora ela contenha “dog”.B
Buffer
Busca por texto literal
-F.grep -F "v2.4" releases.txt para exigir o ponto literal no rótulo de versão.Busca recursiva
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
cut e selecionada de acordo com o delimitador usado nesse registro.Campo vazio
Canal de comunicação
grep -i error app.log | wc -l, as linhas selecionadas passam para o comando que as conta.Caractere de nova linha
wc -l conta esses marcadores, então uma linha final sem esse terminador não aumenta o total informado.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.cat -n a.txt b.txt numera a saída combinada sem editar nenhum dos arquivos de entrada.Chave de ordenação
sort -k e interpretada usando o separador escolhido.-k3,3nr compara apenas o campo 3, numericamente e em ordem inversa, em uma classificação de pontuações.Classe de caracteres
[[:digit:]] seleciona um dígito; ambos os pares de colchetes são necessários.Código de saída
grep -q usa seu código para informar um resultado sem exibir linhas correspondentes.Concatenação
cat.cat first.txt second.txt > combined.txt, o texto do primeiro arquivo precede o texto do segundo.Contagem de frequência
sort e pela contagem de sequências com uniq -c.sort -rn após uniq -c para colocar as maiores contagens primeiro ao inspecionar entradas comuns.Cópia de texto
yy faz para uma linha inteira sem removê-la do buffer de trabalho.yy seguido de p para duplicar uma linha abaixo de sua posição original no arquivo.Correspondência de palavra inteira
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.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
-mtime de find testa o tempo decorrido em períodos completos de 24 horas.-mtime +30 porque passaram apenas 30 períodos completos de um dia.Delimitador
cut -d seleciona o caractere usado para dividir cada linha.Descritor de arquivo
2 em 2> errors.txt seleciona o fluxo de erro e deve ficar junto ao operador de redirecionamento.Dispositivo nulo
/dev/null, é um arquivo especial que descarta os dados escritos nele, permitindo ocultar deliberadamente um fluxo de saída escolhido.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
cat <<EOF, as linhas inseridas antes do EOF de encerramento são dados, enquanto essa linha final é um marcador.Duplicação de descritor
2>&1 faz para stderr e stdout.command > all.txt 2>&1, stderr recebe a conexão com o arquivo que stdout já possui.E
Editor modal
Encadeamento de comandos
sort values.txt | uniq | wc -l, a contagem final mede valores distintos agrupados.Entrada padrão
sort < names.txt, o shell conecta o arquivo à entrada padrão do comando antes de executá-lo.Escape de caracteres
\.txt$ exige uma terminação literal “.txt”, enquanto .txt$ permite outro caractere antes de “txt”.Expressão entre colchetes
b[ae]t corresponde a “bat” ou “bet”, enquanto b[^a]t exclui “a” da posição central.Expressão regular
^web[0-9]$ descreve uma linha inteira contendo “web” seguido de um dígito.Expressão regular estendida
?, +, |, chaves e parênteses seus significados especiais sem barras invertidas.grep -E antes de um padrão agrupado como ^(red|blue)$ para habilitar a alternativa.Extração de correspondências
-o do grep faz para cada correspondência não vazia.grep -Eo '[0-9]+' exibe os dois números em linhas separadas.F
Filtro
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.-exec wc -l {} + passa lotes de caminhos correspondentes a um comando que conta suas linhas.G
Gravar
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.grep -n WARN app.log para mostrar linhas correspondentes junto com suas posições no arquivo.Grupo
(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.head -n 4 notes.txt antes de decidir se precisa do arquivo inteiro.I
Intervalo de linhas
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.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.M
Metacaractere
* do shell, mas grep ainda o interpreta como operador de expressão regular ao recebê-lo.Modo de acompanhamento
tail esperando por dados acrescentados após sua saída inicial, para que novo texto possa aparecer enquanto um programa escreve no arquivo.tail -f app.log durante uma verificação do aplicativo e pressione Ctrl+C quando terminar o acompanhamento.Modo de inserção
i, a ou o e encerrado com Esc.cw remover o restante de uma palavra, digite seu substituto no modo de inserção e pressione Esc.Modo de linha de comando
: ser digitado no modo normal e o executa quando Enter é pressionado.:wq salva o buffer e sai após Enter; um wq sem os dois-pontos no modo normal não faz isso.Modo normal
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.nano +12 app.conf quando um programa informar que uma configuração na linha 12 precisa de atenção.O
Ordenação numérica
sort -n para colocar “9” antes de “100” quando as linhas representarem quantidades em vez de rótulos.P
Paginador
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
| sort a uma busca simples de caminhos quando a ordem dos resultados exibidos precisar ser previsível.Profundidade de busca
-maxdepth de find limita até onde o percurso pode descer em subdiretórios.-maxdepth 1 para inspecionar a pasta inicial e suas entradas imediatas sem entrar em pastas mais profundas.Proteção contra sobrescrita
> para arquivos comuns existentes, ajudando a impedir a substituição acidental.set -o noclobber, use >| apenas quando pretender sobrescrever apesar da proteção de arquivos existentes.Q
Quantificador
? para texto opcional ou {4} para exatamente quatro repetições.[0-9]{4} exige quatro dígitos; âncoras podem fazer disso o conteúdo inteiro da linha.R
Redirecionamento
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
> pode deixar uma mensagem de caminho inexistente visível na saída de erro padrão.Saída padrão
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
String de entrada embutida
wc -w <<< "red blue green" recebe três palavras sem precisar de um arquivo de entrada separado.Substituição
:%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.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.tee selected.txt antes de uma etapa de contagem quando também precisar inspecionar as linhas selecionadas.Teste de nome
-name de find diferencia maiúsculas de minúsculas, enquanto -iname ignora essa diferença.-name 'plan*' aceita “plan.txt”, enquanto -name 'plan' exige esse nome base exato.Teste de tipo
f para arquivo comum, d para diretório ou l para link.-type f impede que um diretório chamado “old.txt” seja selecionado em uma busca por arquivos de texto.Texto de largura fixa
cut -c1-5, mesmo que o texto posterior varie.Truncamento
>, antes de o comando começar a ler a entrada.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.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.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.wc -c com wc -m para distinguir bytes de caracteres.Sobre esta aula
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.