Objetivos de Aprendizagem
Este é o segundo treino com os mesmos nove comandos do Exercício 01 —
pwd, ls, mkdir, cd, touch,
cat, echo, rm e mv. O cenário é outro,
a árvore de diretórios é outra e algumas opções novas aparecem
(ls -F, ls -t, ls -1, mkdir -pv,
echo -e, echo -n, cat -b, mv -v).
A repetição é proposital: fluência se constrói repetindo em contextos diferentes.
Ao final, você será capaz de:
- Executar os nove comandos sem consultar o roteiro, prevendo a saída antes de apertar Enter
- Escolher entre
ls -l,-a,-h,-t,-F,-1e-Rconforme a pergunta que você quer responder - Montar árvores de vários níveis com um único
mkdir -pe conferir comls -R - Navegar com caminhos absolutos, relativos,
..,~e-sem se perder - Escrever arquivos inteiros com
echo, dominando>,>>,-ne-e - Entender a diferença prática entre aspas simples e aspas duplas
- Concatenar arquivos com
cate numerar linhas com-ne-b - Mover e renomear arquivos e diretórios com
mv, inclusive vários de uma vez - Apagar com
rmde forma consciente, validando curingas comlsantes - Diagnosticar sozinho as mensagens de erro mais comuns do terminal
Antes de Começar
Ambiente necessário
- Acesso à sua VM Ubuntu via SSH ou terminal local
- Usuário comum (nenhum passo precisa de
root) - Shell Bash — confirme com
echo $SHELL - Nada a instalar: os 9 comandos existem em qualquer Linux
- Recomendado: ter feito o Exercício 01 antes
Regras do jogo
- Digite os comandos — não copie e cole. A memória é muscular.
- Nada de editores (
nano,vim): todo conteúdo vem deecho - Antes do Enter, diga em voz alta o que espera ver na tela
- Saída diferente do esperado? Pare e descubra o motivo antes de seguir
- Tab autocompleta e ↑ repete o comando anterior
sudo em nenhum
momento. Todo o trabalho acontece dentro do seu diretório pessoal ($HOME)
— nada aqui pode quebrar o sistema.
rm:
o terminal não tem lixeira. O que rm apaga, some. Neste exercício
você só apagará arquivos que você mesmo criou, dentro de
~/radio-onda-livre. Nunca execute rm -rf em um caminho que você não
digitou por inteiro e conferiu com ls.
Cronograma do Exercício
Mapa da Estrutura Final
Você é o novo operador de estúdio da Rádio Comunitária "Onda Livre". O acervo digital da rádio está espalhado e sem organização nenhuma. Sua missão é criar, preencher, reorganizar e limpar a pasta de trabalho da emissora — usando apenas a linha de comando. Este é o destino final:
/home/aluno/radio-onda-livre/
├── acervo/
│ ├── musicas/
│ │ ├── 2026-09-01-playlist.txt
│ │ ├── 2026-09-02-playlist.txt
│ │ └── 2026-09-03-playlist.txt
│ └── vinhetas/
│ └── vinhetas.txt
├── equipe/
│ └── operadores.txt
├── programacao/
│ ├── grade-do-dia.txt
│ ├── grade-manha.txt
│ └── grade-tarde.txt
└── roteiros/
├── roteiro-abertura.txt
└── roteiro-encerramento.txt
rascunhos/ com arquivos
descartáveis — ele será apagado na Parte F. Se ele ainda existir na
conferência final, algum passo foi pulado. Ao final devem restar
4 diretórios na raiz e 10 arquivos no total.
Roteiro Passo a Passo
Todo turno de trabalho no terminal começa com as mesmas duas perguntas:
onde eu estou? e o que existe aqui?. No Exercício 01 você respondeu isso
com pwd e ls. Aqui você vai repetir — e conhecer quatro opções
novas do ls que resolvem perguntas diferentes.
Passo 1 — Onde você está (pwd)
$ pwd /home/aluno # O shell guarda esse caminho na variável PWD — veja com echo $ echo $PWD /home/aluno
O terminal sempre abre no seu diretório pessoal (home). É o único lugar do sistema onde você, como usuário comum, cria e apaga o que quiser. Todo o exercício acontece a partir daqui.
Passo 2 — O que existe aqui (ls e ls -F)
$ ls (se você fez o Exercício 01, verá estacao-ares e desafio01; se não, talvez nada) # -F acrescenta um marcador de tipo no final de cada nome $ ls -F /etc apt/ hostname hosts passwd rc0.d/ resolv.conf@ ssh/
-F: / diretório, @ link simbólico,
* executável, nada = arquivo comum. É a forma mais rápida de saber
"isso é pasta ou arquivo?" sem pedir a listagem longa.
Passo 3 — Listagem longa: leia cada coluna (ls -l)
$ ls -l /etc/hosts -rw-r--r-- 1 root root 221 Sep 1 08:12 /etc/hosts # -rw-r--r-- 1 root root 221 Sep 1 08:12 /etc/hosts # │ │ │ │ │ │ │ # │ │ │ │ │ │ └── nome # │ │ │ │ │ └───────────────── data/hora da última modificação # │ │ │ │ └─────────────────────────── tamanho em bytes # │ │ │ └───────────────────────────────── grupo dono # │ │ └─────────────────────────────────────── usuário dono # │ └──────────────────────────────────────────── nº de links # └───────────────────────────────────────────────────────── tipo + permissões
O primeiro caractere é o tipo: - arquivo comum,
d diretório, l link simbólico. Os nove caracteres seguintes são
as permissões (dono, grupo, outros) — assunto do módulo de permissões, mas você já pode
ir reparando nelas.
Passo 4 — Arquivos ocultos e os diretórios . e ..
$ ls -a . .. .bash_logout .bashrc .profile $ ls -la total 20 drwxr-x--- 2 aluno aluno 4096 Sep 1 08:02 . drwxr-xr-x 3 root root 4096 Sep 1 07:14 .. -rw-r--r-- 1 aluno aluno 220 Sep 1 07:14 .bash_logout -rw-r--r-- 1 aluno aluno 3771 Sep 1 07:14 .bashrc -rw-r--r-- 1 aluno aluno 807 Sep 1 07:14 .profile
Nome que começa com ponto é oculto — não existe "atributo escondido" no
Linux, é apenas uma convenção do nome. E note as duas primeiras linhas: . é o
próprio diretório atual, .. é o pai. Eles existem em toda
pasta do sistema e são a base da navegação relativa.
Passo 5 — Quatro perguntas, quatro opções do ls
# "Quanto ocupa?" → -lh deixa os tamanhos legíveis (K, M, G) $ ls -lh /var/log | head -4 total 340K -rw-r--r-- 1 root root 32K Sep 1 08:00 alternatives.log drwxr-xr-x 2 root root 4.0K Sep 1 07:14 apt -rw-rw---- 1 root utmp 0 Sep 1 07:14 btmp # "O que mudou por último?" → -t ordena por data, do mais novo ao mais velho $ ls -lt /etc | head -4 total 512 -rw-r--r-- 1 root root 221 Sep 1 08:12 hosts -rw-r--r-- 1 root root 12 Sep 1 07:14 hostname drwxr-xr-x 7 root root 4096 Sep 1 07:14 apt # "Só os nomes, um por linha" → -1 (o número um, não a letra L) $ ls -1 /etc | head -3 adduser.conf alternatives apt # Você olhou para vários lugares, mas continua no mesmo $ pwd /home/aluno
ls -lah é o mesmo que
ls -l -a -h. E ls -ltr (-r inverte a ordem) coloca o
arquivo mais recente por último — o truque preferido de quem lê logs.
/ do
ls -F significa? (3) qual opção usar para achar o arquivo modificado mais
recentemente? (4) por que ls às vezes não imprime nada?
Passo 6 — Crie o diretório da rádio (mkdir)
# Sempre confirme onde você está ANTES de criar qualquer coisa $ pwd /home/aluno $ mkdir radio-onda-livre $ ls -ld radio-onda-livre drwxr-xr-x 2 aluno aluno 4096 Sep 1 08:10 radio-onda-livre
ls -d mostra o próprio diretório em vez de listar o conteúdo dele —
útil justamente para conferir permissões e tipo de uma pasta recém-criada. Repare no
d inicial e no tamanho 4096: um diretório vazio já ocupa um bloco,
porque ele é um arquivo especial que guarda a lista de nomes de dentro dele.
Passo 7 — Entre e confirme (cd + pwd)
$ cd radio-onda-livre $ pwd /home/aluno/radio-onda-livre $ ls -a . .. # pasta nova: só ela mesma e o pai
cd não imprime nada quando dá certo. Por isso o par
cd + pwd é um hábito que vale ouro no começo — e continua valendo
depois, antes de qualquer comando destrutivo.
Passo 8 — Vários diretórios em um comando só
# mkdir aceita quantos nomes você quiser, separados por espaço $ mkdir programacao roteiros equipe $ ls equipe programacao roteiros
ls lista em ordem alfabética, não na ordem de criação.
Nomes no Linux são sensíveis a maiúsculas: Equipe e
equipe seriam duas pastas distintas. Evite espaços nos nomes — use
- ou _.
Passo 9 — Provoque um erro de propósito
# Criar uma pasta DENTRO de outra que ainda não existe $ mkdir acervo/musicas mkdir: cannot create directory 'acervo/musicas': No such file or directory
Erro no terminal é informação, não bronca. Leia devagar: a mensagem diz que o
caminho intermediário (acervo) não existe.
Saber ler mensagens de erro é metade do trabalho de um administrador.
Passo 10 — Resolva com mkdir -p (e veja o que ele fez com -v)
# -p = "parents": cria todos os diretórios que faltarem no caminho # -v = "verbose": diz em voz alta o que criou $ mkdir -pv acervo/musicas acervo/vinhetas mkdir: created directory 'acervo' mkdir: created directory 'acervo/musicas' mkdir: created directory 'acervo/vinhetas' # A pasta de trabalho descartável, com dois níveis $ mkdir -p rascunhos/testes $ ls rascunhos testes # Bônus do -p: rodar de novo NÃO dá erro (por isso ele vive em scripts) $ mkdir -p acervo/musicas $ mkdir acervo/musicas mkdir: cannot create directory 'acervo/musicas': File exists
mkdir -pv só anunciou acervo uma vez: no segundo
argumento a pasta já existia e ele seguiu em silêncio. Idempotência —
"rodar de novo não muda o resultado" — é uma propriedade valiosíssima em automação.
Passo 11 — Veja a árvore inteira (ls -R)
$ ls -R .: acervo equipe programacao rascunhos roteiros ./acervo: musicas vinhetas ./acervo/musicas: ./acervo/vinhetas: ./equipe: ./programacao: ./rascunhos: testes ./rascunhos/testes: ./roteiros:
-R significa recursivo: desce em todas as subpastas. Guarde essa
letra — ela reaparece, muito mais perigosa, no rm -r da Parte F.
Passo 12 — Navegação: absoluto, relativo, .., ~ e -
# 1) Relativo: a partir de onde você está agora $ cd acervo/musicas $ pwd /home/aluno/radio-onda-livre/acervo/musicas # 2) .. sobe um nível; pode ser encadeado $ cd .. $ pwd /home/aluno/radio-onda-livre/acervo $ cd ../.. $ pwd /home/aluno # 3) Absoluto: começa com / e funciona de qualquer lugar $ cd /home/aluno/radio-onda-livre/programacao $ pwd /home/aluno/radio-onda-livre/programacao # 4) ~ é atalho para o SEU home (mesmo dentro de um caminho maior) $ cd ~/radio-onda-livre/roteiros $ pwd /home/aluno/radio-onda-livre/roteiros # 5) cd - volta ao diretório ANTERIOR (e imprime o destino) $ cd - /home/aluno/radio-onda-livre/programacao # cd sem argumento nenhum volta para o home $ cd $ pwd /home/aluno # Volte para o projeto — todos os próximos passos partem daqui $ cd ~/radio-onda-livre $ pwd /home/aluno/radio-onda-livre
acervo/musicas, acervo/vinhetas, equipe,
programacao, roteiros e rascunhos/testes.
Confirme com ls -R e termine com pwd mostrando
/home/aluno/radio-onda-livre.
Passo 13 — Crie arquivos vazios (touch)
# touch cria arquivos VAZIOS — vários de uma vez, como o mkdir $ touch programacao/grade-manha.txt programacao/grade-tarde.txt $ ls programacao grade-manha.txt grade-tarde.txt
Passo 14 — Confirme que estão mesmo vazios
$ ls -l programacao total 0 -rw-r--r-- 1 aluno aluno 0 Sep 1 08:24 grade-manha.txt -rw-r--r-- 1 aluno aluno 0 Sep 1 08:24 grade-tarde.txt
Tamanho 0 bytes e total 0: os arquivos existem, têm nome,
dono, permissões e data — mas nenhum conteúdo. Arquivo vazio é perfeitamente normal no
Linux e muito usado como marcador ("já processei este dia") ou placeholder.
Passo 15 — A outra função do touch: atualizar o horário
# Veja o horário atual do arquivo, com segundos $ ls -l --time-style=+%H:%M:%S programacao/grade-manha.txt -rw-r--r-- 1 aluno aluno 0 08:24:11 programacao/grade-manha.txt # Espere 5 segundos e "toque" no arquivo de novo $ sleep 5 $ touch programacao/grade-manha.txt $ ls -l --time-style=+%H:%M:%S programacao/grade-manha.txt -rw-r--r-- 1 aluno aluno 0 08:24:16 programacao/grade-manha.txt # Agora o -t da Parte A faz sentido: o mais recente aparece primeiro $ ls -t programacao grade-manha.txt grade-tarde.txt
touch = "tocar". Se o arquivo não existe,
ele é criado; se já existe, só a data de modificação muda e o
conteúdo é preservado. Por isso touch nunca destrói dados —
ao contrário do > que você verá no passo 19.
Passo 16 — As fichas de playlist dos três dias
$ touch acervo/musicas/2026-09-01-playlist.txt acervo/musicas/2026-09-02-playlist.txt acervo/musicas/2026-09-03-playlist.txt $ ls -l acervo/musicas total 0 -rw-r--r-- 1 aluno aluno 0 Sep 1 08:26 2026-09-01-playlist.txt -rw-r--r-- 1 aluno aluno 0 Sep 1 08:26 2026-09-02-playlist.txt -rw-r--r-- 1 aluno aluno 0 Sep 1 08:26 2026-09-03-playlist.txt
AAAA-MM-DD no começo do nome não são
capricho: como o ls ordena alfabeticamente, esse formato faz a ordem alfabética
coincidir com a ordem cronológica. É a convenção padrão (ISO 8601) para nomear arquivos.
Passo 17 — Dois arquivos, um deles no lugar errado (de propósito)
# A ficha da equipe vai para o lugar certo $ touch equipe/operadores.txt # Confirme que você está na RAIZ do projeto $ pwd /home/aluno/radio-onda-livre # E a lista de vinhetas nasce aqui na raiz — consertamos na Parte E $ touch vinhetas.txt $ ls -F acervo/ equipe/ programacao/ rascunhos/ roteiros/ vinhetas.txt # O curinga * lista tudo que casa com o padrão $ ls acervo/musicas/*.txt acervo/musicas/2026-09-01-playlist.txt acervo/musicas/2026-09-02-playlist.txt acervo/musicas/2026-09-03-playlist.txt
programacao/, 3 em acervo/musicas/, 1 em equipe/ e
1 solto na raiz do projeto. Todos com 0 bytes. Confira com
ls -lR | grep -c '^-' (deve responder 7).
Passo 18 — echo: o comando que só sabe falar
# echo imprime na tela o texto que você der a ele $ echo Radio Onda Livre Radio Onda Livre # Sem aspas o shell colapsa os espaços múltiplos $ echo Radio Onda Livre Radio Onda Livre # Com aspas, o texto vai exatamente como está $ echo "Radio Onda Livre" Radio Onda Livre # Aspas DUPLAS expandem variáveis; aspas SIMPLES não expandem nada $ echo "Operador: $USER — Estudio: $HOME" Operador: aluno — Estudio: /home/aluno $ echo 'Operador: $USER' Operador: $USER # -n não pula a linha no final; -e interpreta \n, \t e afins $ echo -n "sem quebra de linha" sem quebra de linha$ # o prompt cola no texto $ echo -e "coluna1\tcoluna2\nvalor1\tvalor2" coluna1 coluna2 valor1 valor2
Passo 19 — Redirecione a fala para dentro de um arquivo (>)
# > pega a saída do comando e joga DENTRO do arquivo, em vez da tela $ echo "operador01=Ana" > equipe/operadores.txt # Nenhuma saída na tela — o texto foi para o arquivo $ ls -l equipe/operadores.txt -rw-r--r-- 1 aluno aluno 15 Sep 1 08:37 equipe/operadores.txt
O arquivo saiu de 0 para 15 bytes: os 14 caracteres do texto mais o
caractere de fim de linha (\n) que o echo
acrescenta sozinho. Se o arquivo não existisse, > o criaria; como já
existia, o conteúdo anterior (vazio) foi descartado sem aviso.
Passo 20 — Leia o arquivo (cat)
$ cat equipe/operadores.txt operador01=Ana # cat em arquivo inexistente: mais uma mensagem para aprender a ler $ cat equipe/tecnicos.txt cat: equipe/tecnicos.txt: No such file or directory # cat em um DIRETÓRIO também reclama — e a mensagem é bem clara $ cat equipe cat: equipe: Is a directory
cat vem de concatenate. Ele foi criado para juntar
arquivos — mostrar um arquivo na tela é só o caso particular de "concatenar um
arquivo só". Você usará a função original dele no passo 24.
Passo 21 — Acrescente sem apagar o que já existe (>>)
# >> ACRESCENTA no final; > SOBRESCREVE tudo $ echo "operador02=Bruno" >> equipe/operadores.txt $ echo "operador03=Carla" >> equipe/operadores.txt $ echo "turno_madrugada=Carla" >> equipe/operadores.txt $ cat equipe/operadores.txt operador01=Ana operador02=Bruno operador03=Carla turno_madrugada=Carla # Agora a grade da manhã: primeira linha com >, o resto com >> $ echo "06:00 Despertar Comunitario" > programacao/grade-manha.txt $ echo "08:00 Jornal da Manha" >> programacao/grade-manha.txt $ echo "10:00 Musica Brasileira" >> programacao/grade-manha.txt $ cat programacao/grade-manha.txt 06:00 Despertar Comunitario 08:00 Jornal da Manha 10:00 Musica Brasileira
Passo 22 — Grade da tarde e leitura numerada (cat -n e -b)
$ echo "12:00 Almoco com Forro" > programacao/grade-tarde.txt $ echo "" >> programacao/grade-tarde.txt $ echo "14:00 Roda de Conversa" >> programacao/grade-tarde.txt $ echo "17:00 Esportes da Cidade" >> programacao/grade-tarde.txt # -n numera TODAS as linhas, inclusive as vazias $ cat -n programacao/grade-tarde.txt 1 12:00 Almoco com Forro 2 3 14:00 Roda de Conversa 4 17:00 Esportes da Cidade # -b numera só as linhas NÃO vazias $ cat -b programacao/grade-tarde.txt 1 12:00 Almoco com Forro 2 14:00 Roda de Conversa 3 17:00 Esportes da Cidade
echo "" >> arquivo acrescenta uma linha em branco —
o texto é vazio, mas o \n continua sendo escrito. É assim que se separa
blocos dentro de um arquivo usando só echo.
Passo 23 — A armadilha do > (experimento controlado)
# Um rascunho descartável só para o experimento $ echo "roteiro importante linha 1" > rascunhos/testes/roteiro.txt $ echo "roteiro importante linha 2" >> rascunhos/testes/roteiro.txt $ cat rascunhos/testes/roteiro.txt roteiro importante linha 1 roteiro importante linha 2 # Agora use > por engano, achando que era >> $ echo "ops" > rascunhos/testes/roteiro.txt $ cat rascunhos/testes/roteiro.txt ops
> só na primeira escrita de um
arquivo; >> em todas as seguintes. Na dúvida, >>.
Passo 24 — cat na função original: juntar arquivos
# Vários arquivos de uma vez: a saída sai emendada, na ordem dada $ cat programacao/grade-manha.txt programacao/grade-tarde.txt 06:00 Despertar Comunitario 08:00 Jornal da Manha 10:00 Musica Brasileira 12:00 Almoco com Forro 14:00 Roda de Conversa 17:00 Esportes da Cidade # Junte as duas grades em UM arquivo novo $ cat programacao/grade-manha.txt programacao/grade-tarde.txt > programacao/grade-completa.txt $ cat -b programacao/grade-completa.txt | tail -3 4 12:00 Almoco com Forro 5 14:00 Roda de Conversa 6 17:00 Esportes da Cidade # Preencha as três playlists (nenhum arquivo pode ficar com 0 bytes) $ echo "01 - Asa Branca" > acervo/musicas/2026-09-01-playlist.txt $ echo "02 - Ponteio" >> acervo/musicas/2026-09-01-playlist.txt $ echo "01 - Constelacao" > acervo/musicas/2026-09-02-playlist.txt $ echo "01 - Trem das Onze" > acervo/musicas/2026-09-03-playlist.txt # A lista de vinhetas (ainda na raiz — ela se muda na Parte E) $ echo "vinheta-abertura 8s" > vinhetas.txt $ echo "vinheta-hora-certa 4s" >> vinhetas.txt $ echo "vinheta-encerramento 6s" >> vinhetas.txt # E os dois roteiros, também na raiz de propósito $ echo "Boa noite, voce esta na Onda Livre." > abertura.txt $ echo "Ate amanha, obrigado por ouvir." > encerramento.txt $ ls -F abertura.txt acervo/ encerramento.txt equipe/ programacao/ rascunhos/ roteiros/ vinhetas.txt
cat a b > c emenda bytes, sem nenhuma
inteligência: se os dois arquivos tivessem cabeçalho, o cabeçalho apareceria duas vezes.
Filtrar isso é trabalho de grep, head e tail, que
você verá no próximo módulo.
> e >>;
(2) por que echo 'turno: $USER' não mostra seu nome de usuário;
(3) o que cat a b > c faz exatamente;
(4) a diferença entre cat -n e cat -b.
mv: renomear e mover são
a mesma operação. Um arquivo é um nome dentro de um diretório; mudar o nome ou
mudar o diretório é sempre "apagar a entrada antiga e escrever uma nova". Por isso o Linux
nem precisa de um comando rename separado.
Passo 25 — Renomear um arquivo
# Sintaxe: mv ORIGEM DESTINO — mesmo diretório = renomear $ mv -v programacao/grade-completa.txt programacao/grade-do-dia.txt renamed 'programacao/grade-completa.txt' -> 'programacao/grade-do-dia.txt' $ ls programacao grade-do-dia.txt grade-manha.txt grade-tarde.txt
O -v do mv usa a palavra renamed justamente porque, para
o sistema, mover e renomear são a mesma coisa. Adote o -v como hábito: ele é
gratuito e transforma um comando silencioso em um comando auditável.
Passo 26 — Mover o arquivo que ficou no lugar errado
# Lembra do vinhetas.txt criado na raiz no passo 17? Hora de arrumar. $ ls abertura.txt acervo encerramento.txt equipe programacao rascunhos roteiros vinhetas.txt # Quando o DESTINO é um diretório existente, o arquivo entra nele com o mesmo nome $ mv -v vinhetas.txt acervo/vinhetas/ renamed 'vinhetas.txt' -> 'acervo/vinhetas/vinhetas.txt' $ ls acervo/vinhetas vinhetas.txt
acervo/vinhetas/ não é obrigatória, mas é um
hábito excelente: ela deixa explícito "o destino é um diretório". Sem a barra, se você
errar o nome do diretório, o mv silenciosamente renomeia o arquivo em
vez de movê-lo — e você fica procurando um arquivo que "sumiu".
Passo 27 — Mover vários de uma vez e depois padronizar os nomes
# Com vários arquivos, o ÚLTIMO argumento TEM que ser um diretório $ mv -v abertura.txt encerramento.txt roteiros/ renamed 'abertura.txt' -> 'roteiros/abertura.txt' renamed 'encerramento.txt' -> 'roteiros/encerramento.txt' $ ls acervo equipe programacao rascunhos roteiros # Agora padronize o nome dos dois, com o prefixo "roteiro-" $ mv roteiros/abertura.txt roteiros/roteiro-abertura.txt $ mv roteiros/encerramento.txt roteiros/roteiro-encerramento.txt $ ls roteiros roteiro-abertura.txt roteiro-encerramento.txt # O curinga também funciona no mv — mas teste SEMPRE com ls antes $ ls roteiros/*.txt roteiros/roteiro-abertura.txt roteiros/roteiro-encerramento.txt
Passo 28 — Renomear um diretório inteiro
# mv funciona igual com diretórios — leva todo o conteúdo junto $ mv acervo acervo-2026 $ ls acervo-2026 equipe programacao rascunhos roteiros $ ls -R acervo-2026 acervo-2026: musicas vinhetas acervo-2026/musicas: 2026-09-01-playlist.txt 2026-09-02-playlist.txt 2026-09-03-playlist.txt acervo-2026/vinhetas: vinhetas.txt # nada se perdeu # Desfaça: volte ao nome original (a operação é simétrica) $ mv acervo-2026 acervo $ ls acervo equipe programacao rascunhos roteiros
mv copia e
apaga, e aí demora.
Passo 29 — O perigo silencioso do mv
# Dois arquivos de teste, com conteúdos diferentes $ echo "SOU O ARQUIVO A" > rascunhos/a.txt $ echo "SOU O ARQUIVO B" > rascunhos/b.txt $ cat rascunhos/a.txt rascunhos/b.txt SOU O ARQUIVO A SOU O ARQUIVO B # mv sobre um arquivo EXISTENTE sobrescreve sem perguntar nada $ mv rascunhos/a.txt rascunhos/b.txt $ ls rascunhos b.txt testes # a.txt sumiu... $ cat rascunhos/b.txt SOU O ARQUIVO A # ...e o conteúdo original de B foi destruído # As duas proteções que você deve adotar como hábito: $ echo "novo A" > rascunhos/a.txt $ mv -i rascunhos/a.txt rascunhos/b.txt mv: overwrite 'rascunhos/b.txt'? n # -i pergunta antes (responda n) $ mv -n rascunhos/a.txt rascunhos/b.txt $ ls rascunhos a.txt b.txt testes # -n simplesmente não sobrescreve, sem perguntar
acervo, equipe, programacao, rascunhos
e roteiros; acervo/musicas deve ter 3 playlists,
programacao 3 grades e roteiros
2 roteiros com prefixo. Confirme com ls -R.
rm não manda para a lixeira.
Ele remove o nome do arquivo do diretório e o espaço volta para o sistema. Não existe
"desfazer". Confira o caminho duas vezes antes do Enter — sempre.
Passo 30 — Apagar um arquivo (rm, rm -i, rm -v)
# Material descartável para a faxina $ touch rascunhos/corte1.log rascunhos/corte2.log rascunhos/corte3.log $ ls rascunhos a.txt b.txt corte1.log corte2.log corte3.log testes # rm simples: apaga e não diz nada $ rm rascunhos/corte1.log $ ls rascunhos a.txt b.txt corte2.log corte3.log testes # -i pergunta antes de cada arquivo (responda y) $ rm -i rascunhos/corte2.log rm: remove regular empty file 'rascunhos/corte2.log'? y # -v mostra o que foi apagado — ótimo para auditoria $ rm -v rascunhos/corte3.log removed 'rascunhos/corte3.log'
Passo 31 — Vários arquivos e o cuidado com o curinga
# Vários nomes de uma vez $ rm -v rascunhos/a.txt rascunhos/b.txt removed 'rascunhos/a.txt' removed 'rascunhos/b.txt' # REGRA DE OURO: antes de rm com curinga, teste o padrão com ls $ touch rascunhos/x1.tmp rascunhos/x2.tmp rascunhos/manter.txt $ ls rascunhos/*.tmp rascunhos/x1.tmp rascunhos/x2.tmp # confirmado: só o que eu quero apagar $ rm -v rascunhos/*.tmp removed 'rascunhos/x1.tmp' removed 'rascunhos/x2.tmp' $ ls rascunhos manter.txt testes # o que não casava com o padrão sobreviveu
rm -rf / (apaga a raiz), rm -rf * executado no diretório errado
(por isso pwd antes!) e rm -rf / home/aluno/x — um espaço a mais
depois da barra transforma o comando em "apague a raiz e a pasta x".
Passo 32 — Diretórios: rmdir vs. rm -r
# rm comum se recusa a apagar diretório — é uma proteção $ rm rascunhos rm: cannot remove 'rascunhos': Is a directory # rmdir só funciona em diretório VAZIO — é a forma mais segura $ rmdir rascunhos/testes rmdir: failed to remove 'rascunhos/testes': Directory not empty # Por quê? O roteiro.txt do passo 23 ainda está lá dentro $ ls rascunhos/testes roteiro.txt $ rm rascunhos/testes/roteiro.txt $ rmdir rascunhos/testes # agora sim: o diretório está vazio $ ls rascunhos manter.txt # Em diretório com conteúdo, rmdir se recusa (e ainda bem) $ rmdir rascunhos rmdir: failed to remove 'rascunhos': Directory not empty $ rmdir acervo rmdir: failed to remove 'acervo': Directory not empty # seu acervo está a salvo
rmdir como um cinto de segurança: ele só funciona
quando não há nada a perder. Sempre que você acha que um diretório está vazio,
use rmdir — se ele reclamar, você acabou de evitar um acidente.
Passo 33 — A faxina final com rm -r
# SEMPRE confira onde você está e o que exatamente vai apagar $ pwd /home/aluno/radio-onda-livre $ ls -R rascunhos rascunhos: manter.txt # -r = recursivo: apaga o diretório e TUDO que houver dentro $ rm -rv rascunhos removed 'rascunhos/manter.txt' removed directory 'rascunhos' $ ls -F acervo/ equipe/ programacao/ roteiros/ # rascunhos/ não existe mais
rmdir, rm -r e rm -rf, e diga quais dois comandos
você digita antes de qualquer rm com curinga.
Conferência Final
Rode os comandos abaixo e compare com a saída esperada:
$ cd ~/radio-onda-livre $ pwd /home/aluno/radio-onda-livre $ ls -R .: acervo equipe programacao roteiros ./acervo: musicas vinhetas ./acervo/musicas: 2026-09-01-playlist.txt 2026-09-02-playlist.txt 2026-09-03-playlist.txt ./acervo/vinhetas: vinhetas.txt ./equipe: operadores.txt ./programacao: grade-do-dia.txt grade-manha.txt grade-tarde.txt ./roteiros: roteiro-abertura.txt roteiro-encerramento.txt # Contagem rápida: 4 diretórios na raiz e 10 arquivos no total $ ls -lR | grep -c '^-' 10 # Nenhum arquivo pode estar com 0 bytes — esta busca não deve achar nada $ ls -lR | grep ' 0 ' (nenhuma saída = tudo tem conteúdo)
Autoavaliação — marque o que você concluiu
- Fiz o exercício inteiro sem consultar o Exercício 01
- Sei escolher entre
ls -l,-a,-h,-t,-F,-1,-de-Rconforme a pergunta - Criei uma árvore de dois níveis com um único
mkdir -pe entendi por que ele é idempotente - Navego entre caminho absoluto, relativo,
..,~e-sem me perder - Usei
touchtanto para criar quanto para atualizar a data de um arquivo - Escrevi arquivos inteiros só com
echo, incluindo linha em branco e-ecom\t - Perdi conteúdo de propósito com
>e sei exatamente por quê - Concatenei arquivos com
cat a b > ce sei a diferença entre-ne-b - Movi, renomeei e padronizei nomes com
mv, usando-vpor hábito - Vi o
mvsobrescrever sem avisar e conheço-ie-n - Testei o curinga com
lsantes de usá-lo comrm - Sei quando usar
rmdire quando usarrm -r - A estrutura final bate exatamente com a saída de
ls -Racima
Desafio Individual
Duração: 20 minutos |
Formato: Individual, sem consultar o roteiro acima |
Entregável: ~/desafio02/prova.txt
Missão
A rádio vai estrear um programa de madrugada e precisa de uma pasta própria. Monte a
estrutura abaixo em ~/desafio02 usando apenas os nove comandos
deste exercício (pwd, ls, mkdir, cd,
touch, cat, echo, rm, mv) e
os redirecionamentos > e >>. Nada de editores de texto.
~/desafio02/ ├── audio/ │ ├── trilhas/ │ │ └── trilha-madrugada.txt (3 linhas: 3 faixas) │ └── locucoes/ │ └── locucao-01.txt (2 linhas) ├── grade/ │ ├── grade-madrugada.txt (4 linhas: 00:00, 01:00, 02:00, 03:00) │ └── grade-final.txt (trilha + locução + grade, via cat) ├── docs/ │ └── LEIA-ME.txt (4 linhas: seu nome, data, nome do programa e objetivo) └── prova.txt (gerado no último passo)
Regras adicionais
- Crie
audio/trilhas,audio/locucoes,gradeedocscom um únicomkdir -p trilha-madrugada.txtdeve nascer na raiz de~/desafio02e chegar aaudio/trilhas/viamvlocucao-01.txtdeve nascer com outro nome (ex.:loc1.txt) e ser renomeado commvgrade-final.txttem que ser produzido por um únicocat ... > ...- Crie um diretório
temp/com pelo menos 2 arquivos e apague-o por completo antes do final - Use aspas duplas para incluir a data via
$(date +%F)noLEIA-ME.txt - Nenhum arquivo pode ficar com 0 bytes ao final (confira com
ls -lR)
Passo final — gerar a prova
$ cd ~/desafio02 $ echo "Aluno: SEU NOME AQUI" > prova.txt $ echo "Exercicio: 02 — O Acervo da Radio" >> prova.txt $ echo "Data: $(date '+%Y-%m-%d %H:%M')" >> prova.txt $ echo "Diretorio: $(pwd)" >> prova.txt $ echo "--- estrutura ---" >> prova.txt $ ls -lR >> prova.txt $ echo "--- conteudos ---" >> prova.txt $ cat audio/trilhas/trilha-madrugada.txt audio/locucoes/locucao-01.txt grade/grade-madrugada.txt docs/LEIA-ME.txt >> prova.txt # Confira o resultado antes de entregar $ cat prova.txt
Bônus (opcional)
- Monte a estrutura inteira sem nunca usar
cd— só com caminhos relativos e absolutos - Descubra com
ls -lquantos bytes tem cada arquivo e explique de onde vem cada byte (dica: o\nfinal conta) - Use
echo -epara escrevergrade-madrugada.txtinteiro com um únicoecho - Refaça o desafio do zero em menos de 5 minutos, apagando tudo antes com um único
rm -r ~/desafio02
Erros Comuns e Como Sair Deles
Referência Rápida dos 9 Comandos
pwd — onde estou
pwd → caminho atual completo echo $PWD → o mesmo, via variável
ls — o que existe
ls → nomes ls -l → detalhes (tipo, dono, tamanho) ls -a → inclui ocultos (.arquivo) ls -lh → tamanhos legíveis (K, M, G) ls -F → marca tipo (/ @ *) ls -t → ordena por data (-r inverte) ls -1 → um nome por linha ls -d DIR → a pasta, não o conteúdo ls -R → desce nas subpastas
cd — mudar de lugar
cd dir → entra (relativo) cd /a/b → caminho absoluto cd .. → sobe um nível cd ~ ou cd → vai para o home cd - → volta ao anterior
mkdir — criar pastas
mkdir a → uma pasta mkdir a b c → várias mkdir -p a/b/c → árvore inteira mkdir -pv a/b → e diz o que criou mkdir -p (2ª vez)→ não reclama
touch — criar / tocar
touch f → cria vazio touch f1 f2 f3 → vários touch f (existe) → só atualiza a data
echo — falar / escrever
echo texto → imprime na tela echo "$USER" → expande variável echo 'x' → literal, sem expansão echo -n x → sem quebra de linha echo -e "a\tb" → interpreta \t \n echo x > f → cria/SOBRESCREVE echo x >> f → ACRESCENTA no fim echo "" >> f → linha em branco
cat — ler / juntar
cat f → mostra o conteúdo cat -n f → numera todas as linhas cat -b f → numera só as não vazias cat a b → emenda na tela cat a b > c → emenda em arquivo
mv — mover / renomear
mv a b → renomeia mv a dir/ → move mv a b c dir/ → move vários mv -v → mostra o que fez mv -i → pergunta antes mv -n → nunca sobrescreve
rm — apagar (sem volta)
rm f → apaga arquivo rm -i f → pergunta antes rm -v f → mostra o que apagou rm -r dir → apaga pasta e conteúdo rmdir dir → só se estiver vazia
Checklist de Avaliação
Pontuação Sugerida
Completa os 33 passos seguindo o roteiro, mas ainda depende dele para navegar; não conclui o desafio sem ajuda.
Estrutura final correta, conclui o desafio consultando pouco, sabe explicar
> vs. >> e rmdir vs. rm -r.
Conclui o desafio e o bônus, prevê a saída antes de rodar e corrige qualquer erro lendo apenas a mensagem do terminal.
Entrega
O que enviar
- O conteúdo de
~/desafio02/prova.txt(copie e cole no formulário da disciplina) - A saída de
ls -R ~/radio-onda-livremostrando a estrutura final do roteiro - Uma resposta em 3 linhas: o que ficou mais fácil em relação ao Exercício 01 e o que ainda não ficou
$ echo "=== ENTREGA — Exercicio 02 — SEU NOME ===" > ~/entrega02.txt $ echo "Data: $(date '+%F %H:%M')" >> ~/entrega02.txt $ echo "--- radio-onda-livre ---" >> ~/entrega02.txt $ ls -R ~/radio-onda-livre >> ~/entrega02.txt $ echo "--- desafio02 ---" >> ~/entrega02.txt $ cat ~/desafio02/prova.txt >> ~/entrega02.txt $ cat ~/entrega02.txt
Recursos e Referências
LPI (referência principal)
Documentação no próprio sistema
- 📖
man ls·man mv·man rm·man touch - 📖
ls --help— resumo rápido das opções - 📖
help cd·help pwd·help echo(são builtins do Bash)
Leitura complementar
Orientações Gerais
Como aproveitar melhor este exercício
- Preveja antes de rodar. Diga em voz alta o que espera ver e só então aperte Enter — o aprendizado mora na diferença entre a previsão e o resultado
- Se você fez o Exercício 01, tente cada passo antes de ler a solução: o roteiro vira gabarito, não receita
- Use Tab obsessivamente: além de poupar digitação, ele prova que o caminho existe
- Rode
pwdsempre que sentir a menor dúvida — é gratuito e evita 90% dos acidentes - Quando um comando falhar, leia a mensagem inteira antes de tentar outra coisa
- Refaça o roteiro do zero (apague
~/radio-onda-livrecomrm -r) até conseguir sem olhar
Erros conceituais a evitar
- Achar que "nenhuma saída" é erro — no Unix, silêncio é sinal de sucesso
- Confundir
/(raiz do sistema) com~(seu home) - Usar
>quando queria>>— a causa nº 1 de conteúdo perdido - Digitar
rmcom curinga sem antes testar o padrão comls - Esquecer a barra final no destino do
mve acabar renomeando em vez de mover - Colocar espaços em nomes de arquivos: tecnicamente permitido, praticamente uma dor de cabeça
- Esquecer que nomes são sensíveis a maiúsculas:
Acervo≠acervo