Accidentalmente renombré el directorio /usr
a /usr_bak
.
Quiero cambiarlo de nuevo, por lo que añado el camino /usr_bak/bin
para $PATH
permitir que el sistema para encontrar el comando sudo
.
Pero ahora sudo mv /usr_bak /usr
me da el error:
sudo: error while loading shared libraries: libsudo_util.so.0: cannot open shared object file: No such file or directory
¿Hay una manera de cambiar el nombre del /usr_bak
que /usr
, además de volver a instalar el sistema?
sudo
llegó a la etapa de biblioteca, generalmente está en/usr/bin/
y debería haber fallado con un error de comando no encontrado. Además, ¿tiene configurada una contraseña de root?not found
antes, así que la nueva ruta adjuntas/usr_bak/bin
a$PATH
y ahora me sale el error en mi post aquí .../usr
Ubuntu 16.04 para sobrescribir/usr
Ubuntu 17.10 ...Respuestas:
Como ha establecido una contraseña para root, use
su
ebusybox
, instalada por defecto en Ubuntu. Todassu
las bibliotecas requeridas están en/lib
. Busybox es una colección de utilidades estáticamente vinculadas, por lo que las bibliotecas faltantes no deberían ser un problema. Hacer:(Si bien Busybox también tiene un
su
applet, el/bin/busybox
binario no está configurado y, por lo tanto, no funciona a menos que se ejecute como root).Si no tiene una contraseña de root,
probablemente podría usar la solución de Gilles aquí(Gilles dice que esto no funcionará con los binarios setuid como sudo) reinicie y edite el menú de GRUB para arrancarLD_LIBRARY_PATH
, oinit=/bin/busybox
como un parámetro del núcleo y mover la carpeta de vuelta.fuente
/lib
.LD_LIBRARY_PATH
no ayudaría a ejecutar sudo ya quesudo
es setuid. Si sus bibliotecas no están en el lugar correcto, sudo no funcionará hasta que root lo repare./sbin
para ese tipo de escenario: "Estoy haciendo alguna actividad en la que las bibliotecas de tiempo de ejecución estarán malabarizadas pero aún necesita manipular archivos ". Básicamente, el mismo enfoque antes de que se inventara Busybox. (El número de comandos disponibles de esta manera era muy limitado, porque esos binarios enlazados estáticamente engullen el espacio en disco)./lib
, entonces probablemente debas reiniciar ainit=/bin/busybox
Además de la respuesta de muru :
podrías haber usado alguna llave USB de arranque de rescate para reparar tu sistema; por ejemplo, si su sistema es Debian o Ubuntu, inicie la llave USB de instalación en modo de rescate y haga lo apropiado
mount
ymv
yumount
.ser capaz de reparar más fácilmente este tipo de errores, por lo general también se instala una carcasa estática con varias órdenes internas (sobre todo con un poco de
cp
,rm
,mv
órdenes internas similares a) comosash
(se envasa en Debian y Ubuntu, y también está disponible como faja-3.8. tar.gz en forma de fuente) y arranque coninit=/bin/sash
pasado a Grub.PD:
sash
es un poco defectuoso y no es totalmente compatible con Posix, pero sigue siendo muy útil.fuente
apt-get install sash
. Pero también puede descargar sash-3.8.tar.gz y compilarlo.Creo que la mejor manera más segura es reiniciar usando un sistema operativo USB, CD o DVD (Debian, Ubuntu, Suse, etc.). Luego monte la unidad que contiene los problemas y cambie el nombre.
Más seguro que arrancar en un campo minado con / usr o / lib efectivamente faltante.
fuente
Me encontré con un problema similar donde Me cambió el nombre
/usr/bin
a/usr/bin_bkp
por alguna prueba y entonces yo no era capaz de cambiar el nombre (como el comando no encuentra elsudo
en el directorio estándar que es/usr/bin
) y luego fui al/usr/bin_bkp
directorio manualmente (utilizando el Gestor de archivos ) y la mayoría de las funciones (incluido el cambio de nombre) en el clic derecho están deshabilitadas.Luego probé el siguiente comando y solucionó el problema
Invoqué el sudo desde el camino actual y funcionó, ahora todo ha vuelto a la normalidad.
SO: Xubuntu 14.04
fuente
No puedo probar esto en este momento (y no estoy seguro de querer hacerlo), pero parece que debería funcionar para crear un nuevo "/ usr" como un enlace duro (no un enlace suave) a su " / usr_bak, luego elimine "/ usr_bak"
El enlace duro creado por "ln" ( sin argumento "-s") en el sistema de archivos debe hacer que los directorios usr y usr_bak sean igualmente válidos para los directorios en cuestión. "rm" simplemente elimina el enlace que le pediste que elimine, no ambos. Como todavía hay un enlace válido a los contenidos, deben permanecer accesibles a través del enlace restante en "/ usr".
fuente
.
y..
, por lo que el recuento de enlaces en un directorio le indica el número de subdirecciones de primer nivel). Además,rm
no funciona en directorios, tendría que usarrmdir
. (ln
yrm
trabajar en enlaces simbólicos a directorios, pero estamos hablando de un directorio real). Además, esto no resuelve el problema, ya que requiereroot
simplementemv
, debido a los permisos en/
. Si pudieras correr esto, podrías corrermv
como una persona normal.ln(1)
en Debian dice esto para la opción-d
/-F
/--directory
: "permitir que el superusuario intente vincular los directorios (nota: probablemente fallará debido a restricciones del sistema, incluso para el superusuario)" . Así que puedes probarlo, pero tu sistema de archivos probablemente no te lo permita.