Я случайно переименовал каталог /usr
в /usr_bak
.
Я хочу , чтобы изменить его обратно, так что я добавить путь /usr_bak/bin
к , $PATH
чтобы позволить системе , чтобы найти команду sudo
.
Но теперь sudo mv /usr_bak /usr
выдает ошибку:
sudo: error while loading shared libraries: libsudo_util.so.0: cannot open shared object file: No such file or directory
Есть ли способ переименовать /usr_bak
как /usr
помимо переустановки системы?
sudo
даже дойти до стадии библиотеки, она обычно находится/usr/bin/
и должна была завершиться с ошибкой «команда не найдена». Кроме того, у вас есть пароль root?not found
поэтому я добавил новый путь/usr_bak/bin
к нему,$PATH
и теперь я получаю сообщение об ошибке в своем посте здесь .../usr
Ubuntu 16.04, чтобы перезаписать/usr
Ubuntu 17.10 ...Ответы:
Поскольку вы установили пароль для пользователя root, используйте
su
иbusybox
, установленный по умолчанию в Ubuntu. Всеsu
необходимые библиотеки находятся в/lib
. Busybox - это набор статически связанных утилит, поэтому отсутствие библиотек не должно быть проблемой. Делать:(Хотя в самом Busybox также есть
su
апплет,/bin/busybox
бинарный файл не имеет setuid и поэтому не работает, если не запускается от имени пользователя root.)Если у вас нет пароля root,
вы, возможно, могли бы использовать решение Gilles, используя здесь(Gilles говорит, что это не будет работать с бинарными файлами setuid, такими как sudo), перезагрузиться и отредактировать меню GRUB для загрузкиLD_LIBRARY_PATH
, илиinit=/bin/busybox
в качестве параметра ядра и переместить папка обратно.источник
/lib
.LD_LIBRARY_PATH
не поможет запустить sudo, так какsudo
это setuid. Если его библиотеки не в нужном месте, sudo не будет работать, пока root не исправит его./sbin
именно для такого сценария: «Я выполняю какое-то действие, когда библиотеки времени выполнения будут перетаскиваться, но нужно еще манипулировать файлами. " В основном такой же подход до изобретения Busybox. (Количество команд, доступных таким образом, было очень ограничено, потому что эти статически связанные двоичные файлы поглощают дисковое пространство.)/lib
, то вам, вероятно, придется перезагрузить компьютерinit=/bin/busybox
В дополнение к ответу Муру :
вы могли бы использовать какой-нибудь USB-ключ для восстановления вашей системы; Например, если в вашей системе установлен Debian или Ubuntu, загрузите установочный USB-ключ в режиме восстановления и выполните соответствующие действия
mount
иmv
иumount
.чтобы иметь возможность более легко ремонтировать такие ошибки, как правило , я также установить статическую оболочку с несколькими встроенных командами ( в частности , с некоторыми
cp
,rm
,mv
-подобным) встроенными функциями, такими какsash
(он упакован в Debian и Ubuntu, а также доступен в качестве створки-3.8. tar.gz в исходном виде) и загрузиться сinit=/bin/sash
передачей в Grub.PS:
sash
немного глючит, и не совсем Posix-совместимый, но все же очень полезен.источник
apt-get install sash
. Но вы также можете скачать sash-3.8.tar.gz и скомпилировать его.Я думаю, что самый безопасный способ - это перезагрузить компьютер, используя ОС, загруженную с USB, CD или DVD (Debian, Ubuntu, Suse и т. Д.). Затем подключите диск, содержащий проблемы, и выполните переименование.
Безопаснее, чем загрузка в минное поле с отсутствующими / usr или / lib.
источник
Я столкнулся с подобной проблемой , когда я переименованной
/usr/bin
в/usr/bin_bkp
течение некоторого испытания , и тогда я не смог переименовать (как команда не нашлаsudo
в стандартном каталоге , который/usr/bin
) , а затем я пошел в/usr/bin_bkp
каталог вручную ( с помощью диспетчера файлов ) и большинство функций (включая переименование) при щелчке правой кнопкой мыши отключены.Затем я попробовал следующую команду, и это решило проблему
Я вызвал sudo с текущего пути, и он заработал, теперь все вернулось на круги своя.
ОС: Xubuntu 14.04
источник
Я не могу попробовать это прямо сейчас (и не уверен, что хотел бы), но похоже, что это должно сработать, чтобы создать себе новый "/ usr" в качестве жесткой ссылки (не мягкой ссылки) на вашу " / usr_bak, затем удалите "/ usr_bak"
Жесткая ссылка, созданная с помощью «ln» ( без аргумента «-s») в файловой системе, должна сделать каталоги usr и usr_bak одинаково допустимыми ссылками на эти каталоги. «rm» просто удаляет одну ссылку, которую вы попросили удалить, а не обе. Поскольку по-прежнему имеется действующая ссылка на содержимое, они должны оставаться доступными через оставшуюся ссылку в «/ usr».
источник
.
и..
, поэтому счетчик ссылок на каталог указывает количество подкаталогов первого уровня). Кроме того,rm
не работает с каталогами, вам придется использоватьrmdir
. (ln
иrm
работаем над символическими ссылками на каталоги, но мы говорим о реальном каталоге). Кроме того, это не решает проблему, потому что это требуетroot
точно так жеmv
, из-за разрешений на/
. Если бы вы могли запустить это, вы могли бы бежатьmv
вместо этого, как нормальный человек.ln(1)
on Debian, говорит об этом для опции-d
/-F
/--directory
: «разрешить суперпользователю пытаться жестко связать каталоги (примечание: возможно, произойдет сбой из-за системных ограничений, даже для суперпользователя)» . Так что вы можете попробовать, но ваша файловая система, вероятно, не позволит вам.