Вопрос или проблема
Я случайно переименовал директорию /usr
в /usr_bak
.
Я хочу вернуть её обратно, поэтому добавляю путь /usr_bak/bin
в $PATH
, чтобы система могла найти команду sudo
.
Но теперь команда sudo mv /usr_bak /usr
выдает ошибку:
sudo: ошибка при загрузке общих библиотек: libsudo_util.so.0: невозможно открыть общий объектный файл: Нет такого файла или директории
Есть ли способ переименовать /usr_bak
в /usr
, кроме как переустановкой системы?
Остальная часть этого ответа была актуальна, когда он был написан, но сейчас это не так из-за usrmerge, поэтому просто загрузите живую USB и используйте sudo
в ней, чтобы вернуть директории на место. Вы также можете загрузиться в busybox, если он установлен, используя параметр ядра init=/usr_bak/bin/busybox
(или куда бы вы его ни переместили – /bin
вообще не будет работать в системе с объединенной /usr
).
Так как вы установили пароль для root, используйте su
и busybox
, который установлен по умолчанию в Ubuntu. Все необходимые для su
библиотеки находились были в /lib
. Busybox – это набор утилит, которые статически слинкованы, так что отсутствие библиотек не должно быть проблемой. Делайте:
su -c '/bin/busybox mv /usr_bak /usr'
Хотя у Busybox есть также апплет su
, бинарный файл /bin/busybox
не имеет бита setuid и поэтому не работает, если не запущен от имени root.
Если у вас нет пароля root, вы могли бы, вероятно, использовать решение Жиля здесь с использованием (Жиль говорит, что это не сработает с бинарными файлами setuid, такими как sudo) перезагрузитесь и отредактируйте меню GRUB, чтобы загрузиться с LD_LIBRARY_PATH
, илиinit=/usr_bak/bin/busybox
как параметром ядра и вернуть папку назад.
В дополнение к ответу muru:
-
вы можете использовать USB-ключ для аварийной загрузки, чтобы восстановить свою систему; например, если ваша система основана на Debian или Ubuntu, загрузите установочный USB-ключ в аварийном режиме и выполните соответствующее
mount
,mv
иumount
. -
чтобы проще исправлять такие ошибки, я обычно также устанавливаю статическую оболочку с несколькими встроенными командами (в частности, с некоторыми встроенными командами, похожими на
cp
,rm
,mv
), такими какsash
(она упакована в Debian и Ubuntu, а также доступна в виде sash-3.8.tar.gz в исходной форме) и загружаюсь сinit=/bin/sash
, переданным в Grub.
PS: sash
немного багован и не совсем соответствует Posix, но все же очень полезен.
Я считаю, что самый безопасный способ – это перезагрузиться с использованием USB, CD или DVD с ОС (Debian, Ubuntu, Suse и т.д.). Затем смонтируйте диск, содержащий проблемы, и выполните переименование.
Это безопаснее, чем загружаться в минное поле с фактически отсутствующими /usr
или /lib
.
Я столкнулся с аналогичной проблемой, когда я переименовал /usr/bin
в /usr/bin_bkp
для какого-то теста, и затем не смог переименовать (так как команда не нашла sudo
в стандартной директории /usr/bin
), и тогда я вручную перешел в директорию /usr/bin_bkp
(используя менеджер файлов), и большинство функций (включая переименование) в контекстном меню были отключены.
Затем я попробовал следующую команду, и это исправило проблему:
$/usr/bin_bkp/sudo mv /usr/bin_bkp/ /usr/bin/
Я вызвал sudo из текущего пути, и это сработало, теперь все вернулось в норму.
ОС: Xubuntu 14.04
Я не могу попробовать это прямо сейчас (и не уверен, что хочу), но кажется, что это должно сработать, чтобы создать себе новый “/usr” в виде жесткой ссылки (не мягкой ссылки) на ваш “/usr_bak”, а затем удалить “/usr_bak”:
ln /usr_bak /usr
rm /usr_bak
Жесткая ссылка, созданная командой “ln” (без аргумента -s) в файловой системе, должна сделать обе директории usr и usr_bak равнозначными ссылками на соответствующие директории. Команда “rm” просто удаляет ту ссылку, которую вы попросили удалить, не затрагивая обе из них. Поскольку все еще есть действительная ссылка на содержимое, они должны оставаться доступными через оставшуюся ссылку в “/usr”.
Ответ или решение
Если вы случайно переименовали директорию /usr
в /usr_bak
, и теперь хотите вернуть её обратно, вот несколько способов, как это сделать, избегая переустановки системы.
Варианты решения проблемы:
-
Использование USB-накопителя или Live CD:
- Самый безопасный способ – это загрузиться с помощью USB-накопителя или Live CD (например, установочного образа Ubuntu или Debian в режиме восстановления). Когда вы загрузитесь в этом режиме, следуйте данным шагам:
- Откройте терминал.
- Определите, где монтируется ваш основной раздел (обычно это
/dev/sda1
или подобное). Вы можете использовать командуlsblk
, чтобы просмотреть все диски и разделы. - Смонтируйте раздел:
sudo mount /dev/sda1 /mnt
- Переименуйте директорию:
sudo mv /mnt/usr_bak /mnt/usr
- После завершения процедуры, размонтируйте раздел:
sudo umount /mnt
- Перезагрузите систему.
- Самый безопасный способ – это загрузиться с помощью USB-накопителя или Live CD (например, установочного образа Ubuntu или Debian в режиме восстановления). Когда вы загрузитесь в этом режиме, следуйте данным шагам:
-
Использование BusyBox:
- Если у вас установлен BusyBox, вы можете использовать его для выполнения команд без зависимости от библиотек, находящихся в
/usr
. - Загружая систему, отредактируйте GRUB, добавив параметр
init=/usr_bak/bin/busybox
. Это позволит вам загрузиться в BusyBox и затем выполнить команду:mv /usr_bak /usr
- Если у вас установлен BusyBox, вы можете использовать его для выполнения команд без зависимости от библиотек, находящихся в
-
Использование
su
и директории начального загрузчика:- Если у вас есть root-пароль, выполните команду
su
для переключения на пользователя root. Затем внутри BusyBox выполните:/usr_bak/bin/busybox mv /usr_bak /usr
- Если у вас есть root-пароль, выполните команду
-
Запуск команды из текущей директории:
- Если вы можете получить доступ к
/usr_bak/bin
, запуститеsudo
из этой директории, чтобы переименовать директорию:/usr_bak/bin/sudo mv /usr_bak /usr
- Если вы можете получить доступ к
-
Использование жесткой ссылки:
- Теоретически, вы можете попробовать создать жесткую ссылку:
ln /usr_bak /usr rm -r /usr_bak
- Однако этот способ может привести к непредсказуемым результатам и не рекомендуется как основной метод.
- Теоретически, вы можете попробовать создать жесткую ссылку:
Примечания
- Важно помнить, что любые изменения, касающиеся системных директорий, могут серьезно повлиять на работу вашей системы. Запись и тестирование решений должны производиться с осторожностью.
- Всегда рекомендуется иметь резервные копии важных данных перед выполнением операций, которые могут изменить файловую систему.
Если у вас возникнут дополнительные вопросы или возникнут сложности с выполнением данных рекомендаций, не стесняйтесь обращаться за помощью.