Vous devez comprendre qu'il ne bashs'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, mvest 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 -icommutateur existe, à vous demander avant d'écraser. Techniquement, l'inverse de cpest rm, sauf si quelque chose a été écrasé (encore une fois, -ivous demande à ce sujet). rmest 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). rmsignifie rm, si vous voulez une fonctionnalité "poubelle", c'est en fait justemvdans 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 -ipour vous demander avant la suppression. Vous pouvez utiliser une fonction ou un alias à toujours inclure -idans 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, lsest 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). chrootou lxcpeut 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 echoles commandes qui seront exécutées. Ensuite, si les commandes semblent raisonnables, supprimez-les echoet 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 -lrtaide à 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.