Je me demandais s'il y avait une (simple) possibilité de refaire / inverser une commande qui a été exécutée dans le shell bash? (pour le défaire)
Existe-t-il quelque chose de similaire à la combinaison ctrl+ zpour refaire une action (par exemple dans Word ou LibreOffice)?
command-line
Fraenzine
la source
la source
undo
commande, donc avoir une sauvegarde à jour de tout un système d'exploitation est vraiment utile. En cas de problème, vous restaurez simplement l'état précédent. Jetez un œil à rsnapshot par exempleshutdown
commande lol .. je ne peux pas croire que de telles questions peuvent également obtenir 8 votes positifs en une journée !!Réponses:
Vous devez comprendre qu'il ne
bash
s'agit que d'un environnement d'exécution. Il exécute les commandes que vous appelez - ce n'est pas l'affaire du shell de savoir ce que fait la commande, vous pouvez appeler n'importe quel exécutable que vous voulez. Dans la plupart des cas, il n'est même pas clair ce que ferait une annulation - par exemple, pouvez-vous "défaire" un film? Pouvez-vous "supprimer" un e-mail? Que signifierait même "annuler l'exécution de Firefox", par exemple? Vous pouvez le fermer, mais les signets, les téléchargements et l'historique ne seront pas les mêmes.Si vous exécutez une commande, elle est exécutée, quoi qu'elle fasse. A vous de savoir ce que vous faites. Notez que cela ne signifie pas que les commandes individuelles n'ont pas "d'annulation" ... elles le peuvent - vous pouvez même écrire une fonction wrapper qui fait quelque chose pour vous protéger contre les erreurs stupides.
Par exemple,
mv
est facilement réversible en déplaçant simplement le fichier d'où il vient, sauf si vous avez écrasé quelque chose. C'est pourquoi le-i
commutateur existe, à vous demander avant d'écraser. Techniquement, l'inverse decp
estrm
, sauf si quelque chose a été écrasé (encore une fois,-i
vous demande à ce sujet).rm
est plus permanent, pour essayer de récupérer les fichiers, vous devez en fait faire un piratage de niveau inférieur (il existe des outils pour cela). Si vous considérez le système de fichiers comme une boîte noire, cela ne serait techniquement pas possible du tout (seuls les détails de la disposition logique et physique des données vous permettent de contrôler les dommages).rm
signifierm
, si vous voulez une fonctionnalité "poubelle", c'est en fait justemv
dans un répertoire pré-arrangé (et éventuellement un service planifié pour le maintenir ou le vider) - rien de spécial à ce sujet. Mais vous pouvez utiliser-i
pour vous demander avant la suppression. Vous pouvez utiliser une fonction ou un alias à toujours inclure-i
dans ces commandes.Notez que la plupart des applications vous protègent contre la perte de données de différentes manières. La plupart (~ tous) les éditeurs de texte créent des fichiers de sauvegarde
~
à la fin au cas où vous souhaiteriez récupérer l'ancienne version. Sur certaines distributions,ls
est alias par défaut pour qu'il les masque (-B
), mais elles sont là. Une grande protection est fournie par la gestion correcte des autorisations: ne soyez pas root à moins que vous ne deviez l'être, rendez les fichiers en lecture seule si vous ne voulez pas qu'ils changent. Parfois, il est utile d'avoir un environnement "bac à sable" - vous exécutez des choses sur une copie, voyez si tout va bien, puis fusionnez les modifications (ou abandonnez les modifications).chroot
oulxc
peut empêcher vos scripts de s'échapper d'un répertoire et de causer des dommages.Lorsque vous essayez d'exécuter des choses en bloc - par exemple, si vous avez une commande find complexe, une boucle while, un long pipeline ou quelque chose comme ça, c'est une bonne idée de commencer uniquement par
echo
les commandes qui seront exécutées. Ensuite, si les commandes semblent raisonnables, supprimez-lesecho
et exécutez-les pour de vrai. Et bien sûr, si vous n'êtes vraiment pas sûr de ce que vous faites, faites-en d'abord une copie. Je crée parfois simplement une archive tar du répertoire courant.En parlant de tarballs - les tarbombes et les zipbombs sont malheureusement assez courants (lorsque les gens font une archive sans sous-répertoire approprié et que le déballage disperse les fichiers, ce qui crée un énorme gâchis). Je me suis habitué à créer moi-même un sous-répertoire avant de déballer (je pourrais lister le contenu, mais je suis paresseux). Je pense à créer un script qui créera un sous-répertoire uniquement si le contenu a été archivé sans sous-répertoire. Mais lorsque cela se produit,
ls -lrt
aide à trouver les fichiers les plus récents à mettre à leur place. Je viens de donner cela à titre d'exemple - un programme peut avoir de nombreux effets secondaires que le shell n'a aucun moyen de connaître (Comment pourrait-il? C'est un programme différent qui est appelé!) La seule façon sûre d'éviter les erreurs est d'être prudent (pensez deux fois, exécutez une fois).Les commandes les plus dangereuses sont probablement celles qui concernent le système de fichiers: mkfs, fdisk / gdisk et ainsi de suite. Ils peuvent détruire complètement le système de fichiers (bien qu'avec un logiciel médico-légal approprié, une rétro-ingénierie au moins partielle soit possible). Vérifiez toujours le périphérique que vous formatez et le partitionnement est correct avant d'exécuter la commande.
la source
Non, il n'y a pas de "défaire" dans Bash, désolé. C'est pourquoi vous devez revérifier vos commandes ou les tester d'abord sur des fichiers sans importance (si c'est possible). Et vérifiez si vous faites des choses en tant que root;)
la source
rm
, le fichier a disparu, il est décédé, il est décédé, ce n'est plus, c'est un ex-fichier (alerte Monty Python). Maintenant, ses proches pleurent de douleur et vous ne pouvez pas annuler votre acte. Ce dont vous parlez, c'est d'annuler la saisie ou la suppression de caractères et je soupçonne que c'est une fonctionnalité de votre émulateur de terminal. Je viens de l'essayer dans Terminator et cela fonctionne. Passer à une autre console (Ctrl + Alt + F1 dans mon cas) ne lui permet pas de fonctionner.Non, il n'y a pas d'annulation générique, mais certaines conséquences sont plus réversibles que d'autres. Prenons par exemple
rm
: il est essentiellement utilisé à deux fins: éviter l'encombrement et libérer de l'espace pour de nouveaux fichiers. Avec un peu de chance, vous pouvez récupérer le contenu du fichier en utilisant des outils commeextundelete
, car seul le pointeur vers le début du fichier est écrasé lorsque vous exécutezrm
; le contenu est écrasé lorsque le système d'exploitation réutilise cet espace (ce qui peut se produire des millisecondes ou des années plus tard). Du fait de cette fonctionnalité,rm
tombe au milieu d'une échelle de systèmes plus ou moins destructrice. D'une part, il y a des orduressystèmes, qui offrent un moyen d'éviter l'encombrement sans risque de perdre les données immédiatement (car l'annulation est triviale). Encore plus conservateurs sont les systèmes d' écriture unique et de lecture ("WORM"), où les données ne peuvent pas être supprimées ou écrasées à volonté par le système qui y écrit. À l'autre extrémité de l'échelle se trouvent les systèmes de destruction , qui écrasent le contenu du fichier (généralement plusieurs fois) en plus du pointeur. À ce stade, la technologie pour récupérer vos données n'existe probablement pas encore (et peut-être n'existera peut-être jamais).Vous pouvez donc voir comment l'outil spécifique le plus utilisé (
rm
) n'est pas la seule alternative, mais il offre un compromis que la plupart des gens semblent à l'aise avec:Si les compromis que font vos outils sont inacceptables pour vous, jetez un œil. Il y a des chances il existe des outils là - bas qui prennent les décisions qui conviennent pour vous .
la source
Les applications qui offrent une fonction «annuler» le font en conservant un historique des actions entreprises et soit une méthode pour inverser l'action, soit un instantané de l'état d'un objet pour restaurer un état précédent. Les commandes exécutées dans un shell effectuent des actions directes ou exécutent des commandes pour effectuer des actions.
Le shell lui-même n'aurait pas la possibilité d'annuler les actions résultant d'une commande ou d'un programme exécuté. Si la commande ou le programme conservait un historique et avait une fonction d'annulation, alors peut-être que cela pourrait être utilisé, mais le shell lui-même ne peut pas.
Par exemple, si vous exécutez
rm important_file.txt
, cela indiquera alors au pilote du système de fichiers de "dissocier" le fichier sur le système de fichiers. Le shell n'exécute pas l'action, il appelle uniquementrm
qui le fait.Dans le cas où vous souhaitez annuler la suppression d'un fichier perdu, il peut être possible de le faire, car généralement la suppression du fichier ne le supprime pas réellement, mais supprime uniquement la référence à celui-ci. Après un certain temps, le contenu du fichier sera écrasé lorsque d'autres données sont enregistrées sur le disque, mais pendant un certain temps, le fichier d'origine peut être restauré à l'aide d'utilitaires qui peuvent le trouver et le "relier".
la source
Non, il n'y en a pas, mais si, disons, que vous avez joué avec un répertoire privilégié root et que vous avez foiré quelque chose, votre meilleur pari est de sauvegarder tous les fichiers que vous pouvez sur une clé USB ou une carte SD et de réinitialiser votre système d'exploitation à partir de le fichier ISO (si vous l'avez toujours, sinon vous pouvez en obtenir un autre hors ligne ...). Si vous avez supprimé quelque chose, vous pouvez, comme l' a dit wraeth , télécharger une application pour relier les données du fichier au nom de fichier et enregistrer le contenu des fichiers (voir cette question ici ). Pour une réponse plus approfondie, pouvez-vous nous dire ce que vous avez fait de mal?
la source
Je ne répéterai pas ce que les autres ont dit, mais je peux voir d'où vous venez. Mon approche standard pour exécuter des commandes "dangereuses" a toujours été de leur faire écho pour voir si toutes les variables sont correctement développées ou non. Si vous pouvez citer des exemples spécifiques, nous pourrons peut-être vous aider davantage.
Par exemple, dans une situation comme:
la source
Comme d'autres bonnes réponses l'ont dit: il n'y a pas de "défaire" dans le shell. Mais dans votre cas d'utilisation spécifique, pour annuler un
shutdown
, vous pouvez tuer le processus d'arrêt: voir /programming//a/526330la source