Comandos Linux para iniciantes: O guia essencial do terminal com exemplos
O terminal parece intimidante até que você conheça algumas dezenas de comandos. Aprenda os que são importantes, agrupe-os de acordo com o que você está tentando fazer e, em seguida, combine-os para responder a uma pergunta real sobre um arquivo de log.
- Um pequeno conjunto de comandos Linux cobre a maior parte do trabalho diário:
ls,cd,cp,mv,rm,categrep. - Pipes (
|) conectam ferramentas simples para responder perguntas mais difíceis. rmnão tem lixeira, então verifique novamente antes de pressionar Enter.- Use
manou--helpsempre que esquecer uma opção.
A maioria dos servidores, contêineres e máquinas em nuvem executam Linux e geralmente não possuem uma área de trabalho gráfica. É por isso que aprender comandos do Linux é uma habilidade tão útil para desenvolvedores e testadores. Você não precisa memorizar centenas. Algumas dúzias irão levá-lo por um longo caminho.
Testamos os exemplos de arquivo, pesquisa e canal no Git Bash no Windows, que fornece as mesmas ferramentas principais, e a saída vem dessa execução. Não executamos os comandos de permissões, serviços, pacotes e acesso remoto, pois dependem de um sistema Linux real. Os detalhes podem variar de acordo com a distribuição, portanto verifique a documentação do seu próprio sistema.
Começando com segurança
Você não precisa instalar o Linux para praticar. Boas opções incluem:
- Windows: Subsistema Windows para Linux (WSL) ou Git Bash para o básico.
- macOS: o Terminal integrado, cujos comandos são muito semelhantes, embora algumas opções sejam diferentes.
- Qualquer sistema: um contêiner. Nosso tutorial do Docker para iniciantes mostra como iniciar um.
Pratique em uma pasta descartável e lembre-se de que tudo no Linux diferencia maiúsculas de minúsculas: Notes.txt e notes.txt são arquivos diferentes.
Anatomia de um comando
ls -l /var/log
^ ^ ^
| | argument: what to act on
| option: how to behave
command: what to run
As opções curtas geralmente podem ser combinadas, então ls -l -a e ls -la são iguais. As opções longas usam dois travessões, como em --help. Para obter ajuda, execute man ls para obter o manual completo ou ls --help para obter um resumo. Pressione q para sair de uma página de manual.
Mova-se pelo sistema de arquivos
| Comando | O que isso faz |
|---|---|
senha |
Imprime sua pasta atual |
eu |
Lista arquivos |
ls-la |
Lista todos os arquivos, incluindo os ocultos, com detalhes |
pasta de cd |
Move para uma pasta |
CD.. |
Sobe um nível |
disco ~ |
Vai para sua pasta pessoal |
disco - |
Retorna à pasta anterior |
Pressione Tab para completar automaticamente os nomes dos arquivos e a seta para cima para retornar comandos anteriores. Esses dois hábitos economizam mais tempo do que qualquer outra dica aqui. Um nome de arquivo que começa com um ponto, como .env, fica oculto e ls é exibido apenas com -a.
Gerenciar arquivos e pastas
| Comando | O que isso faz |
|---|---|
mkdir -p projeto/logs |
Cria pastas, incluindo pais |
toque em notas.txt |
Cria um arquivo vazio |
cp a.txt b.txt |
Copia um arquivo |
cp -r src/backup/ |
Copia uma pasta |
mv a.txt b.txt |
Renomeia ou move um arquivo |
rm a.txt |
Exclui um arquivo |
rm -r pasta/ |
Exclui uma pasta e tudo o que há nela |
Aqui está uma breve sessão da nossa corrida:
$ mkdir -p project/logs
$ cd project
$ touch notes.txt
$ ls
logs notes.txt
$ cp notes.txt backup.txt
$ mv backup.txt old.txt
$ ls
logs notes.txt old.txt
$ rm old.txt
$ ls
logs notes.txt
Dica: rm não usa uma lixeira e os arquivos excluídos geralmente desaparecem. Tenha especial cuidado com rm -r e curingas. Execute ls com o mesmo padrão primeiro, para ver exatamente o que corresponderia, e use rm -i se desejar um prompt para cada arquivo.
Ver o conteúdo do arquivo
| Comando | O que isso faz |
|---|---|
arquivo gato |
Imprime um arquivo inteiro |
menos arquivo |
Percorre um arquivo longo (q para sair) |
cabeça -n 5 arquivo |
Mostra as primeiras cinco linhas |
arquivo tail -n 5 |
Mostra as últimas cinco linhas |
arquivo tail -f |
Segue as novas linhas conforme elas são escritas |
arquivo wc -l |
Conta linhas |
Para os próximos exemplos, criamos um pequeno arquivo de log:
$ cat logs/app.log
ERROR db down
INFO started
ERROR disk full
INFO stopped
$ head -n 1 logs/app.log
ERROR db down
$ tail -n 1 logs/app.log
INFO stopped
$ wc -l logs/app.log
4 logs/app.log
tail -f é uma ferramenta diária para observar um log de aplicativo ao vivo enquanto você reproduz um bug. Pressione Ctrl+C para pará-lo.
Pesquise com grep e encontre
grep pesquisa dentro dos arquivos e find pesquisa os próprios arquivos:
$ grep ERROR logs/app.log
ERROR db down
ERROR disk full
$ grep -c ERROR logs/app.log
2
$ find . -name "*.log"
./logs/app.log
| Opção | Significado |
|---|---|
grep -eu |
Ignora maiúsculas e minúsculas |
grep -r |
Pesquisa uma pasta recursivamente |
grep -n |
Mostra números de linha |
grep -v |
Mostra linhas que não correspondem |
grep -c |
Conta linhas correspondentes |
Pipes e redirecionamento
Essa é a ideia que torna a linha de comando tão poderosa. Cada ferramenta faz um pequeno trabalho e você as conecta:
| Símbolo | O que isso faz |
|---|---|
| |
Envia a saída de um comando para o próximo |
> |
Grava a saída em um arquivo, substituindo seu conteúdo |
>> |
Acrescenta saída a um arquivo |
2> |
Grava mensagens de erro em um arquivo |
$ echo "hello" > greeting.txt
$ echo "world" >> greeting.txt
$ cat greeting.txt
hello
world
Tenha cuidado com um único >, pois ele substitui silenciosamente o que já estava no arquivo.
Um exemplo real: resumir um log
Quantas linhas de cada tipo existem em nosso log? A combinação de quatro comandos simples dá a resposta:
$ cut -d' ' -f1 logs/app.log | sort | uniq -c
2 ERROR
2 INFO
Lendo da esquerda para a direita: cut pega a primeira palavra separada por espaço em cada linha, sort agrupa palavras idênticas e uniq -c conta cada grupo. A etapa de classificação é importante porque uniq apenas recolhe duplicatas vizinhas. Adicione | sort -nr ao final para listar primeiro os mais comuns.
Esse tipo de linha única é uma grande ajuda quando você está investigando falhas. Ele pode informar rapidamente se um erro ocorreu duas ou duas mil vezes, o que é um detalhe útil para incluir em um relatório de bug.
Permissões de arquivo
Execute ls -l e você verá algo assim:
-rwxr-xr-- 1 asha devs 512 Nov 1 10:00 deploy.sh
Após o primeiro caractere, que mostra o tipo de arquivo, existem três grupos de três caracteres, para o proprietário, o grupo e todos os demais. Cada um pode ter r (leitura), w (gravação) e x (execução).
| Comando | O que isso faz |
|---|---|
chmod +x implantar.sh |
Torna um script executável |
arquivo chmod 644 |
O proprietário pode ler e escrever, outros podem ler |
chmod 755 script.sh |
O proprietário tem acesso total, outros podem ler e executar |
arquivo chown asha |
Muda o proprietário |
comando sudo |
Executa um comando como administrador |
Os números se somam: ler é 4, escrever é 2 e executar é 1. Portanto, 7 significa todos os três e 5 significa ler e executar. Evite chmod 777, que dá acesso total a todos, como uma solução rápida para erros de permissão. Em vez disso, encontre a causa real. E use sudo com cuidado, pois remove as verificações de segurança que normalmente protegem o sistema.
Processos e informações do sistema
| Comando | O que isso faz |
|---|---|
ps aux |
Lista processos em execução |
top ou htop |
Mostra uma visualização ao vivo da CPU e da memória |
matar 1234 |
Pede ao processo 1234 para parar |
df-h |
Mostra espaço livre em disco |
pasta du -sh |
Mostra o tamanho de uma pasta |
grátis -h |
Mostra o uso de memória |
status do systemctl nginx |
Mostra o status de um serviço |
jornalctl -u nginx |
Mostra os logs de um serviço |
Para instalar software, use o gerenciador de pacotes da sua distribuição, como sudo apt install curl no Debian e Ubuntu, ou sudo dnf install curl no Fedora e RHEL.
Arquivos e trabalho remoto
$ tar -czf logs.tar.gz logs
$ tar -tzf logs.tar.gz
logs/
logs/app.log
Em tar, c significa criar, z significa gzip, f nomeia o arquivo e t lista o conteúdo. Para extrair um arquivo, use tar -xzf logs.tar.gz. Para trabalhar com outras máquinas, estes três são o que você precisa:
| Comando | O que isso faz |
|---|---|
ssh usuário@servidor |
Abre um terminal remoto |
arquivo scp usuário@servidor:/caminho/ |
Copia um arquivo por SSH |
curl -I https://example.com |
Mostra os cabeçalhos de resposta de um URL |
Esses mesmos comandos são usados dentro de Dockerfiles e pipelines de CI/CD, portanto, esse conhecimento compensa no trabalho de DevOps.
Erros comuns
- Usando
rm -rfsem olhar. Verifique sua pasta compwdprimeiro e tome cuidado com os espaços nos caminhos. - Substituindo por
>. Use>>quando quiser anexar. - Executando tudo com
sudo. Use-o somente quando for necessário. - Colando comandos que você não entende. Leia-os primeiro, especialmente qualquer coisa que canalize um download para um shell.
- Esquecendo aspas. Um nome de arquivo com espaços, como
"my file.txt", precisa deles.
Considerações finais
Você não aprende o terminal lendo sobre ele. Abra um shell, crie uma pasta de prática e execute os comandos de cada seção. Em seguida, tente responder a uma pergunta real usando um canal, como qual erro aparece com mais frequência em um log. Comece com navegação e arquivos esta semana, adicione grep e pipes a seguir, e o resto seguirá conforme necessário.
Perguntas frequentes
Quais são os comandos mais básicos do Linux?
Comece com pwd, ls, cd, mkdir, cp, mv, rm, cat e grep. Eles abrangem a movimentação, o gerenciamento de arquivos e a pesquisa, que constituem a maior parte do trabalho diário do terminal.
Como posso praticar comandos do Linux no Windows?
Use o subsistema Windows para Linux para um ambiente completo ou Git Bash para o básico. Executar um contêiner Linux com Docker também funciona bem.
Qual é a diferença entre > e >> no Linux?
Um único > substitui o conteúdo do arquivo pela saída. Um duplo >> adiciona a saída ao final do arquivo e mantém o que já está lá.
Posso desfazer o comando rm?
Geralmente não, porque rm não usa lixeira. As ferramentas de recuperação às vezes ajudam, mas não são confiáveis, portanto, mantenha backups e verifique primeiro com cuidado.
O que significa sudo?
sudo executa um único comando com direitos de administrador. Ele é necessário para tarefas como instalação de software e deve ser usado com cuidado.
Continue aprendendo
Precisa de ajuda com testes, WordPress ou SEO?
Ajudamos as equipes a fornecer software melhor e a expandir seus sites. Conte-nos no que você está trabalhando e sugeriremos um próximo passo claro.
Mais guias sobre testes, IA e desenvolvimento moderno
Gostou deste artigo? Escolha um tópico e vá direto para nossos tutoriais mais recentes.
Explicação das alucinações de IA: por que os modelos de linguagem inventam as coisas e como reduzi-las
Explicação das alucinações de IA: o que são, por que os modelos de linguagem as produzem, tipos comuns, como reduzi-las com aterramento e instruções…
Leia o artigo →DevOpsVariáveis de ambiente explicadas: arquivos .env, segredos e configuração bem feitos
Variáveis de ambiente explicadas com exemplos de Python que executamos: leitura e configuração, por que cada valor é uma string, arquivos .env, hera…
Leia o artigo →Desenvolvimento de softwareExplicação da limitação de taxa de API: algoritmos, cabeçalhos e tratamento de erros 429
Limitação de taxa de API explicada com uma simulação que executamos: token bucket, janela fixa, janela deslizante, 429 respostas, cabeçalhos de limi…
Leia o artigo →Automação de testesZombando em Python: unittest.mock, patch e os erros que fazem os testes mentirem
Zombaria em Python com unittest.mock, testado: Mock e return_value, side_effect, patch onde um nome é usado, especificação e autospec, zombaria de d…
Leia o artigo →Teste de softwareCobertura de código explicada: cobertura de linha versus filial e o que 100% realmente significa
Cobertura de código explicada com uma execução cobertura.py real: cobertura de linha, ramal e condição, leitura de um relatório, por que 100% de cob…
Leia o artigo →Bancos de dados e SQLDELETE vs TRUNCATE vs DROP em SQL: diferenças, reversão e quando usar cada um
DELETE vs TRUNCATE vs DROP explicado com SQL testado: o que cada um remove, rollback, aciona, redefinição de identidade, velocidade e como PostgreSQ…
Leia o artigo →Bancos de dados e SQLExibições SQL explicadas: crie, use e evite as armadilhas, com exemplos
Visualizações SQL explicadas com consultas que executamos: criação de uma visualização, resultados ao vivo, ocultação de colunas, desempenho, visual…
Leia o artigo →Desenvolvimento de softwareInterface TypeScript vs tipo: diferenças reais, testadas com o compilador
Interface TypeScript versus tipo, verificada com o compilador real: o que ambos podem fazer, o que apenas um pode fazer, mesclagem de declarações, e…
Leia o artigo →Desenvolvimento de softwarePython *args e **kwargs explicados: funções flexíveis com exemplos claros
Python *args e **kwargs explicados com o código que executamos: empacotamento e descompactação, ordem dos parâmetros, argumentos somente de palavras…
Leia o artigo →Desenvolvimento de softwareFunções Python Lambda: sintaxe, usos reais e quando não usá-los
Funções lambda do Python explicadas com o código que executamos: sintaxe, classificação com chave, mapa e filtro, fechamentos, armadilha de ligação …
Leia o artigo →Inteligência artificialO que são agentes de IA? Como eles funcionam, com um loop de agente simples que você pode executar
O que são agentes de IA? Um guia simples para o loop do agente, ferramentas, memória e proteções, com um pequeno loop Python que executamos, riscos …
Leia o artigo →DevOpsMonitoramento versus observabilidade: a verdadeira diferença, com logs, métricas e rastreamentos
Explicação do monitoramento versus observabilidade: falhas conhecidas e desconhecidas, logs, métricas e rastreamentos, um passo a passo do incidente…
Leia o artigo →DevOpsDocker Volumes vs Bind Mounts: persista os dados do contêiner da maneira certa
Volumes Docker versus montagens de ligação explicadas: por que os dados do contêiner desaparecem, volumes nomeados, montagens de ligação, tmpfs, exe…
Leia o artigo →Automação de testesTDD vs BDD: principais diferenças, um recurso criado de ambas as maneiras e quando usar cada um
TDD vs BDD explicado com um recurso de desconto construído em ambos os sentidos: refatoração vermelho-verde com o código que executamos, cenários da…
Leia o artigo →Teste de softwareTeste de aceitação do usuário (UAT): processo, lista de verificação e exemplos reais
Explicação do teste de aceitação do usuário: quem o executa, como ele difere do controle de qualidade, um processo de sete etapas, um modelo de caso…
Leia o artigo →Bancos de dados e SQLValores SQL NULL explicados: IS NULL, COALESCE, NULLIF e as armadilhas a serem evitadas
Valores SQL NULL explicados com consultas que executamos: lógica de três valores, IS NULL, COALESCE, NULLIF, como agregações, junções e classificaçã…
Leia o artigo →Bancos de dados e SQLInstrução SQL CASE WHEN: sintaxe, exemplos reais e erros comuns
SQL CASE WHEN explicado com consultas que executamos: formulários simples e pesquisados, ordem de condição, pivôs com SUM, truques COUNT, classifica…
Leia o artigo →Desenvolvimento de softwareO que é JWT? JSON Web Tokens explicados com um exemplo prático
O que é JWT? JSON Web Tokens explicados: as três partes, um token construído e adulterado no código que executamos, JWT vs sessões, armazenamento, t…
Leia o artigo →Desenvolvimento de softwareLoop de eventos JavaScript explicado: pilha de chamadas, microtarefas e temporizadores com exemplos
O loop de eventos JavaScript explicado com o código que executamos: pilha de chamadas, filas de tarefas e microtarefas, por que setTimeout 0 não é i…
Leia o artigo →Desenvolvimento de softwareGeradores Python e rendimento explicado: economize memória com exemplos reais
Geradores Python e rendimento explicados com o código que executamos: como eles pausam e reiniciam, medem economia de memória, pipelines, sequências…
Leia o artigo →Inteligência artificialO que são incorporações? Similaridade de vetores e cossenos explicada de forma simples
O que são incorporações? Um guia em linguagem simples para vetores, similaridade de cossenos e pesquisa semântica, com um pequeno exemplo que execut…
Leia o artigo →DevOpsImplantação azul-verde vs canário: diferenças, compensações e como escolher
Explicação da implantação azul-verde versus canário: como cada um funciona, custo, risco e reversão, agrupamento estável de usuários que testamos, m…
Leia o artigo →Automação de testesTestes instáveis: o que os causa e como corrigi-los para sempre
Testes instáveis explicados com demonstrações que executamos: as principais causas, como confirmar e diagnosticar uma, soluções adequadas para tempo…
Leia o artigo →Teste de softwareTeste de carga versus teste de estresse: diferenças, métricas e exemplos k6
Teste de carga versus teste de estresse explicado: o que cada um prova, testes de pico e absorção, as métricas que importam, por que as médias engan…
Leia o artigo →Teste de softwareCaso de teste versus cenário de teste: principais diferenças, exemplos e quando usar cada um
Caso de teste vs cenário de teste explicado: definições claras, uma tabela lado a lado, um recurso de redefinição de senha retirado de cenários para…
Leia o artigo →Bancos de dados e SQLOtimização de consultas SQL: leia planos de execução e corrija consultas lentas, com intervalos
Otimização de consulta SQL testada em um milhão de linhas: leia planos de execução, adicione os índices corretos, corrija filtros não sargáveis, use…
Leia o artigo →Bancos de dados e SQLSQL UNION vs UNION ALL: diferenças, exemplos e desempenho testado
SQL UNION vs UNION ALL explicado com consultas que executamos: duplicatas, as regras que ambos seguem, um bug de dados real, desempenho medido, INTE…
Leia o artigo →Desenvolvimento de softwareTutorial da API JavaScript Fetch: GET, POST, tratamento de erros e tempos limite
Um tutorial da API JavaScript Fetch testado em um servidor local: GET e POST, por que 404 não lança, um auxiliar reutilizável, strings de consulta, …
Leia o artigo →Desenvolvimento de softwareManipulação de arquivos Python: leitura, gravação, CSV, JSON e pathlib com exemplos
Manipulação de arquivos Python explicada com código que executamos: modos abertos, com, leitura de arquivos grandes, CSV, JSON, pathlib, arquivos bi…
Leia o artigo →Desenvolvimento de softwareClasses e objetos Python: tutorial OOP com exemplos reais
Classes e objetos Python explicados com código que executamos: __init__, métodos, atributos de classe vs instância, herança, propriedades, métodos d…
Leia o artigo →Inteligência artificialO que é um modelo de linguagem grande? Como funcionam os LLMs, explicado sem exageros
O que é um modelo de linguagem grande? LLMs explicados em linguagem simples: tokens, incorporações, atenção, treinamento, temperatura e janelas de c…
Leia o artigo →DevOpsComandos Linux para iniciantes: o guia essencial do terminal com exemplos
Comandos Linux para iniciantes, agrupados por tarefa: navegação, arquivos, visualização de logs, grep, pipes, permissões, processos e arquivos, com …
Leia o artigo →Automação de testesSelenium vs Playwright: principais diferenças, código comparado e qual escolher
Selenium vs Playwright comparado: arquitetura, espera, suporte a navegador e linguagem, depuração, o mesmo teste em ambas as ferramentas, conselhos …
Leia o artigo →Teste de softwareParticionamento de equivalência: técnica de design de teste explicada com exemplos resolvidos
Explicação do particionamento de equivalência: como encontrar partições válidas e inválidas, exemplos resolvidos para idades, senhas e cupons, teste…
Leia o artigo →Teste de softwareGravidade vs Prioridade em Testes de Software: Diferenças, Matriz e Exemplos Reais
Explicação da gravidade versus prioridade em testes de software: definições claras, uma matriz de quatro vias com exemplos, escalas de nível, quem d…
Leia o artigo →Bancos de dados e SQLTutorial de subconsultas SQL: tipos, subconsultas correlacionadas e EXISTS com exemplos
Um tutorial de subconsultas SQL com consultas que executamos: subconsultas escalares, IN, FROM e SELECT, subconsultas correlacionadas, EXISTS, a arm…
Leia o artigo →Bancos de dados e SQLTransações SQL e ACID explicados: COMMIT, ROLLBACK e níveis de isolamento
Transações SQL e ACID explicadas com uma transferência bancária que executamos: COMMIT, ROLLBACK, savepoints, locks, níveis de isolamento, leituras …
Leia o artigo →Desenvolvimento de softwareGit merge vs rebase: diferenças, exemplos e quando usar cada um
Git merge vs rebase explicado com saída real do log, uma tabela comparativa, a regra de ouro do rebase e um fluxo de trabalho seguro para equipes.
Leia o artigo →Desenvolvimento de softwareList comprehension em Python: sintaxe, exemplos e quando evitar
List comprehension em Python explicada: sintaxe, filtros, if-else, laços aninhados, tempos medidos e quando um laço for comum é a melhor escolha.
Leia o artigo →Bancos de dados e SQLSQL JOIN explicado com exemplos (Inner, Left, Right, Full)
Entenda os joins SQL passo a passo com tabelas e consultas de exemplo: INNER, LEFT, RIGHT, FULL, CROSS e SELF, além de erros comuns e dicas de desem…
Leia o artigo →