J'ai accidentellement renommé le répertoire /usr
en /usr_bak
.
Je veux changer le dos, donc j'ajouter le chemin /usr_bak/bin
à $PATH
permettre au système de trouver la commande sudo
.
Mais maintenant sudo mv /usr_bak /usr
me donne l'erreur:
sudo: error while loading shared libraries: libsudo_util.so.0: cannot open shared object file: No such file or directory
Existe-t-il un moyen de renommer l’ /usr_bak
as en /usr
plus de la réinstallation du système?
sudo
même au stade de la bibliothèque, il est généralement entré/usr/bin/
et aurait dû échouer avec une erreur de commande introuvable. Aussi, avez-vous un mot de passe root défini?not found
auparavant alors j'ai ajouté le nouveau chemin/usr_bak/bin
d' accès$PATH
et maintenant j'ai l'erreur dans mon message ici .../usr
d'Ubuntu 16.04 pour écraser celui/usr
d'Ubuntu 17.10 ...Réponses:
Puisque vous avez défini un mot de passe pour root, utilisez
su
etbusybox
, installé par défaut dans Ubuntu. Toutessu
les bibliothèques requises sont en/lib
. Busybox est un ensemble d’utilitaires liés statiquement. Les bibliothèques manquantes ne devraient donc pas poser de problèmes. Faire:(Bien que Busybox ait également une
su
applet, le/bin/busybox
binaire n'est pas setuid et ne fonctionne donc que s'il est exécuté en tant que root.)Si vous n'avez pas de mot de passe root,
vous pouvez probablement utiliser la solution de Gilles ici en utilisant(Gilles dit que cela ne fonctionnera pas avec les binaires setuid comme Sudo), redémarrez et éditez le menu GRUB avec lequel démarrerLD_LIBRARY_PATH
, ouinit=/bin/busybox
comme paramètre du noyau et déplacez-le. le dossier en arrière.la source
/lib
.LD_LIBRARY_PATH
ne serait pas utile pour exécuter sudo puisquesudo
est setuid. Si ses bibliothèques ne sont pas au bon endroit, sudo ne fonctionnera pas tant que root ne l’aura pas réparé./sbin
précisément ce genre de scénario: « Je fais une activité où les bibliothèques d'exécution seront jonglé autour mais besoin de toujours manipuler des fichiers ". Fondamentalement, la même approche avant Busybox a été inventée. (Le nombre de commandes disponibles de cette façon était très limité, car ces binaires liés de manière statique engloutissent l'espace disque.)/lib
, alors vous devrez probablement redémarrerinit=/bin/busybox
En plus de la réponse de muru :
vous auriez pu utiliser une clé USB de secours pour réparer votre système; Par exemple, si votre système utilise une version de Debian ou Ubuntu, démarrez la clé USB d'installation en mode de secours et effectuez les opérations appropriées
mount
etmv
etumount
.pour être en mesure de réparer plus facilement ces erreurs, j'installe généralement aussi une coquille statique avec plusieurs commandes internes (notamment avec certains
cp
,rm
,mv
builtins -comme), commesash
(il est emballé dans Debian et Ubuntu, et également disponible en châssis-3.8. tar.gz sous forme source) et bootez avecinit=/bin/sash
passé à Grub.PS:
sash
est légèrement buggé, et pas tout à fait conforme à Posix, mais reste très utile.la source
apt-get install sash
. Mais vous pouvez aussi télécharger sash-3.8.tar.gz et le compiler.Je pense que le meilleur moyen de le faire est de redémarrer à l’aide d’un système d’exploitation démarré par USB, CD ou DVD (Debian, Ubuntu, Suse, etc.). Montez ensuite le lecteur contenant les problèmes et renommez-le.
Plus sûr que de démarrer dans un champ de mines sans / usr ou / lib.
la source
Je suis tombé sur un problème similaire où je retitré
/usr/bin
à/usr/bin_bkp
un certain test, puis je ne suis pas en mesure de renommer (comme la commande n'a pas trouvé lesudo
dans le répertoire standard qui est/usr/bin
), puis je suis allé au/usr/bin_bkp
répertoire manuellement ( en utilisant le gestionnaire de fichiers ) et la plupart des fonctions (y compris le changement de nom) du clic droit sont désactivées.Puis j'ai essayé la commande suivante et cela a résolu le problème
J'ai invoqué le sudo depuis le chemin actuel et cela a fonctionné, maintenant tout est revenu à la normale.
Système d'exploitation: Xubuntu 14.04
la source
Je ne peux pas essayer cela pour le moment (et je ne suis pas sûr de vouloir le faire), mais il semble que cela devrait fonctionner pour vous créer un nouveau "/ usr" en tant que lien dur (et non pas un lien en douceur) vers votre " / usr_bak, puis supprimez le "/ usr_bak"
Le lien physique créé par "ln" ( sans l' argument "-s") dans le système de fichiers doit faire en sorte que les répertoires usr et usr_bak soient des liens également valides vers les répertoires en question. "rm" supprime simplement le lien que vous avez demandé de supprimer, pas les deux. Comme il existe toujours un lien valide vers le contenu, il doit rester accessible via le lien restant à "/ usr".
la source
.
et..
, le nombre de liens sur un répertoire vous indique le nombre de sous-répertoires de premier niveau). En outre,rm
ne fonctionne pas sur les répertoires, vous devrez utiliserrmdir
. (ln
etrm
travaillez sur des liens symboliques vers des répertoires, mais nous parlons d’un répertoire réel). En outre, cela ne résout pas le problème, car il nécessiteroot
simplementmv
, à cause des autorisations sur/
. Si vous pouviez exécuter ceci, vous pourriez courir à lamv
place comme une personne normale.ln(1)
sur Debian dit ceci pour l' option-d
/-F
/--directory
: "autoriser le superutilisateur à tenter de créer des liens physiques (note: cela va probablement échouer à cause des restrictions système, même pour le superutilisateur)" . Vous êtes donc libre d'essayer, mais votre système de fichiers ne vous le permettra probablement pas.