Accidentalmente moví todas las carpetas desde la raíz a una subcarpeta. ( /bin
, /etc
, /home
, /lib
, /usr
... todo desplazado) Los únicos que no se han movido, ya que estaban en uso, son /bak
, /boot
, /dev
, /proc
, /sys
.
Ahora, cualquier comando que intente ejecutar simplemente no sucederá. Constantemente recibo "No existe tal archivo o directorio".
Estoy conectado a través de ssh y ftp, pero no puedo mover archivos a través de ftp, ya que el inicio de sesión directo en SU está desactivado. También tengo acceso al servidor real si necesito hacer algo directamente desde allí.
Supongo que necesitaría editar un archivo de configuración para decirle dónde encontrar la /bin
carpeta y eso me ayudaría a acceder nuevamente, pero no sé qué archivo sería o cómo hacerlo (ya que ni siquiera puede correr chmod
para cambiar los permisos).
¿Hay alguna forma de salir de esto que no sea la reinstalación?
Estoy trabajando en una versión antigua de CentOS.
Soy extremadamente nuevo en el mundo de Linux, de ahí esta acción y la pregunta ...
Respuestas:
Si aún tiene un shell raíz, puede tener la oportunidad de reparar su sistema. Digamos que ha movido todos los directorios comunes (
/bin
,/etc
,/lib
,/sbin
,/usr
- estos son los que podrían hacer difícil recuperación) bajo/oops
.No podrá ejecutar el
mv
comando directamente, incluso si especifica la ruta completa/oops/bin/mv
. Eso es porquemv
está dinámicamente vinculado ; porque ha movido el/lib
directorio,mv
no se puede ejecutar porque no puede encontrar las bibliotecas que constituyen parte de su código. De hecho, es aún peor que eso:mv
no puedo encontrar el cargador dinámico/lib/ld-linux.so.2
(el nombre puede variar dependiendo de su arquitectura y variante de Unix, y el directorio podría ser un nombre diferente como/lib32
o/lib64
). Por lo tanto, hasta que haya movido el/lib
directorio hacia atrás, debe invocar el vinculador explícitamente y debe especificar la ruta a las bibliotecas movidas. Aquí está el comando probado en Debian squeeze i386.Es posible que deba ajustar esto un poco para otras distribuciones o arquitecturas. Por ejemplo, para CentOS en x86_64:
Cuando has arruinado algo
/lib
, es útil tener una caja de herramientas enlazada estáticamente. Algunas distribuciones (no sé acerca de CentOS) proporcionan una copia estáticamente vinculada de Busybox . También hay faja , un shell independiente con muchos comandos incorporados. Si tiene uno de estos, puede hacer su recuperación desde allí. Si no los ha instalado antes, es demasiado tarde.Si ya no tiene un shell de raíz, pero aún tiene un demonio SSH escuchando y puede iniciar sesión directamente como root sobre ssh, y tiene una de estas cajas de herramientas vinculadas estáticamente, es posible que pueda ingresar. puede funcionar si te has mudado
/lib
y/bin
, pero no/etc
.Algunos administradores configuran una cuenta alternativa con un shell vinculado estáticamente, o hacen que la cuenta raíz use un shell vinculado estáticamente, solo para este tipo de problemas.
Si no tiene un shell raíz y no ha tomado precauciones, deberá arrancar desde un CD / USB en vivo de Linux (cualquiera funcionará siempre que sea lo suficientemente reciente como para poder acceder a sus discos y sistemas de archivos) y mover los archivos de vuelta.
fuente
Probablemente pueda recuperarse sin reiniciar, así que no reinicie hasta que haya intentado otras cosas porque no se iniciará. Si todavía tiene abierta su sesión SSH, intente lo siguiente:
Desde dónde se ejecutan los programas se establece usando la variable $ PATH. Puede agregar su nueva ubicación a la ruta ejecutando
export PATH="$PATH:/newpath/to/bin:/newpath/to/usr/bin"
. Es posible que también deba agregar los directorios sbin correspondientes . También puede ejecutar programas manualmente a través de su ruta completa,/path/to/mv [from] [to]
por ejemplo, debería funcionar incluso si mv está en una ubicación diferente. La parte difícil es que la mayoría de los comandos van a querer acceder a bibliotecas comunes y usted dice que/lib
se movió, por lo que también debe establecer una variable para dónde está.export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/newpath/to/lib/:/newpath/to/usr/lib
Una vez que puedas ejecutar algunos comandos básicos, ¡mueve las cosas hacia atrás!
mv /path/to/subfolder/* /
estaría en orden! Una vez que todo vuelva a estar en su lugar, el sistema debería comportarse normalmente.Si eso falla, arrancar CUALQUIER LiveCD y montar la unidad debería permitirle mover las carpetas de regreso a donde pertenecen. No necesita reinstalar o incluso usar sus distribuciones livecd, solo necesita montar la unidad y mover las carpetas nuevamente a la ubicación correcta en el disco. Muchos discos de rescate basados en Linux se especializan en brindarle algunas herramientas básicas de consola para hacer este tipo de reparación.
fuente
LD_LIBRARY_PATH
, también debe invocar el cargador dinámico explícitamente, por ejemploLD_LIBRARY_PATH=/newpath/to/lib /newpath/to/lib/ld-linux.so.2 /newpath/to/bin/mv
.Debería poder reiniciar la computadora con un CD de instalación en modo de usuario único, montar el sistema de archivos raíz y mover los archivos nuevamente a Linux. No conozco muchos centos, pero es como RHEL, así que esto debería funcionar.
fuente
Muchas gracias a Gilles, 5 años después y tus publicaciones aún me salvaron el día, si no la semana.
Tenía la intención de mover el contenido de una subcarpeta a la carpeta actual, pero en lugar de
mv sub/* .
hacerlomv sub /* .
, así que moví todo a la carpeta actual. Afortunadamente, encontré esta respuesta y pude arreglar mi máquina con relativa facilidad. Sin embargo, tuve que ajustar los comandos ligeramente ya que estoy trabajando en una máquina x86_64 con Ubuntu 16.04. Me gustaría dejar las instrucciones aquí, en caso de que alguien tenga dificultades:fuente
Me gustaría agregar un par de comandos más para hacer después de aplicar la respuesta de Ktipr para sistemas modernos (máquinas x86_64 que ejecutan Unix), no pude mover los directorios "etc" con mv ya que mostraba un error
así que tuve que usar
para asegurarme de que pude volver a poner todo en orden. Si aún no lo tiene instalado, deberá instalarlo primero.
fuente