O que voce vai aprender neste tutorial
- Navegacao e verificacao de diretorios
- Operacoes com arquivos e diretorios
- Visualizacao de conteudo de arquivos
- Busca basica de arquivos
Historia do Linux e UNIX
Por que aprender Linux
O Linux roda em aproximadamente 96% dos servidores do mundo, desde smartphones (Android) e supercomputadores ate dispositivos IoT. Para engenheiros, a operacao de linha de comando do Linux e uma habilidade essencial.
Nascimento do UNIX
As raizes dos comandos Linux atuais remontam a 1969. O UNIX foi desenvolvido por Ken Thompson e Dennis Ritchie nos Laboratorios Bell.
“UNIX e um SO feito por programadores, para programadores” — Brian Kernighan
Nascimento do Linux
Em 1991, o estudante universitario finlandes Linus Torvalds desenvolveu um kernel de SO gratuito compativel com UNIX. Seu famoso post:
“Ola a todos que usam minix. Estou fazendo um SO (gratuito) para clones AT 386(486)” — Linus Torvalds, 1991
Filosofia UNIX
A filosofia de design do UNIX teve grande influencia no desenvolvimento de software moderno:
- Combinar programas pequenos: Criar programas que fazem uma coisa bem e combina-los
- Streams de texto: Usar texto para comunicacao entre programas
- Prototipagem rapida: Primeiro fazer funcionar, depois melhorar
“Esta e a filosofia UNIX. Escreva programas que facam uma coisa bem” — Doug McIlroy
Terminal e Shell
O que e Terminal
Terminal (emulador de terminal) e uma aplicacao que fornece interface de linha de comando.
- macOS: Terminal.app, iTerm2
- Windows: Windows Terminal, PowerShell
- Linux: GNOME Terminal, Konsole
O que e Shell
Shell e um programa que interpreta comandos do usuario e os transmite ao SO.
| Shell | Descricao |
|---|---|
| bash | Mais comum. Padrao do Linux/macOS (antigo macOS) |
| zsh | Padrao do macOS Catalina em diante. Compativel com bash |
| fish | Rico em recursos amigaveis ao usuario |
| sh | Shell padrao POSIX. Alta portabilidade |
# Verificar o shell atual
echo $SHELL
Operacoes Basicas de Diretorio
pwd - Verificar localizacao atual
pwd (Print Working Directory) permite verificar o diretorio atual.
$ pwd
/home/username
Curiosidade: No UNIX, diretorios tambem sao tratados como “arquivos”. Um diretorio e um “arquivo especial que contem links para outros arquivos”.
ls - Listar arquivos
ls lista os arquivos em um diretorio.
# Listagem basica
$ ls
# Listagem detalhada (permissoes, tamanho, etc.)
$ ls -l
# Mostrar arquivos ocultos
$ ls -a
# Detalhado + arquivos ocultos
$ ls -la
# Exibicao de tamanho legivel
$ ls -lh
Lendo a saida de ls -l
-rw-r--r-- 1 user group 4096 Jan 1 12:00 file.txt
| Parte | Significado |
|---|---|
- | Tipo de arquivo (-:normal, d:diretorio, l:link) |
rw-r--r-- | Permissoes (owner/group/others) |
1 | Numero de hard links |
user | Proprietario |
group | Grupo proprietario |
4096 | Tamanho do arquivo |
Jan 1 12:00 | Data de modificacao |
Documentacao oficial: GNU Coreutils - ls
cd - Navegar entre diretorios
# Ir para diretorio especifico
$ cd /var/log
# Voltar ao diretorio home
$ cd ~
$ cd
# Ir para diretorio pai
$ cd ..
# Voltar ao diretorio anterior
$ cd -
Tipos de Caminho
| Tipo | Descricao | Exemplo |
|---|---|---|
| Caminho absoluto | Caminho completo comecando da raiz (/) | /home/user/docs |
| Caminho relativo | Caminho relativo a localizacao atual | ./docs ou ../other |
Notacao especial de diretorio:
.- Diretorio atual..- Diretorio pai~- Diretorio home/- Diretorio raiz
Criando e Deletando Arquivos e Diretorios
mkdir - Criar diretorio
# Criar diretorio
$ mkdir myproject
# Criar hierarquia profunda de uma vez (-p: parents)
$ mkdir -p myproject/src/components
# Criar com permissoes definidas
$ mkdir -m 755 secure_dir
Melhor pratica: Ao criar multiplos niveis, sempre use a opcao
-p. Nao gera erro mesmo se o diretorio ja existir.
touch - Criar arquivo
touch originalmente “atualiza o timestamp do arquivo”, mas cria um arquivo vazio se ele nao existir.
# Criar arquivo vazio
$ touch index.html
# Criar multiplos arquivos de uma vez
$ touch style.css script.js
# Definir timestamp para data/hora especifica
$ touch -t 202501011200 file.txt
Documentacao oficial: GNU Coreutils - touch
rm - Deletar arquivos e diretorios
# Deletar arquivo
$ rm file.txt
# Deletar diretorio (incluindo conteudo)
$ rm -r mydir
# Deletar sem confirmacao (cuidado!)
$ rm -rf mydir
# Exibir confirmacao antes de deletar
$ rm -i file.txt
Aviso:
rm -rfdeleta imediatamente sem confirmacao. Nao vai para a lixeira. Tenha muito cuidado ao usar perto de/ou com expansao de variaveis (rm -rf $DIR/).
Melhores Praticas para Delecao Segura
# 1. Primeiro verificar com ls
ls /path/to/delete
# 2. Deletar com confirmacao usando -i
rm -ri /path/to/delete
# 3. Configurar alias (adicionar ao ~/.bashrc)
alias rm='rm -i'
Copiando e Movendo Arquivos
cp - Copiar
# Copiar arquivo
$ cp original.txt copy.txt
# Copiar diretorio (-r: recursive)
$ cp -r mydir mydir_backup
# Copiar multiplos arquivos para diretorio
$ cp file1.txt file2.txt destination/
# Preservar timestamp e permissoes
$ cp -p original.txt copy.txt
# Confirmacao de sobrescrita
$ cp -i source.txt dest.txt
Documentacao oficial: GNU Coreutils - cp
mv - Mover e Renomear
mv e usado tanto para mover quanto para renomear arquivos.
# Mover arquivo
$ mv file.txt /path/to/destination/
# Renomear arquivo
$ mv oldname.txt newname.txt
# Mover diretorio
$ mv mydir /path/to/destination/
# Confirmacao de sobrescrita
$ mv -i source.txt dest.txt
Visualizando Conteudo de Arquivos
| Comando | Descricao | Exemplo |
|---|---|---|
cat | Exibir arquivo inteiro | cat file.txt |
head | Exibir primeiras N linhas (padrao 10) | head -n 20 file.txt |
tail | Exibir ultimas N linhas | tail -f log.txt |
less | Exibir com paginador (rolavel) | less file.txt |
more | Paginador antigo | more file.txt |
Usos avancados do cat
# Exibir numeros de linha
$ cat -n file.txt
# Concatenar multiplos arquivos
$ cat file1.txt file2.txt > combined.txt
# Comprimir linhas vazias
$ cat -s file.txt
Operacoes do less
less permite navegar interativamente pelo arquivo:
Space/f- Avancar 1 paginab- Voltar 1 pagina/pattern- Buscar para frente?pattern- Buscar para trasn- Proximo resultadoN- Resultado anteriorg- Ir para inicio do arquivoG- Ir para fim do arquivoq- Sair
Curiosidade: O nome
lessvem de “less is more” (menos e mais). E uma versao melhorada do comandomore.
Monitorando logs com tail -f
# Monitorar log em tempo real
$ tail -f /var/log/syslog
# Monitorar multiplos arquivos simultaneamente
$ tail -f file1.log file2.log
# Comecar monitoramento das ultimas 100 linhas
$ tail -n 100 -f app.log
Fundamentos de Permissoes
Lendo Permissoes
-rwxr-xr--
| Parte | Significado |
|---|---|
- | Tipo de arquivo |
rwx | owner (proprietario): todas permitidas |
r-x | group (grupo): leitura+execucao |
r-- | others (outros): apenas leitura |
| Simbolo | Valor | Significado |
|---|---|---|
| r | 4 | leitura (read) |
| w | 2 | escrita (write) |
| x | 1 | execucao (execute) |
| - | 0 | sem permissao |
chmod - Alterar permissoes
# Especificar com numeros (755 = rwxr-xr-x)
$ chmod 755 script.sh
# Especificar com simbolos
$ chmod u+x script.sh # Adicionar execucao ao proprietario
$ chmod g-w file.txt # Remover escrita do grupo
$ chmod o=r file.txt # Definir apenas leitura para outros
$ chmod a+r file.txt # Adicionar leitura para todos
Documentacao oficial: GNU Coreutils - chmod
Permissoes Comuns
| Permissao | Uso |
|---|---|
| 755 | Scripts executaveis |
| 644 | Arquivos normais |
| 600 | Arquivos confidenciais (chaves SSH, etc.) |
| 700 | Diretorios privados |
Pratica: Criando Estrutura de Projeto
Vamos criar uma estrutura basica de projeto web usando os comandos aprendidos.
# Criar diretorio do projeto
mkdir -p mywebsite/{css,js,images}
# Criar arquivos basicos
touch mywebsite/index.html
touch mywebsite/css/style.css
touch mywebsite/js/main.js
# Verificar estrutura
ls -R mywebsite
# Se tiver o comando tree, exibicao mais legivel
tree mywebsite
Configuracao Pratica de Projeto
# Exemplo de criacao de projeto Node.js
mkdir -p my-app/{src/{components,utils,styles},tests,docs}
touch my-app/{package.json,README.md,.gitignore}
touch my-app/src/index.js
# Verificar estrutura
tree my-app
# my-app
# ├── README.md
# ├── docs
# ├── package.json
# ├── src
# │ ├── components
# │ ├── index.js
# │ ├── styles
# │ └── utils
# └── tests
Erros Comuns e Troubleshooting
Nomes de Arquivo com Espacos
# Errado: nome do arquivo sera dividido pelo espaco
$ rm my file.txt # Tenta deletar "my" e "file.txt"
# Correto: usar aspas
$ rm "my file.txt"
$ rm 'my file.txt'
# Ou escapar com backslash
$ rm my\ file.txt
Erros de Permissao
# Em caso de erro Permission denied
$ sudo command # Executar com privilegios de administrador
# Verificar permissoes do arquivo
$ ls -l file.txt
# Se nao tiver permissao de execucao
$ chmod +x script.sh
Arquivo Nao Encontrado
# Buscar arquivo
$ find /path -name "filename"
# Buscar com correspondencia parcial
$ find . -name "*.txt"
# Comando locate (usa banco de dados, mais rapido)
$ locate filename
Atalhos e Dicas Uteis
Atalhos do Terminal
| Atalho | Descricao |
|---|---|
Tab | Autocompletar comando ou caminho |
Ctrl + C | Interromper comando em execucao |
Ctrl + L | Limpar tela (igual a clear) |
Ctrl + A | Ir para inicio da linha |
Ctrl + E | Ir para fim da linha |
Ctrl + U | Deletar a esquerda do cursor |
Ctrl + K | Deletar a direita do cursor |
Ctrl + R | Buscar no historico de comandos |
seta cima / seta baixo | Navegar historico de comandos |
!! | Reexecutar ultimo comando |
Combinando Comandos
# Pipe (|): passar saida de um comando como entrada do proximo
$ ls -la | grep ".txt"
# Redirecionamento (>): salvar saida em arquivo
$ ls > filelist.txt
# Append (>>): adicionar ao arquivo
$ echo "new line" >> file.txt
# Encadeamento de comandos
$ mkdir newdir && cd newdir # Executar proximo apenas se sucesso
$ command1 || command2 # Executar proximo se falhar
$ command1 ; command2 # Executar em sequencia
Proximos Passos
Apos dominar os comandos basicos, aprenda shell scripting para automatizar tarefas.
- Introducao a Shell Scripting → Introducao a Shell Script
- Aprender expressoes regulares → Uso de grep, sed, awk
Links de Referencia
Documentacao Oficial
- GNU Coreutils Manual - Referencia oficial de comandos basicos
- The Linux Documentation Project - Documentacao geral sobre Linux
- Linux man pages - Man pages online
Livros e Artigos Recomendados
- The Linux Command Line (Ingles/Gratuito) - Classico de introducao a linha de comando
- Explainshell - Site que explica comandos inseridos
Cheat Sheets e Ferramentas
- Linux Command Cheat Sheet - Lista de comandos mais usados
- tldr pages - Versao simplificada de man pages. Use como
tldr ls - cheat.sh - Exibe cheat sheet com
curl cheat.sh/ls