Як випадково перейменувати / usr, як я його перейменую?


62

Я випадково перейменував каталог /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додаток до перевстановлення системи?


2
Яка ОС це? Цікаво, як sudoнавіть потрапив до бібліотечного етапу, як правило, він перебуває /usr/bin/і не мав помилки з не знайденою командою. Також у вас встановлений пароль для кореня?
муру

3
@muru Це Ubuntu. Ви маєте рацію, я раніше отримував помилку, not foundтому я додав новий шлях /usr_bak/binдо цього, $PATHі тепер я отримую помилку у своєму дописі тут ...
Ів,

2
@ user1717828 це складно. Я повинен скласти проект, розроблений на Ubuntu 16.04, на Ubuntu 17.10. Тому я думаю, чи зможу я просто скопіювати /usrUbuntu 16.04, щоб перезаписати /usrUbuntu 17.10 ...
Ів,

6
Чи розглядали ви, щоб використовувати VM для складання проекту замість таких кардинальних змін?
Кевін

3
Ви можете запустити віртуальну скриньку в безголовому режимі . Можливо, найпростіше налаштувати гостя на іншій машині або отримати попередньо налаштований.
Кевін

Відповіді:


109

Оскільки ви встановили пароль для root, використовуйте suта busybox, встановлені за замовчуванням в Ubuntu. Усі suнеобхідні бібліотеки є в /lib. Busybox - це сукупність утиліт, які статично пов'язані, тому відсутні бібліотеки не повинні бути проблемою. Зробіть:

su -c '/bin/busybox mv /usr_bak /usr'

(Хоча в самому Busybox також є suаплет, /bin/busyboxдвійковий файл не встановлений, і тому він не працює, якщо він не працює як root.)

Якщо у вас немає кореневого пароля, ви, ймовірно, можете використати тут рішення ГіллаLD_LIBRARY_PATH , або (Гілль каже, що це не буде працювати з встановленими бінарними файлами, такими як sudo), перезавантажте та відредагуйте меню GRUB для завантаження init=/bin/busyboxяк параметр ядра та перемістіть папка назад.


73
Тепер не випадково перейменуйте /lib.
sleblanc

5
LD_LIBRARY_PATHне допоможе запустити sudo, оскільки sudoналаштовано. Якщо його бібліотеки знаходяться не в потрібному місці, sudo не працюватиме, поки root не відремонтує його.
Жиль

3
@Yves історична примітка: старі аромати Unix (які набагато старші за Linux) включали невелику колекцію статично пов'язаних бінарних файлів /sbinдля саме такого сценарію: "Я займаюся деякою діяльністю, коли бібліотеки часу виконуватимуться, але потрібно ще маніпулювати файлами. " В основному той же підхід до винайдення Busybox. (Кількість доступних таким чином команд була дуже обмеженою, оскільки ті статично пов’язані двійкові файли
обробляють диску-простір

8
@Yves, якщо ви перейменовані /lib, вам, ймовірно, доведеться перезавантажитисьinit=/bin/busybox
muru

3
@Yves: завантажтеся з USB-накопичувача, з живим дистрибутивом, який може монтувати ваші файлові системи, і ви готові все виправити. Навіть завантажуючи файли заміни з дзеркал пакета, якщо ви щось видалили.
Пітер Кордес

33

Окрім відповіді Муру :

  • ви могли використати якийсь USB-ключ для рятувального завантаження для ремонту вашої системи; наприклад, якщо у вашій системі є деякий Debian або Ubuntu, завантажте установочний USB-ключ у режимі порятунку та виконайте відповідне mountі mvі umount.

  • щоб мати можливість більш легко ремонтувати такі помилки, як правило , я також встановити статичну оболонку з декількома вбудованих командами ( в Зокрема , з деякими cp, rm, mv-подібних) вбудованими функціями, такими як sash(він упакований в Debian і Ubuntu, а також доступний в якості стулки-3.8. tar.gz у вихідному вигляді) та завантаження з init=/bin/sashпереданим на Grub.

PS: sashзлегка баггі і не повністю сумісний з Posix, але все-таки дуже корисний.


Не могли б ви пояснити, як встановити статичну оболонку з кількома вбудованими командами? Чи є якийсь посібник?
Ів

1
В Debian або Ubuntu: apt-get install sash. Але ви також можете завантажити sash-3.8.tar.gz і компілювати його.
Василь Старинкевич

Я тримаю liveiso на hdd зі спеціальним записом grub для подібних проблем. Не потрібно ускладнюватися, просто завантажте живу операційну систему та вільно маніпулюйте файлами :)
FreeSoftwareServers

3

Я думаю, що найкращий безпечний спосіб - це перезавантажити за допомогою завантажуваної ОС USB, CD або DVD (Debian, Ubuntu, Suse тощо). Потім встановіть накопичувач, що містить проблеми, і перейменуйте.

Безпечніше, ніж завантаження на мінне поле з фактично відсутньою / usr або / lib.


1
Ви можете завантажувати ISO безпосередньо з Grub / HDD, немає потреби в USB / DVD і т.д. Досить витончений трюк grub має зворотний зв'язок.
FreeSoftwareServers

0

Я зіткнувся з подібною проблемою, де я перейменувався /usr/binна /usr/bin_bkpякийсь тест, і тоді мені не вдалося перейменувати (так як команда не знайшла sudoв стандартному каталозі, який є /usr/bin), і тоді я перейшов до /usr/bin_bkpкаталогу вручну (за допомогою файлового менеджера ) і більшість функцій (включаючи перейменування) правою кнопкою миші вимкнено.

Потім я спробував таку команду, і вона виправила проблему

$/usr/bin_bkp/sudo mv /usr/bin_bkp/ /usr/bin/

Я викликав судо з поточного шляху і він спрацював, тепер все повернулося до норми.

ОС: Xubuntu 14.04


-3

Я не можу спробувати це прямо зараз (і я не впевнений , що я хочу), але мені здається , що це має працювати , щоб створити собі новий «/ USR» в якості жорсткої посилання (не м'яка посилання) на ваш " / usr_bak, потім видаліть "/ usr_bak"

ln /usr_bak /usr
rm /usr_bak

Жорстке посилання, створене "ln" ( без аргументу "-s") у файловій системі, повинно зробити як каталоги usr, так і usr_bak однаково допустимими посиланнями на відповідні каталоги. "rm" просто видаляє одне посилання, яке ви попросили видалити, а не обидва. Оскільки досі є дійсне посилання на вміст, вони повинні залишатися доступними через посилання, що залишилося на "/ usr".


5
У мене було враження, що Linux (або принаймні Ubuntu) не дозволяє жорсткі посилання на каталоги. Наприклад, askubuntu.com/questions/210741/…
Кріс Бушард

4
@Chris: Так, Linux не дозволяє жорсткі посилання каталогів (окрім .і .., тому кількість посилань у каталозі говорить вам про кількість підкаталогів першого рівня). Крім того, rmце не працює в каталогах, вам доведеться використовувати rmdir. ( lnі rmпрацювати над посиланнями на каталоги, але ми говоримо про фактичний каталог). Крім того, це не вирішує проблему, оскільки це вимагається rootтак само mv, через дозволи на/ . Якби ти міг це запустити, ти міг би бігти, mvяк звичайна людина.
Пітер Кордес

2
Жорсткі посилання на каталоги не підтримуються в більшості (усіх?) Unice, тому що для програмного забезпечення, яке робить рекурсивну сканування файлової системи, занадто складно, щоб виявити нескінченні цикли. Це можливо, якщо програмне забезпечення відслідковує всі відвідані індекси та сканує файлову систему, знаючу про індекси (тобто не FAT32 / NTFS), але перевірити наявність символічних посилань і не пройти їх набагато простіше. Все, що потрібно, - це швидкий дзвінок до lstat (2), щоб перевірити тип файлу.
пінгвін359

2
@Pryftan, мій ln(1)на Debian каже це для параметра -d/ -F/ --directory: "дозвольте суперпользователю спробувати жорсткі посилання каталогів (зауважте: ймовірно, не вдасться через системні обмеження навіть для суперпользователя)" . Тож ви можете спробувати, але ваша файлова система, ймовірно, не дозволить вам.
Toby Speight

1
@TobySpeight Інша думка: див. Також symlink (7), в якому сказано: Жорсткі посилання можуть не посилатися на каталоги (щоб запобігти можливості циклів у дереві файлової системи, що б заплутало багато програм), а може не посилатися на файли в різних файлових системах (оскільки номери inode не є унікальними для файлових систем). Це змушує мене думати, що спроба жорсткого посилання насправді може бути способом формулювання чогось іншого, що відбувається, а саме те, що функція викликається, але вона виходить з ладу саме тому, що це каталог. (Посилання на файлову систему - це те, про що я думав в іншому коментарі)
Прифтан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.