Який вміст / bin / bash, і що робити, якщо випадково їх перезаписав


24

Я випадково перезаписав файл / bin / bash з німим сценарієм, який я мав намір помістити всередині папки / bin.

Як повернути вміст цього файлу? Чи є спосіб я знайти вміст в Інтернеті та просто скопіювати їх назад? Які мої варіанти тут, враховуючи, що термінал видає помилку, коли йдеться про "Забагато символічних посилань?"

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

Редагувати: я забув згадати, що я на Kali 2.2 Rolling, що в значній мірі debian з деякими додатковими функціями.

Редагування 2: Я також перезапустив машину, оскільки не усвідомлював свою помилку до декількох днів тому. Це робить це трохи складніше.


9
Видалений bash? Просто використовуйте zsh :-) </troll>
Кевін

1
serverfault.com/questions/451528/… та кілька інших
skandigraun

фізичний чи ВМ?
Бен Авелінг

9
Наступного разу: не кладіть речі в системні каталоги . Якщо ви хочете користувальницькі сценарії та інше, будь ласка, зробіть собі $HOME/.binі додайте його до свого PATHабо використовуйте, /usr/local/binякщо потрібно, щоб він був загальносистемним. Або, що ще краще, складіть пакет.
спектри

Відповіді:


33

bashце оболонка, ймовірно, ваша системна оболонка, тому зараз трапляються дивні речі, в той час як частини оболонки все ще в пам'яті. Щойно ви вийдете з системи або перезавантажившись, ви зіткнетеся з більш глибокими проблемами.

Тож першим ділом має бути змінити свою оболонку на щось безпечне. Подивіться, які снаряди ви встановили

cat /etc/shells

Потім змініть, наприклад, свою оболонку на одну з інших оболонок, перелічених там

chsh -s /bin/dash

Оновіть, оскільки ви вже перезавантажили:

Вам пощастило, що зараз процес завантаження не покладається на bash, тому ваша система завантажується, ви просто не можете отримати командний рядок. Але ви можете запустити редактор, щоб редагувати /etc/passwdта змінювати оболонку в rootрядку з /bin/bashна /bin/dash. Вийдіть і увійдіть знову. Просто не вносьте жодних інших змін у цей файл, інакше ви можете повністю зіпсувати систему.

Потім спробуйте перевстановити bashз

apt-get --reinstall install bash

Якщо все вдалося, ви можете chshповернутися bash.

Нарешті: я думаю, калі - це вузькоспеціалізована дистрибуція, напевно, не підходить людям, які випадково перезаписують свою оболонку. Оскільки це речення було названо грубим і суворим, я повинен додати, що написав це з власного досвіду. Коли я був молодшим, я руйнував свою систему, тому що ніхто не сказав мені уникати возитися як корінь.


3
@ dr01: Враховуючи, як працює втеча баш, це може бути питанням неправильної цитати. Думай command > /bin/bash ...проти command > (/bin/bash ...).
MSalters

7
Це останнє речення було суворим ... :)
Джеймс Відновити Моніку Полк

6
@MSalters Неправильно розміщена цитата працює як root . Це дві помилки. Другий, звичайно, випробовує ваші складні трубопроводи як корінь, а не як непривілейований користувач.
дероберт

12
@JamesKPolk ні, це зовсім не суворо. Це проста правда. Kali - це професійний інструмент, призначений для використання експертами . Вони навіть стільки ж заявляють на своїй веб-сторінці. Якщо ви не фахівець, у вас справді немає бізнесу, де керують Калі.
terdon

3
Останнє речення не суворе. Це проста правда.
Андреа Лацаротто

65

Не вимикайте свою машину.

Ви все ще маєте запущену оболонку? Це баш? Якщо так, у вас все добре. (Але не робіть цього знову.)

Виконати:

sudo cp /proc/$$/exe /bin/bash

Вуаля, все добре.


Оскільки хтось у коментарях сумнівається, що це працює:

[vagrant@localhost ~]$ cat /etc/shells 
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh
[vagrant@localhost ~]$ grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[vagrant@localhost ~]$ echo $0
-bash
[vagrant@localhost ~]$ sudo rm /bin/bash
[vagrant@localhost ~]$ bash
-bash: /bin/bash: No such file or directory
[vagrant@localhost ~]$ sudo su -
su: /bin/bash: No such file or directory
[vagrant@localhost ~]$ sudo cp /proc/$$/exe /bin/bash
[vagrant@localhost ~]$ bash
[vagrant@localhost ~]$ exit
[vagrant@localhost ~]$ sudo su -
[root@localhost ~]# logout
[vagrant@localhost ~]$ 

18
У будь-якому випадку після цього рекомендується перевстановити bash з вашого розповсюдження, наприклад, для правильних дозволів (деякі мисливці за руткітами можуть бути здивовані змінами там), а також відновити жорстке посилання або симпосилання (наприклад, до /bin/shабо rbash)
Giacomo Catenazzi

4
@GiacomoCatenazzi, насправді цей метод зберігає дозволи - це типово під час rootзапуску cp. Хоча тверді посилання - хороший момент.
Wildcard

1
Машина була перезапущена. Я не можу відкрити нормальну оболонку, але я можу редагувати вміст через GUI. Як було сказано раніше, я отримую помилку із зазначенням "Не вдалося виконати дочірній процес / bin / bash. (Забагато рівнів символічних посилань)."
GarrukApex

5

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

  • sh
  • dash
  • ash
  • ksh (або kshсупроводжується цифрою; наприклад,  ksh93)
  • zsh
  • yash

або, в крайньому випадку,

  • tcsh або
  • csh

Якщо ви можете запустити оболонку, спробуйте відповідь Філіпоса .

Іншим підходом є завантаження в однокористувацький режим, дотримуючись цих інструкцій, але вкажіть init=/bin/sh(або одну з інших оболонок) замість init=/bin/bash.

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