Introducao aos Comandos Basicos do Linux

Iniciante | 60 min leitura | 2025.12.02

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:

  1. Combinar programas pequenos: Criar programas que fazem uma coisa bem e combina-los
  2. Streams de texto: Usar texto para comunicacao entre programas
  3. 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.

ShellDescricao
bashMais comum. Padrao do Linux/macOS (antigo macOS)
zshPadrao do macOS Catalina em diante. Compativel com bash
fishRico em recursos amigaveis ao usuario
shShell 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
ParteSignificado
-Tipo de arquivo (-:normal, d:diretorio, l:link)
rw-r--r--Permissoes (owner/group/others)
1Numero de hard links
userProprietario
groupGrupo proprietario
4096Tamanho do arquivo
Jan 1 12:00Data 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

TipoDescricaoExemplo
Caminho absolutoCaminho completo comecando da raiz (/)/home/user/docs
Caminho relativoCaminho 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 -rf deleta 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

ComandoDescricaoExemplo
catExibir arquivo inteirocat file.txt
headExibir primeiras N linhas (padrao 10)head -n 20 file.txt
tailExibir ultimas N linhastail -f log.txt
lessExibir com paginador (rolavel)less file.txt
morePaginador antigomore 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 pagina
  • b - Voltar 1 pagina
  • /pattern - Buscar para frente
  • ?pattern - Buscar para tras
  • n - Proximo resultado
  • N - Resultado anterior
  • g - Ir para inicio do arquivo
  • G - Ir para fim do arquivo
  • q - Sair

Curiosidade: O nome less vem de “less is more” (menos e mais). E uma versao melhorada do comando more.

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--
ParteSignificado
-Tipo de arquivo
rwxowner (proprietario): todas permitidas
r-xgroup (grupo): leitura+execucao
r--others (outros): apenas leitura
SimboloValorSignificado
r4leitura (read)
w2escrita (write)
x1execucao (execute)
-0sem 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

PermissaoUso
755Scripts executaveis
644Arquivos normais
600Arquivos confidenciais (chaves SSH, etc.)
700Diretorios 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

AtalhoDescricao
TabAutocompletar comando ou caminho
Ctrl + CInterromper comando em execucao
Ctrl + LLimpar tela (igual a clear)
Ctrl + AIr para inicio da linha
Ctrl + EIr para fim da linha
Ctrl + UDeletar a esquerda do cursor
Ctrl + KDeletar a direita do cursor
Ctrl + RBuscar no historico de comandos
seta cima / seta baixoNavegar 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.

Documentacao Oficial

Livros e Artigos Recomendados

Cheat Sheets e Ferramentas

← Voltar para a lista