linux.playground

trilha / arco 2 · mexer em arquivo

o que é cp e o que ele faz

você copiou a pasta para o backup e o cp não disse nada. uma versão antiga entrou por cima de uma nova. o -v mostrou a seta e não avisou que era por cima.

em poucos minutos: o que o cp faz, o que o -a preserva e o -r não, e o erro de copiar por cima sem saber. a pílula fica no final.

o vídeo desta aula sai em breve.
a aula já funciona: lê, treina no terminal e faz o quiz.

escolhe a camada

em uma frase

é tirar xerox. a xerox sai com a data de hoje, e se a gaveta de destino já tinha a folha, ela some.

para quem está começando

copia um arquivo para outro nome, ou para dentro de uma pasta. o original fica onde estava. para copiar pasta, precisa do -r.

a fonte da verdade

o cp lê o arquivo de origem e escreve num arquivo novo no destino, com outro inode. se o nome já existe no destino, ele abre aquele arquivo e escreve por cima. o -a copia também dono, data, permissões e links.

o número por trás do nome

a cópia nunca tem o mesmo inode: o ls -i mostra dois números. sem o -a, a cópia ganha a data de agora e o seu usuário como dono. com o -a, a data de modificação e as permissões vêm juntas.

agora você

terminal fechado

um linux de verdade, só seu, apagado quando você sai.

  1. copia o docker-compose.yml da pasta homelab para um arquivo novo, e compara as datas dos dois.

    cp homelab/docker-compose.yml compose-copia.yml && ls -l --time-style=long-iso homelab/docker-compose.yml compose-copia.yml

  2. tenta copiar a pasta homelab inteira, sem nenhuma opção. o que acontece?

  3. copia a pasta inteira com -a e compara de novo as datas.

    cp -a homelab copia-a && ls -l --time-style=long-iso homelab/docker-compose.yml copia-a/docker-compose.yml

  4. a pasta destino já tem um relatorio.txt. copia o relatorio.txt da origem para lá e olha o que ficou.

    cp origem/relatorio.txt destino/ && cat destino/relatorio.txt

  5. tenta de novo com -i, que pergunta antes de sobrescrever. responde n.

    cp -i origem/relatorio.txt destino/

cuidado: cp sobrescreve em silêncio

o arquivo ~/copiar-backup.sh copia tudo que está em ~/origem para ~/destino com cp -av. o -v mostra cada arquivo e não avisa nada. só que a notas.txt do destino é a versão importante, a mais nova, e a da origem é a antiga. o cp passa por cima. passo 1: veja o estrago. rode ~/copiar-backup.sh e depois cat destino/notas.txt. a versão importante virou a velha. para trazer de volta, digite restaurar-destino (só esse nome, sem ./ e sem .sh). passo 2: conserte o script. abra com nano ~/copiar-backup.sh. para salvar: ctrl+o e enter. para sair: ctrl+x. passo 3: teste. rode ~/copiar-backup.sh de novo e confira que o destino/notas.txt continua com a versão importante, e que o novo.txt entrou.

a pílula

cp a bcopia o arquivo, com data de agora
cp -a pasta/ destino/copia preservando dono, data e permissões
cp -n a bnão sobrescreve o que já existe

o cp não pergunta antes de sobrescrever.

quiz

1. você roda cp a.txt pasta/ e já existe a.txt dentro de pasta/. o que acontece?
2. qual a diferença entre cp -r e cp -a?
3. num script que copia por cima de uma pasta e não pode apagar o que é mais novo, qual opção usar?

próxima: o que é mv e o que ele faz