Me preguntaba si hay una posibilidad (simple) de rehacer / revertir un comando que se ejecutó en el shell bash? (para deshacerlo)
¿Hay algo similar a la combinación ctrl+ zpara rehacer cualquier acción (por ejemplo, en word o LibreOffice)?
command-line
Fraenzina
fuente
fuente
undo
comandos, por lo que es realmente útil tener una copia de seguridad actualizada de un sistema operativo completo. Cuando algo sale mal, simplemente restaura el estado anterior. Eche un vistazo a rsnapshot, por ejemploshutdown
comando jajaja ... ¡no puedo creer que tales preguntas también puedan obtener 8 votos en un día!Respuestas:
Debe comprender que
bash
es 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,
mv
es fácilmente reversible simplemente moviendo el archivo de donde vino, a menos que haya sobrescrito algo. Es por eso que-i
existe el interruptor, para preguntarle antes de sobrescribir. Técnicamente, inverso decp
esrm
, a menos que se haya sobrescrito algo (de nuevo,-i
le pregunta al respecto).rm
es 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).rm
significarm
, si quieres la funcionalidad "basura", en realidad eso es solomv
en algún directorio preestablecido (y posiblemente un servicio programado para mantenerlo o vaciarlo), no tiene nada de especial. Pero puede usarlo-i
para solicitarle antes de eliminarlo. Puede usar una función o un alias para incluir siempre-i
en 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,ls
tiene 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).chroot
olxc
puede 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
echo
los comandos que se ejecutarán. Luego, si los comandos parecen razonables, elimínelosecho
y 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 -lrt
ayuda 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.
fuente
No, no hay tal cosa como "deshacer" en Bash, lo siento. Esta es la razón por la que debe verificar sus comandos o probarlos primero en archivos sin importancia (si eso es posible). Y verifique tres veces si está haciendo cosas como root;)
fuente
rm
, el archivo se ha ido, ha fallecido, ha fallecido, ya no existe, es un archivo ex (alerta de Monty Python). Ahora sus parientes lloran de pena y no puedes deshacer tu acción. De lo que estás hablando es de deshacer la escritura o eliminación de caracteres y sospecho que es una característica de tu emulador de terminal. Lo acabo de probar en Terminator y funciona. Cambiar a una consola diferente (Ctrl + Alt + F1 en mi caso) no permite que funcione.No, no hay un deshacer genérico, pero algunas consecuencias son más reversibles que otras. Tomemos por ejemplo
rm
: se usa esencialmente para dos propósitos: evitar el desorden y liberar espacio para nuevos archivos. Con un poco de suerte, puede recuperar el contenido del archivo utilizando herramientas comoextundelete
, porque solo el puntero al inicio del archivo se sobrescribe cuando ejecutarm
; el contenido se sobrescribe cuando el sistema operativo reutiliza ese espacio (lo que podría suceder milisegundos o años después). Debido a esta funcionalidad,rm
cae en el medio de una escala de sistemas que son más o menos destructivos. Por un lado hay basurasistemas, que proporcionan una manera de evitar el desorden sin riesgo de perder los datos de inmediato (porque deshacer es trivial). Aún más conservadores son los sistemas de escribir una vez, leer muchos ("WORM"), donde los datos no pueden ser borrados o sobrescritos a voluntad por el sistema que los escribe. En el otro extremo de la escala están los sistemas de trituración , que sobrescriben el contenido del archivo (generalmente varias veces) además del puntero. En ese punto, la tecnología para recuperar sus datos probablemente aún no exista (y posiblemente nunca exista).Por lo tanto, puede ver cómo la herramienta específica más utilizada (
rm
) no es la única alternativa, pero proporciona una compensación con la que la mayoría de las personas se sienten cómodas:Si las compensaciones que hacen sus herramientas son inaceptables para usted, eche un vistazo. Lo más probable es que existan herramientas que toman las decisiones adecuadas para usted .
fuente
Las aplicaciones que proporcionan una función de 'deshacer' lo hacen manteniendo un historial de acciones tomadas y un método para revertir la acción o una instantánea del estado de un objeto para restaurar un estado anterior. Los comandos ejecutados en un shell realizan acciones directas o ejecutan comandos para realizar acciones.
El shell en sí no tendría la capacidad de deshacer las acciones resultantes de cualquier comando o programa ejecutado. Si el comando o programa mantenía un historial y tenía una función de deshacer, entonces tal vez eso podría usarse, pero el shell en sí no.
Por ejemplo, si ejecuta
rm important_file.txt
, eso le indicará al controlador del sistema de archivos que "desvincula" el archivo en el sistema de archivos. El shell no realiza la acción, solo llama a lorm
que hace.En el caso de querer recuperar un archivo perdido, puede ser posible hacerlo, ya que generalmente eliminar el archivo en realidad no lo elimina, sino que solo elimina la referencia a él. Después de un tiempo, el contenido del archivo se sobrescribirá a medida que se guarden otros datos en el disco, pero durante un tiempo el archivo original puede restaurarse utilizando utilidades que pueden encontrarlo y "volver a vincularlo".
fuente
No, no lo hay, pero si, digamos que se equivocó con un directorio privilegiado de root y de alguna manera arruinó algo, su mejor opción es guardar todos los archivos que pueda en una Unidad USB o una Tarjeta SD y restablecer su sistema operativo desde el archivo ISO (si todavía lo tiene, si no puede obtener otro fuera de línea ...). Si eliminó algo que puede, como dijo wraeth , descargue una aplicación para volver a vincular los datos del archivo con el nombre del archivo y guardar el contenido del archivo (consulte esta pregunta aquí ). Para una respuesta más profunda, ¿puede decirnos qué hizo mal?
fuente
No repetiré lo que otros han dicho, pero puedo ver de dónde vienes. Mi enfoque estándar para ejecutar comandos "peligrosos" siempre ha sido repetirlos para ver si todas las variables se expanden correctamente o no. Si puede citar algunas instancias específicas, podríamos ayudarlo más.
Por ejemplo, en una situación como:
fuente
Como otras buenas respuestas dijeron: no hay "deshacer" en el shell. Pero en su caso de uso específico, para deshacer un
shutdown
, puede matar el proceso de apagado: consulte /programming//a/526330fuente