/ bin / etc / lib64 / root / sbin видалено або переміщено у папці mv / * / *, поки su


11

ОС - Centos 6.5 64-розрядний

Я завантажив файл tar і хотів зняти та знімати mvйого.

Я untared, потім випадково (як root) побіг mv folder/* /*замість mv folder/* .bash сказав, що не може перезаписати деякі файли, а потім попросив дозволу для інших. Я ctrl-c'd вийшов.

Я залишив сеанс терміналу відкритим, але вийшов su.

Тепер я втратив доступ до більшості shellкоманд, не можу до lsжодних каталогів і не можу повернутися до нього su.

Веб-сервер і сервіси як і раніше працюють. Я можу працювати дуже мало команд, cdце один з них , і коли я намагаюся , cdщоб /etcабо /binце помилки з no directory found.

EDIT Просто помітив , все папки , відсутні /( bin, etc, lib64, root, sbin) був переміщений в /varкаталог, я спробував /var/bin/suі отримати: -bash: /var/bin/su: /lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory


1
Ви не можете бігти /var/bin/suбезпосередньо?
Darkhogg

Будь ласка, не редагуйте питання з рішеннями. У мережі обміну стеками ви скоріше додаєте відповідь, залиште коментар до наявної відповіді, щоб покращити відповідь.
Бернхард

@Darkhogg /var/bin/su: user root does not existЯ думаю, що ми визначили, що це неможливо зробити, тому що / etc є в / var / etc
webaholik

@Bernhard намагався виправити
webaholik

Відповіді:


22

Якщо ваша система busyboxвстановлена, ви можете використовувати це для повернення речей.

busyboxце двійковий файл з великою кількістю вбудованих стандартних утиліт. Такі речі , як mv, sh, lsі т.д.

З вашого коментаря до відповіді Павла, звучить так, ніби все закінчилося /var. Можна спробувати робити /var/bin/busybox mv /var/{bin,etc,lib32,lib64,root,sbin,usr} /. Це повинно знову отримати більшу частину системи. Існує кілька таких каталогів, /tmpякі також існують як /var/tmp, тому їх не можна просто перемістити. Сподіваюсь, що це ті, хто mvскаржився, і їх залишили в спокої.

 

Отримання кореневої оболонки

Ви також згадали, що втратили кореневу оболонку, і suце дає ld-linuxпомилку в бібліотеці. Можливо, ви зможете використовувати наступне:

LD_LIBRARY_PATH=/var/lib64 /var/lib64/ld-linux-x86-64.so.2 /var/bin/su

Примітка. Після спроби це не працює. Це відбувається тому , що suвимагає кілька файлів в /etc( passwd, pam.dі інших). Якби /etcвсе-таки були недоторканими, це мала б хороші шанси на успіх.

 

Без зайнятості

Якщо у вас немає вільної скриньки, ви можете використовувати той самий фокус ld-linux, що і для su:

LD_LIBRARY_PATH=/var/lib64 /var/lib64/ld-linux-x86-64.so.2 /var/bin/mv /var/{bin,etc,lib32,lib64,root,sbin,usr} /

 

З живого компакт-диска

Як обговорювалося в коментарях, якщо ви втратили кореневу оболонку, ви сильно застрягли. В основному для того, щоб виправити це, вам потрібні привілеї root. Єдиний спосіб потрапити туди - це утиліта, така як suабо sudoескалація ваших дозволів (обидва вони нефункціональні на даний момент), або викрадення іншої програми, яка вже працює як root (залежно від того, що працює, мабуть не можливо).

Це залишає єдиний варіант, як живий компакт-диск. Після завантаження на живий компакт-диск (або на живий USB, або будь-який інший) просто встановіть кореневий об'єм і перемістіть пошкоджені каталоги /varназад до їх початкового дому /.


Конспект того, що сталося

folder/*розширився б на щось таке, як folder/fooі folder/bar.
/*розширився б на щось подібне /bin /lib32 /lib64 /etc /home /root /var. Зауваживши, що /varце останній пункт.
Отже, коли оболонка розширила всі ці кулі, вона запустила б щось подібне:

mv folder/foo folder/bar /bin /lib32 /lib64 /etc /home /root /var

Як /varі останній пункт у списку, все перемістилось у нього.


Чому /var/bin/suпомилки з/lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory

Майже всі бінарні файли в Linux є динамічно пов'язаними проти ld-linux. ld-linuxце бібліотека, відповідальна за завантаження інших бібліотек, необхідних бінарним файлом. У вашій системі це живе /lib64/ld-linux-x86-64.so.2. З моменту переміщення цього каталогу будь-який динамічно пов'язаний виконуваний файл більше не працюватиме.

Причина зайнятості працює в тому, що зайнятий ящик статично пов'язаний. Це не використовує ld-linux.


Гарна ідея. Зазвичай у CentOS встановлений зайнятий ящик через initramfs , щоб він міг добре працювати.
Павло Шімерда

busyboxзвучить як ідеальне рішення, до жаль , не встановлено, після цього фіксується ... в той же час, є в будь-якому випадку правильний шлях для команди , щоб виконати /var/lib64/ld-linux-x86-64.so.2замість /lib64/ld-linux-x86-64.so.2? Це, здається, те, що вбиває команди в/var/bin
webaholik

@Patrick: Не могли б ви додати інформацію про те, що команда OP, призначена для використання, неправильна? Тоді я міг би видалити свою відповідь, оскільки вона зараз (майже) зайва. Це правильний спосіб використання обміну стеками, до речі?
Павло Шімерда

1
Вона шукає кілька речей , в /etcяких не існує ( /etc/passwd, /etc/nsswitch, /etc/pam.d, і , можливо , більше). Щоб suпрацювати, /etcпотрібно повернутись у своє початкове місце. Якщо у вас немає корінної оболонки, я думаю, що ви застрягли :-(
Патрік

2
@ user1296209 Коли ви отримаєте livecd, просто встановіть кореневий том і перемістіть ці каталоги назад. Це все, що вам потрібно, щоб знову запуститись.
Патрік

10

mv folder/* ./*також неправильно. Ви повинні бути більш уважними щодо семантики команд, які виконуєте. mvКоманда з більш ніж двома аргументами просто приймає всі аргументи , за винятком останнього, і переміщує шляху вони вказують в каталог , вказаний в останньому аргумент.

Для переміщення всіх каталогів (крім прихованих) з папки до поточного каталогу, слід використовувати:

mv folder/* .

Ви зламали працюючу систему. Ваші оболонки та вбудовані команди продовжують працювати. Вам доведеться завантажити живий компакт-диск та перемістити каталоги назад. Мені не відомо, що баш вбудований для переміщення / перейменування файлів, який дозволить вам виправити ситуацію без перезавантаження, див. Відповідь Патріка для отримання більш детальної інформації.


Я не усвідомлював цього: я можу CD / var / bin & / var / тощо, схоже, що папки переміщені до var, все одно я можу їх перемістити назад? ... без livecd?
webaholik

Я спробував / var / bin / su & get: -bash: / var / bin / su: /lib64/ld-linux-x86-64.so.2: неправильний перекладач ELF: Немає такого файлу чи каталогу
webaholik

Ага ... Я виправлю відповідь.
Павло Шімерда

якою повинна була моя mvкоманда переміщати всі файли та папки з папки до поточної директорії?
webaholik

1
@ user1296209: Якщо ви завантажуєте живу систему, у вас, безумовно, є кореневий доступ до вашої життєвої системи. Ваша фактична система - це лише змонтований розділ, який не має особливого значення для живої системи. Єдине ускладнення полягає в тому, що ваші /та /varкаталоги можуть знаходитись на різних розділах, і в цьому випадку вам потрібно встановити обидва.
celtschk

2

Я випадково переїхав / usr в / usr_old і все пішло в пекло. На щастя, я залишився в підказці і зміг виконати таку команду, щоб відновити папку usr:

LD_LIBRARY_PATH=/usr_old/lib64 /usr_old/lib64/ld-linux-x86-64.so.2 /usr_old/bin/mv /usr_old /usr

Welcomme з U&L, це була єдина команда, яку ви ввели? Будь ласка, надайте більш детальну процедуру. (спеціально для десятимісячного старого питання, поспішати не потрібно)
Архемар

1
Так, після того, як я набрав цю команду, все було відновлено. Можливо, я повинен зазначити, що я корінь під час всього цього.
Mansehr

1

ВАЖЛИВО Якщо ви тут і mvнеправильно запущені, не можете запускати shellкоманди та папки, відсутніх у кореневому каталозі ( /), насамперед, якщо у вас є SU, НЕ вийдіть SUдо виправлення, тому що ви не отримаєте його назад. Якщо ви віддалено підключені, якщо ви від'єднаєтесь, ви не зможете ssh, залиште сервер у спокої, не варто reboot- більшість запущених служб повинні бути в порядку. Ви можете спробувати одне з багатьох рішень, запропонованих Патріком ... однак вам, швидше за все, знадобиться фізичний доступ, якщо ви накрутили, як я.

Опинившись перед машиною, я перезавантажив її. Як і очікувалося, я отримав паніку з ядром.

Я подумав, що це буде досить легко виправити, вставити livecd, увійти в режим порятунку ДО ЦЕЙ ТОЧКИ ЛЕСНО - тоді мені довелося спробувати встановити свою кореневу директорію. Однак мені знадобилося більше, ніж просто проста команда mount.

Це було тому, що я, як і багато людей, мав файлову систему lvm, і мені вперше довелося впоратися із таким порятунком. Мені довелося шукати в Інтернеті, щоб побачити, що мені потрібно зробити. Я закріпив цю інформацію на цій посаді. Ось мій процес виправлення моєї проблеми.

1) Вставлений Centos_6.4_min cd

2) Інтерфейс GUI запитав, що я хочу зробити, вибрав Rescue

3) Rescue намагався встановити поточну систему, але вказав, що у мене немає Linux-розділів

4) Виберіть для введення, shellколи була надана опція

На даний момент я спробував багато речей, щоб встановити систему, не пощастивши, я впевнений, що це всі кроки, які я повинен був зробити (через lvm):

5) Сканував мої томи,

lvmdiskscan

6) Ран lvscan, показав усі перелічені як "неактивні"

lvscan

7) модуль пристрою для завантаження

modprobe dm-mod

8) змінити існуючі томи на активні

vgchange -ay

9) Побіг lvscanзнову, тепер усі пункти перераховані як "активні"

10) Створено точку монтажу та змонтував логічний розділ

mkdir /mnt/root

mount /dev/VolGroup00/LogVol00 /mnt/root

11) Переміщені папки назад (вам можуть знадобитися інші):

mv /var/{bin,etc,lib64,mnt,root,sbin} /

12)reboot

13) УСПІХ!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.