web-dev-qa-db-fra.com

Avons-nous une annulation sous Linux?

J'ai renommé quelques fichiers dans un script batch. Existe-t-il un moyen d'annuler les modifications sans avoir à les renommer?

Est-ce que Linux fournit une méthode native de undoing?

55
Lazer

Linux (comme les autres unités) ne fournit pas nativement de fonctionnalité d'annulation. La philosophie est que si c'est parti, c'est parti. S'il était important, il aurait dû être sauvegardé.

Il existe un système de fichiers Fuse qui conserve automatiquement des copies des anciennes versions: copyfs , disponible dans toutes les bonnes distributions. Bien sûr, cela peut utiliser beaucoup de ressources.

La meilleure façon de se protéger contre de tels accidents est d'utiliser un système de contrôle de version (cvs, Bazaar, darcs, git, Mercurial, Subversion, ...). Il faut un peu de temps pour apprendre, mais cela rapporte énormément à moyen et long terme.

Malheureusement non.

17
postfuturist

Non, il n'y a pas d'annulation magique dans un Unix. Unix suppose que vous savez ce que vous faites. Pour annuler la prise en charge, utilisez un VCS (votre éditeur de texte l'a probablement également intégré).

La plupart des systèmes de fichiers n'ont pas la capacité de le faire de manière transparente.

Time Machine et la restauration du système sur Mac et Windows ne sont que des systèmes de contrôle de sauvegarde/modification.

10
xenoterracide

Il n'y a pas d'annulation dans la ligne de commande. Vous pouvez cependant exécuter des commandes comme rm -i et mv -i. Cela vous proposera un "êtes-vous sûr?" question avant d'exécuter la commande.

Il est également possible d'ajouter un alias à un script de démarrage (par exemple ~/.bashrc ou /etc/bash.bashrc):

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

Edit: par les suggestions ci-dessous, j'ai supprimé mon conseil d'alias les commandes par défaut. Au lieu de cela, il introduit maintenant de nouvelles commandes).

8
vdboor

La raison pour laquelle les systèmes Linux/Unix n'ont pas de suppression provient de la façon dont la plupart des systèmes de fichiers stockent leurs informations. Les méta-informations de fichier sont toutes stockées à l'avant du disque avec des références aux inodes sur le reste du disque. En règle générale, la plupart des systèmes de fichiers allouent 10 blocs à un fichier dans cette méta-zone. Les 7 premiers font référence aux 7 premiers inodes. Le 8 et le 9 vont à des listes d'inodes (blocs doublement liés) et le 10 va à une liste de listes de listes (blocs liés à trois). Cela varie d'un système de fichiers à l'autre (ext4, jfs, xfs, etc.) mais ces listes de blocs peuvent généralement traiter des tailles de fichiers allant de 2 Go à plusieurs To.

Mais parce que toutes ces informations sont stockées à l'avant du disque, lorsqu'un fichier est effacé, il n'y a aucun moyen de référencer les inodes sur le disque à quelles métadonnées auxquelles ils appartiennent. En revanche, FAT32 et NTFS stockent en fait des informations d'en-tête avec les fichiers eux-mêmes, ce qui facilite l'identification du fichier auquel un ensemble de blocs appartient (à condition que cet espace n'ait pas encore été récupéré par des fichiers plus récents). Dans le travail Linux, lorsque vous supprimez quelque chose, c'est presque toujours la première chose à être immédiatement écrasée par de nouvelles données pour plus d'efficacité.

4
djsumdog

Une chose que j'aime ajouter à mon .bashrc est une fonction de copie et de suppression. Quelque chose comme:

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

Mais vous devez prendre l'habitude de taper cprm et non rm.

Évidemment, vous devrez rester au-dessus de la zone supprimée si votre espace disque est limité.

2
Deano

Si vous voulez vraiment une fonction d'annulation, utilisez le contrôle de code source. Subversion fonctionne réellement très bien sur une machine mono-utilisateur. Je l'utilise pour contrôler tous mes fichiers personnels sur mon système domestique. Il semble exagéré, jusqu'au désastre, un script escroc ou une faute de frappe en ligne de commande.

2
Stephen Jazdzewski

GitFS est un système de fichiers basé sur Fuse, qui calcule automatiquement les diff entre les versions et permet de les restaurer/les parcourir.

Page Web: https://www.presslabs.com/gitfs

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

1
test30