Переміщений контейнер для сміття та інші папки! Як їх повернути?


13

Я випадково перемістив усі папки з root у підпапку. ( /bin, /etc, /home, /lib, /usr... все переїхали) тільки ті , що не були переміщені, так як вони були у використанні, є /bak, /boot, /dev, /proc, /sys.

Тепер будь-яка команда, яку я намагаюся виконати, просто не відбудеться. Я постійно отримую "Немає такого файлу чи каталогу".

Мене підключають через ssh та ftp, але я не можу переміщувати файли через ftp, оскільки безпосередньо вхід у SU відключений. У мене також є доступ до фактичного сервера, якщо мені потрібно щось робити безпосередньо звідти.

Я припускаю, що мені потрібно буде відредагувати файл конфігурації, щоб сказати, де знайти /binпапку, і це допомогло б мені знову отримати доступ, але я не знаю, який би це був файл, або як це зробити (оскільки я навіть не може працювати chmodдля зміни дозволів).

Чи є якийсь вихід із цього, крім повторної інсталяції?

Я працюю над старою версією CentOS.

Я надзвичайно новачок у світі Linux, звідси ця дія та питання ...


Хоча це не є вирішенням вашої проблеми, я рекомендую прочитати це: lug.wsu.edu/node/414 Схожа ситуація, але він фактично видалений / бін.
stribika

Відповіді:


33

Якщо у вас все ще є коренева оболонка, у вас може виникнути шанс відновити систему. Припустимо , що ви перемістили все загальні каталоги ( /bin, /etc, /lib, /sbin, /usr- це ті , які могли б зробити відновлення важкого) під /oops.

Ви не зможете безпосередньо надати mvкоманду, навіть якщо вказати повний шлях /oops/bin/mv. Це тому mv, що динамічно пов'язане ; оскільки ви перемістили /libкаталог, mvйого не можна запустити, оскільки він не може знайти бібліотеки, що входять до його коду. Насправді, це навіть гірше, ніж це: mvнеможливо знайти динамічний завантажувач /lib/ld-linux.so.2 (назва може змінюватися залежно від вашої архітектури та варіанту unix, а каталог може мати інше ім’я, наприклад, /lib32або /lib64). Тому, поки ви не перемістили /libкаталог назад, вам потрібно чітко викликати посилання, і вам потрібно вказати шлях до переміщених бібліотек. Ось команда, протестована на Debian стисканні i386.

export LD_LIBRARY_PATH=/oops/lib:/oops/lib/i386-linux-gnu
/oops/lib/ld-linux.so.2 /oops/bin/mv /oops/* /

Можливо, вам доведеться трохи відкоригувати це для інших дистрибутивів чи архітектур. Наприклад, для CentOS на x86_64:

export LD_LIBRARY_PATH=/oops/lib:/oops/lib64
/oops/lib64/ld-linux-x86-64.so.2 /oops/bin/mv /oops/* /

Коли ви щось накрутили /lib, це допомагає мати статично пов'язаний набір інструментів. Деякі дистрибутиви (я не знаю про CentOS) забезпечують статично пов'язану копію Busybox . Там також стулка , автономні оболонки з багатьма командами вбудованих. Якщо у вас є одне з них, ви можете відновити звідти. Якщо ви їх не встановили раніше, то вже пізно.

# mkdir /oops
# mv /lib /bin /oops
# sash
Stand-alone shell (version 3.7)
> -mv /oops/* /
> exit

Якщо у вас більше немає кореневої оболонки, але ви все ще маєте прослуховування демона SSH, і ви можете увійти безпосередньо як корінь через ssh, і у вас є один із цих статично пов’язаних наборів інструментів, ви зможете ввімкнути скриньку. Це може працювати, якщо ви переїхали /libі /bin, але ні /etc.

ssh root@broken.example.com /oops/bin/sash
root@broken.example.com's password:
Stand-alone shell (version 3.7)
> -mv /oops/* /

Деякі адміністратори налаштовують альтернативний обліковий запис зі статично пов'язаною оболонкою або змушують кореневий обліковий запис використовувати статично пов’язану оболонку саме для таких проблем.

Якщо у вас немає кореневої оболонки і ви не вжили заходів обережності, вам потрібно буде завантажитися з живого CD / USB Linux (будь-який буде робити, поки це досить недавно, щоб мати доступ до своїх дисків і файлових систем) і перемістити файли назад.


1
Дякую, Жилле. Ви надали дуже корисну інформацію про те, на що я повинен бути обережним у майбутньому.
Menelaos

Дякую Жилле! Це врятувало мене. Я додав редагування для 64-бітної Linux env. У моєму випадку 64-розрядний CentOS 7
CompEng88

@ ComputerEngineer88 Дякую, але коли ви вносите зміни, будь ласка, не додайте маркери "EDIT" або додайте їх у кінці публікації, де вони не належать. Тримайте потік тексту. Повідомлення мають історію редагування, якщо люди хочуть знати, що містилось раніше у публікації. Коли люди читають публікацію нормально, їм не байдуже, що трохи пізніше було додано.
перестань бути злим"

Дійсно? Я завжди зосереджуюсь на редакціях. Значить, щось нове було вивчено, і для мене це найважливіше. Все те ж - доки люди отримують користь!
CompEng88

@ ComputerEngineer88 У мене був такий самий рефлекс, коли я почав використовувати Stack Overflow. Але насправді повідомлення про обмін стеками набагато ближче до статті у Вікіпедії, ніж до публікації на дискусійному форумі. Ви очікуєте, що люди прочитають дописи на форумі незабаром після їх публікації, тому має сенс мати видимі вказівки, якщо вони були відредаговані. Але скажімо, що хтось бачить цю тему в 2027 році: їм було б байдуже, чи був абзац там з 2011 року чи був доданий у 2019 році.
Жил "Так - перестань бути злим"

11

Ви, ймовірно, можете відновитись без перезавантаження, тому не перезавантажуйте, поки ви не спробували деякі інші речі, оскільки вони не завантажуватимуться. Якщо у вас все ще відкритий сеанс SSH, спробуйте такі:

  • Де програма запускається, встановлюється за допомогою змінної $ PATH. Ви можете додати нове місце для сміття до шляху, запустівши export PATH="$PATH:/newpath/to/bin:/newpath/to/usr/bin". Можливо, вам також знадобиться додати відповідні каталоги sbin . Ви також можете запускати програми вручну через їх повний шлях, /path/to/mv [from] [to]наприклад, вони повинні працювати, навіть якщо mv знаходиться в іншому місці. Найскладніша частина полягає в тому, що більшість команд хочуть отримати доступ до загальних бібліотек, і ви скажете, що /libпереїхали, тому вам потрібно встановити змінну для місця, де це теж є.export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/newpath/to/lib/:/newpath/to/usr/lib

  • Як тільки ви зможете виконати кілька основних команд, перемістіть матеріал назад! mv /path/to/subfolder/* /буде в порядку! Як тільки все повернеться на місце, система повинна вести себе нормально.

Якщо це не вдається, завантаження будь-якого LiveCD та встановлення диска повинно дозволяти вам переміщувати папки туди, куди вони належать. Вам не потрібно перевстановлювати або навіть використовувати дистрибутив livecd, потрібно просто встановити накопичувач і перемістити папки назад у потрібне місце на диску. Багато рятувальних дисків на базі Linux спеціалізуються на наданні лише декількох основних консольних інструментів для проведення такого ремонту.


Працювати через SSH не вдалося, тому я завантажив liveCD і намагаюся налагодити роботу. Я на grub і намагаюся встановити накопичувач, але це не дозволить мені, тому що ядро ​​не завантажено. і неможливо побачити точний шлях існуючих шляхів, очевидно, ускладнює це ...
Menelaos

1
Завантажтесь наживо, встановіть свій диск, перемістіть речі на свої місця, перезавантажте систему та… удачі.
Калеб

2
Це недостатньо для встановлення LD_LIBRARY_PATH, вам також потрібно чітко викликати динамічний завантажувач, наприклад LD_LIBRARY_PATH=/newpath/to/lib /newpath/to/lib/ld-linux.so.2 /newpath/to/bin/mv.
Жил 'ТАК - перестань бути злим'

4

Ви повинні мати можливість перезавантажити комп’ютер із встановленням компакт-диска в режимі єдиного користувача, змонтувати кореневу файлову систему та перемістити файли назад в Linux. Я не знаю багато центсів, але це як RHEL, так що це має працювати.


Дякую. Я завантажую його, як ми говоримо. Чи має значення це, якщо це живий компакт-диск або весь встановлений DVD?
Menelaos

@Menelaos: Ви не хочете інсталювати, ви хочете щось, що можна запустити в реальному часі для цього рішення. Деякі інсталяційні диски мають живі версії, але деякі просто хочуть відключити їх відразу. У деяких є режими "порятунку", що саме ви хочете, але є також спеціальні рятувальні диски Linux. Це не повинно бути вашим дистрибутивом, воно повинно бути чимось, що може змонтувати файлову систему Linux та перемістити папки назад. Дивіться мою відповідь.
Калеб

Дивишся на sysresccd.org , щоб побачити один з рятувальних дисків , якщо ви хочете мають велику документацію , щоб побачити , як використовувати його. Допомога в його використанні для вирішення цієї проблеми може бути складною на цьому форумі та поза моїм наявним часом. В іншому CD-центри повинні допомогти. Останній живий компакт-диск може працювати, а може не працювати ... Отже, маючи на увазі подібні проблеми, завжди слід пам’ятати про інсталяційний носій / iso версії, яку ви встановили. Також створіть резервну копію цілих файлових систем.
Jamess

2

Велике спасибі Жиллю, через 5 років і твої пости все ще врятували мій день, якщо не тиждень.

Я мав на увазі перемістити вміст підпапки в поточну папку, але замість цього mv sub/* .я це зробив mv sub /* ., тому перемістив усе до поточної папки. На щастя, я знайшов цю відповідь і зміг відносно встановити свою машину. Однак мені довелося трохи налаштувати команди, оскільки я працюю на машині x86_64 під управлінням Ubuntu 16.04. Я хотів би залишити тут інструкції, якщо хтось бореться:

export LD_LIBRARY_PATH=/oops/lib:/oops/lib/x86_64-linux-gnu
/oops/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 /oops/bin/mv /oops/* /

0

Я хотів би додати ще кілька команд, які потрібно виконати після того, як ви застосуєте відповідь Ktipr для сучасних систем (x86_64 машини, на яких працює Unix), мені не вдалося отримати каталоги "тощо", переміщені з mv, оскільки він показав помилку

Error : Directory not empty

тому довелося використовувати

rsync -a source_file target_location

щоб переконатися, що мені вдалося повернути все в порядок. Якщо у вас його ще не встановлено, спочатку потрібно буде встановити його.

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