Dovresti capire che bashè solo un ambiente di esecuzione. Esegue i comandi che chiami: non è compito della shell nemmeno sapere cosa fa il comando, puoi chiamare qualsiasi eseguibile che desideri. Nella maggior parte dei casi, non è nemmeno chiaro cosa farebbe un annullamento, ad esempio puoi "annullare la riproduzione" di un film? Puoi "inviare" un'e-mail? Cosa significherebbe "annullare l'esecuzione di Firefox", ad esempio? Puoi chiuderlo, ma i segnalibri, i download e la cronologia non saranno gli stessi.
Se si esegue un comando, viene eseguito, qualunque cosa faccia. Sta a te sapere cosa stai facendo. Nota che questo non significa che i singoli comandi non abbiano "annulla" ... possono - puoi persino scrivere una funzione wrapper che fa qualcosa per proteggerti da errori insensati.
Ad esempio, mvè facilmente reversibile semplicemente spostando il file indietro da dove proviene, a meno che tu non abbia sovrascritto qualcosa. Ecco perché -iesiste switch, da chiederti prima di sovrascrivere. Tecnicamente, il contrario di cpè rm, a meno che qualcosa non sia stato sovrascritto (di nuovo, -ite lo chiede). rmè più permanente, per provare a recuperare i file, devi effettivamente fare un po 'di hacking di livello inferiore (ci sono strumenti per quello). Se consideri il filesystem come una scatola nera, tecnicamente non sarebbe affatto possibile (solo i dettagli del layout logico e fisico dei dati ti permettono di fare un controllo dei danni). rmsignifica rm, se si desidera la funzionalità "cestino", in realtà è solomvin una directory predisposta (e possibilmente un servizio programmato per mantenerlo o svuotarlo) - niente di speciale al riguardo. Ma è possibile utilizzare -iper richiedere prima dell'eliminazione. È possibile utilizzare una funzione o un alias da includere sempre -iin questi comandi.
Nota che la maggior parte delle applicazioni ti protegge dalla perdita di dati in diversi modi. La maggior parte (~ tutto) degli editor di testo crea file di backup ~alla fine nel caso in cui si desideri ripristinare la versione precedente. In alcune distro, lsviene impostato come predefinito per nasconderlo ( -B), ma sono presenti. Molta protezione viene data gestendo correttamente le autorizzazioni: non essere root a meno che non sia necessario, creare file di sola lettura se non si desidera che cambino. A volte è utile avere un ambiente "sandbox": esegui le cose su una copia, vedi se va bene e poi unisci le modifiche (o abbandona le modifiche). chrooto lxcpuò impedire agli script di uscire da una directory e causare danni.
Quando si tenta di eseguire operazioni collettive, ad esempio se si dispone di un comando find complesso, mentre loop, una lunga pipeline o qualcosa del genere, è una buona idea innanzi tutto solo echoi comandi che verranno eseguiti. Quindi, se i comandi sembrano ragionevoli, rimuoverlo echoed eseguirlo per davvero. E, naturalmente, se non sei davvero sicuro di ciò che stai facendo, crea prima una copia. A volte creo solo un tarball della directory corrente.
Parlando di tarball: tarbombe e zipbomb sono sfortunatamente abbastanza comuni (quando le persone fanno un archivio senza una corretta sottodirectory, e spacchettare i file sparsi, facendo un casino enorme). Mi sono abituato a creare una sottodirectory da solo prima di decomprimere ( potrei elencare il contenuto, ma sono pigro). Sto pensando di creare uno script che creerà una sottodirectory solo se i contenuti sono stati archiviati senza una sottodirectory. Ma quando succede, ls -lrtaiuta a trovare i file più recenti da mettere al loro posto. Ho appena dato questo come esempio: un programma può avere molti effetti collaterali che la shell non ha modo di conoscere (come potrebbe essere chiamato un programma diverso!) L'unico modo sicuro per evitare errori è stare attenti (pensa due volte, corri una volta).
Forse i comandi più pericolosi sono quelli che riguardano il filesystem: mkfs, fdisk / gdisk e così via. Possono distruggere completamente il filesystem (anche se con un software forense adeguato, è possibile almeno un reverse engineering parziale). Controlla sempre il dispositivo che stai formattando e il partizionamento è corretto, prima di eseguire il comando.