Как восстановить из удаленного /bin/bash?

На моем Debian Maschine я случайно удалил /bin/bash. Есть ли способ вернуть его без переустановки машины?

Если это поможет. Я все еще вошел в систему. Угадай, как только я выйду, я не могу войти, так как это моя оболочка для входа.

3 ответа

Решение
ln -s /bin/sh /bin/bash
apt-get install --reinstall bash

если вы все еще вошли в систему, введите следующую команду:

sudo apt-get install --reinstall bash

Новые системы Linux обычно не загружаются без функционирующего bash. Если вы потеряли bash и попытаетесь перезагрузиться, вы можете (временно) заблокировать вашу систему.

если у вас все еще открытая сессия, пропустите следующий абзац о загрузке с live cd и перейдите прямо к следующему абзацу. в противном случае попробуйте:

Если вы потеряли bash и ни одна из ваших учетных записей пользователей или root не может войти в систему, и ваша система даже не загрузится, тогда вы можете попробовать загрузиться в систему с live cd, смонтировать жесткий диск, на котором находится ваша система, перейдя в / bin на этом система, скажем 'cd /mount/sda1/bin', переместив bash в bash.bak, 'mv bash bash.bak', затем сделав ссылку из какой-либо оболочки, которая работает для bash, например, из 'ln ksh bash', выходит и пытается перезагрузиться, это может или не может работать, это делает для меня на Slackware и Debian. как только вы загрузите систему, измените оболочку входа в систему для пользователя и пользователя root с помощью команды chsh, а затем удалите ссылку с ksh на bash.

после этого некоторые из этих предложений могут работать.

Сам sh является древним, и в некоторых системах linux / bin / sh на самом деле существует для поддержки устаревших версий и является просто ссылкой на / bin / bash, поэтому изменение оболочки входа в систему на / bin / sh может не сработать.

Если у вас все еще есть корневой терминал, вы в хорошей форме. Используйте команду chsh, чтобы изменить оболочку входа в систему на ту, которая у вас еще есть. Я использовал / bin / ksh для этого. обратите внимание, что ваша система, вероятно, не загрузится таким образом, но, по крайней мере, теперь вы можете делать изменения для спасения

Если у вас есть только пользовательская оболочка, используйте chsh, чтобы изменить оболочку входа на что-то, что все еще работает в вашей системе (ksh), затем попробуйте запустить 'sudo chsh'.

Если ваш sudo работает, вам будет предоставлена ​​возможность изменить оболочку входа в систему для пользователя root. если это не так, перейдите к началу этого поста и следуйте инструкциям, чтобы создать мягкую ссылку из рабочей оболочки типа ksh на bash и взять ее оттуда.

Как только это будет сделано, вы можете войти в систему как пользователь root и попробовать использовать обычные менеджеры пакетов, чтобы удалить поврежденную установку bash и установить или переустановить рабочую версию или скомпилировать новую установку из исходного кода, или, в случае slackware, поместить пакет bash в / и извлечь его... вуаля, мгновенный удар. Вероятно, есть способы извлечь bash из каталогов верхнего уровня в рабочие системы на других дистрибутивах, но я не пробовал.

обратите внимание, что некоторые процедуры установки для получения рабочего bash в системе приводят к тому, что рабочий исполняемый файл bash помещается в / bin, но он не называется bash, и в этом случае вам придется связать это с 'bash'. в конечном счете, с правильной комбинацией циклов удаления установки вы получите это сделать, но мне потребовалось несколько раундов на большинстве попыток, чтобы заставить это сделать это самостоятельно. чаще всего я получал /bin/bash4.new как исполняемый файл, который мне пришлось связать с / bin / bash, прежде чем я смог исправить это с помощью обычных инструментов менеджера пакетов.

Если вы запускаете инструменты управления пакетами из оболочки ksh в системе без bash, вы можете получить сообщение об ошибке "команда не найдена" даже в качестве пользователя root, если вы не вызываете их специально с помощью чего-то вроде "ksh apt-get" или "ksh installpkg", и даже затем в зависимости от пакета, который вы пытаетесь установить.... в данном случае для меня это был bash, сценарий установки завершается неудачно для некоторых версий, потому что для запуска сценария установки требуется bash.... зависимость от себя. это можно исправить, войдя и переписав сценарии установки, но на самом деле, кто хочет беспокоиться, легче делать другие вещи.

вам может потребоваться выполнить несколько раундов установки и удаления установки, чтобы получить его чисто.

поочередно... в Slackware я смог поместить пакет Slack в / затем извлечь его и получить рабочий исполняемый файл Bash в / bin

если они не работают, вы можете попробовать удалить все мертвые исполняемые файлы bash из / bin, получить исходный код bash и скомпилировать / установить его из исходного кода.

альтернативно, вы, вероятно, не думали об этом, но во многих дистрибутивах есть утилита реконфигурации, которую вы можете вызвать из cli, что позволит вам изменить уже установленную систему, или вы можете сделать это, загрузив установочный cd / usb / media, поставляемый с вашим дистрибутивом с которого вы установили. это также, вероятно, способ войти и изменить вашу систему в качестве опции. я переустановил bash оттуда или вызвав любую программу переконфигурирования, которую он предоставляет из кли. это работает в Debian и Slackware.

наконец, вы можете загрузить live cd, соответствующий вашей системе, при условии, что у вас все еще есть то же ядро, и подключиться к вашей системе и переустановить его, используя обычные инструменты управления пакетами.... это я не проверял.

так или иначе, вы, вероятно, в конечном итоге захотите, чтобы новый bash был пакетом, который распознается любым менеджером пакетов, установленным в вашей системе, в противном случае при компиляции новых программ может появиться жалоба на то, что они не могут найти bash (возможно, нет, но это потенциальная проблема для плохо написанного программы)

многословный ответ, но страшно иметь не загружаемую систему, и есть несколько способов исправить это.

Другие вопросы по тегам