ti-enxame.com

Temos um desfazer no Linux?

Renomeei alguns arquivos em um script em lote. Existe uma maneira de desfazer as alterações sem precisar renomeá-las novamente?

O Linux fornece uma maneira nativa de undoing?

55
Lazer

O Linux (como outras unidades) não fornece nativamente um recurso de desfazer. A filosofia é que, se se foi, se foi. Se fosse importante, deveria ter sido feito backup.

Existe um sistema de arquivos Fuse que mantém automaticamente cópias de versões antigas: copyfs , disponível em todas as boas distribuições. Obviamente, isso pode usar muitos recursos.

A melhor maneira de se proteger contra esses acidentes é usar um sistema de controle de versão (cvs, Bazaar, darcs, git, Mercurial, Subversion, ...). Leva um pouco de tempo para aprender, mas vale a pena demais a médio e longo prazo.

56

Infelizmente não.

17
postfuturist

Não, não há desfazer mágico em nenhum Unix. O Unix assume que você sabe o que está fazendo. Para suporte ao Desfazer, use um VCS (seu editor de texto provavelmente também o possui).

A maioria dos sistemas de arquivos não tem a capacidade de fazê-lo de forma transparente.

A máquina do tempo e a restauração do sistema no Mac e no Windows, respectivamente, são apenas sistemas de controle de backup/alteração.

10
xenoterracide

Não há desfazer na linha de comando. No entanto, você pode executar comandos como rm -i e mv -i. Isso solicitará um "você tem certeza?" pergunta antes de executar o comando.

Também é possível adicionar um alias para ele em um script de inicialização (por exemplo, ~/.bashrc ou /etc/bash.bashrc):

alias remove='rm -i'
alias move='mv -i'

Editar: pelas sugestões abaixo, removi meu conselho para alias os comandos padrão. Em vez disso, ele introduz novos comandos agora).

8
vdboor

A razão pela qual os sistemas Linux/Unix não têm uma exclusão excluída decorre da maneira como a maioria dos sistemas de arquivos armazena suas informações. As meta-informações do arquivo são todas armazenadas na frente do disco, com referências aos inodes no restante do disco. Normalmente, a maioria dos sistemas de arquivos aloca 10 blocos para um arquivo nessa meta-área. Os 7 primeiros referem-se aos 7 primeiros inodes. Os dias 8 e 9 vão para listas de inodes (blocos duplamente vinculados) e o 10º para uma lista de listas de listas (blocos vinculados tripply). Isso varia de sistema para sistema de arquivos (ext4, jfs, xfs etc.), mas essas listas de blocos geralmente podem endereçar tamanhos de arquivo de 2 GB a vários TB.

Porém, como todas essas informações são armazenadas na frente do disco, quando um arquivo é apagado, não há como referenciar inodes no disco para quais metadados a que eles pertencem. Por outro lado, o FAT32 e o NTFS realmente armazenam algumas informações de cabeçalho nos arquivos, facilitando a identificação de quais arquivos um conjunto de blocos deve pertencer (desde que esse espaço ainda não tenha sido recuperado por arquivos mais recentes). No trabalho do Linux, quando você exclui algo, quase sempre é a primeira coisa a ser substituída imediatamente por novos dados para obter eficiência.

4
djsumdog

Uma coisa que gosto de adicionar ao meu .bashrc é uma função de copiar e remover. Algo como:

cprm(){
    cp -p $1 ~/deleted/$1
    rm $1
}

Mas você precisa adquirir o hábito de digitar cprm e não rm.

Obviamente, você precisará manter-se no topo da área excluída se tiver espaço em disco limitado.

2
Deano

Se você realmente deseja desfazer um recurso, use o controle de origem. Subversion realmente funciona muito bem em uma única máquina de usuário. Eu o uso para controlar todos os meus arquivos pessoais no meu sistema doméstico. Parece exagero, até um desastre, um script desonesto ou um erro de digitação na linha de comando.

2
Stephen Jazdzewski

O GitFS é um sistema de arquivos baseado em fusível, que calcula automaticamente diffs entre versões e permite restaurar/navegar por elas.

Página da Web: https://www.presslabs.com/gitfs

Documentos: https://www.presslabs.com/gitfs/docs/usage/

1
test30