linux.playground

trilha / arco 2 · mexer em arquivo

o que é mv e o que ele faz

você moveu o relatório para o arquivo morto e deu tudo certo. no dia seguinte, o de ontem tinha sumido. o mv não tem lixeira, e não pergunta antes de pôr um arquivo por cima do outro.

em poucos minutos: o que o mv faz, por que mover é quase de graça, e o nome de destino que apaga o que já existia. 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

é trocar a etiqueta da gaveta de lugar. a gaveta não muda, e se já havia uma etiqueta igual no destino, a velha vai embora.

para quem está começando

muda o nome de um arquivo, ou move o arquivo para dentro de uma pasta. o mesmo comando faz as duas coisas.

a fonte da verdade

o mv pede ao kernel para trocar o nome na pasta. no mesmo disco, só o nome muda: o inode é o mesmo, por isso é instantâneo. entre discos, ele copia e depois apaga o original, e o inode muda.

o número por trás do nome

o ls -i mostra o inode antes e depois. mesmo número: foi só renomear. número novo: foi copiar e apagar. o /dev/shm é outro sistema de arquivos, serve para ver isso.

agora você

terminal fechado

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

  1. renomeia o atual.txt para oficial.txt e compara o número do inode antes e depois.

    ls -i atual.txt && mv atual.txt oficial.txt && ls -i oficial.txt

  2. a pasta arquivo-morto já tem um relatorio.txt com o texto importante. você move o relatorio.txt da sua home para lá. o que acontece com o antigo?

  3. agora com -i, que pergunta antes. tenta mover o rascunho.txt por cima do relatorio.txt que está no arquivo-morto, e responde n.

    mv -i rascunho.txt arquivo-morto/relatorio.txt

  4. o mesmo movimento com -n, que não sobrescreve. depois confere que o rascunho.txt continua onde estava.

    mv -n rascunho.txt arquivo-morto/relatorio.txt; ls rascunho.txt

  5. agora move o rascunho.txt para /dev/shm, que é outro sistema de arquivos, e compara o inode.

    ls -i rascunho.txt && mv rascunho.txt /dev/shm/ && ls -i /dev/shm/rascunho.txt

cuidado: mv sem a barra no fim renomeia

o arquivo ~/arquivar.sh guarda o ~/entrada/relatorio.csv do dia na pasta ~/arquivo. só que a pasta ~/arquivo não existe, e o destino do mv está sem a barra no fim. sem a barra, o mv entende que arquivo é um nome novo. o relatório vira um arquivo chamado arquivo, e o do dia seguinte passa por cima. passo 1: veja o estrago. rode ~/arquivar.sh e depois ls -l ~/arquivo. repare no traço no começo da linha: é um arquivo comum, não uma pasta. para trazer tudo de volta, digite restaurar-entrada (só esse nome, sem ./ e sem .sh). passo 2: conserte o script. abra com nano ~/arquivar.sh. para salvar: ctrl+o e enter. para sair: ctrl+x. passo 3: teste. rode restaurar-entrada, depois ~/arquivar.sh, e confira com ls -l ~/arquivo que agora é uma pasta com o relatorio.csv dentro (ou que o script parou com erro e o relatório continua em ~/entrada).

a pílula

mv a brenomeia, ou move para a pasta b
mv -i a bpergunta antes de sobrescrever
mv -n a bpula se já existe

mv para nome existente apaga o antigo.

quiz

1. você roda mv a.txt pasta/ e já existe pasta/a.txt. o que acontece com o antigo?
2. mv relatorio.csv arquivo, e arquivo não existe. o que acontece?
3. por que mover um arquivo dentro do mesmo disco é instantâneo, e entre discos demora?

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