Debe comprender que bashes solo un entorno de ejecución. Ejecuta comandos que usted llama: no es asunto del shell saber siquiera lo que hace el comando, puede llamar a cualquier ejecutable que desee. En la mayoría de los casos, ni siquiera está claro qué haría un deshacer, por ejemplo, ¿puedes "deshacer" una película? ¿Se puede "enviar" un correo electrónico? ¿Qué significaría "deshacer la ejecución de Firefox", por ejemplo? Puede cerrarlo, pero los marcadores, descargas e historial no serán lo mismo.
Si ejecuta un comando, se ejecuta, haga lo que haga. Depende de usted saber lo que está haciendo. Tenga en cuenta que esto no significa que los comandos individuales no tengan "deshacer" ... sí pueden, incluso puede escribir una función de contenedor que haga algo para protegerlo de errores tontos.
Por ejemplo, mves fácilmente reversible simplemente moviendo el archivo de donde vino, a menos que haya sobrescrito algo. Es por eso que -iexiste el interruptor, para preguntarle antes de sobrescribir. Técnicamente, inverso de cpes rm, a menos que se haya sobrescrito algo (de nuevo, -ile pregunta al respecto). rmes más permanente, para intentar recuperar los archivos, tienes que hacer algo de pirateo de nivel inferior (hay herramientas para eso). Si consideraras el sistema de archivos como un recuadro negro, técnicamente no sería posible en absoluto (solo los detalles del diseño lógico y físico de los datos te permiten controlar el daño). rmsignifica rm, si quieres la funcionalidad "basura", en realidad eso es solomven algún directorio preestablecido (y posiblemente un servicio programado para mantenerlo o vaciarlo), no tiene nada de especial. Pero puede usarlo -ipara solicitarle antes de eliminarlo. Puede usar una función o un alias para incluir siempre -ien estos comandos.
Tenga en cuenta que la mayoría de las aplicaciones lo protegen de la pérdida de datos de diferentes maneras. La mayoría de los editores de texto (~ todos) crean archivos de respaldo ~al final en caso de que desee recuperar la versión anterior. En algunas distribuciones, lstiene un alias por defecto para que los oculte ( -B), pero están ahí. Administrar los permisos de manera adecuada brinda mucha protección: no seas root a menos que sea necesario, crea archivos de solo lectura si no quieres que cambien. A veces es útil tener un entorno de "caja de arena": ejecuta cosas en una copia, ve si está bien y luego combina los cambios (o abandona los cambios). chrooto lxcpuede evitar que sus scripts escapen de un directorio y causen daños.
Cuando intenta ejecutar cosas en bloque, por ejemplo, si tiene un comando de búsqueda complejo, un bucle, una tubería larga o algo así, es una buena idea primero solo echolos comandos que se ejecutarán. Luego, si los comandos parecen razonables, elimínelos echoy ejecútelos de verdad. Y, por supuesto, si realmente no está seguro de lo que está haciendo, primero haga una copia. A veces solo creo un tarball del directorio actual.
Hablando de tarballs: desafortunadamente, los tarbombs y zipbombs son bastante comunes (cuando las personas crean un archivo sin un subdirectorio adecuado y el desempaquetado dispersa los archivos, creando un gran desastre). Me acostumbré a hacer un subdirectorio antes de desempacar ( podría enumerar los contenidos, pero soy vago). Estoy pensando en crear un script que cree un subdirectorio solo si el contenido se archivó sin un subdirectorio. Pero cuando sucede, ls -lrtayuda a encontrar los archivos más recientes para colocarlos donde pertenecen. Acabo de dar esto como ejemplo: un programa puede tener muchos efectos secundarios que el shell no tiene forma de conocer (¿cómo podría? ¡Se llama un programa diferente!) La única forma segura de evitar errores es tener cuidado (piense dos veces, corre una vez).
Posiblemente los comandos más peligrosos son los que se ocupan del sistema de archivos: mkfs, fdisk / gdisk, etc. Pueden destruir completamente el sistema de archivos (aunque con el software forense adecuado, es posible al menos una ingeniería inversa parcial). Siempre verifique dos veces el dispositivo que está formateando y la partición es correcta, antes de ejecutar el comando.