Можно ли удалить sh?

Это может звучать глупо, но я хочу удалить sh (для исследовательских целей) и заменить его собственной оболочкой. Это действительно возможно?

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

3 ответа

Решение

⚠️ ВНИМАНИЕ! ПОЖАЛУЙСТА, ПРОЧТИТЕ, ЧТОБЫ ВЫПОЛНЯТЬ ЛЮБЫЕ КОМАНДЫ! ⚠️

Этот ответ предназначен только для исследований и дальнейшего изучения Ubuntu Linux. Выполнение любых команд в этом ответе может полностью разрушить вашу систему. Убедитесь, что вы используете виртуальную машину или резервную копию. Я не несу ответственности, если вы сломаете свою систему.

Команда sh обеспечивается dash посредством символической ссылки:

$ ll /bin/sh
lrwxrwxrwx 1 root root 4 Jun  1 08:33 /bin/sh -> dash*

$ which sh
/bin/sh

$ dpkg -S /bin/dash
dash: /bin/dash

$ dpkg -S /bin/sh
diversion by dash from: /bin/sh
diversion by dash to: /bin/sh.distrib
dash: /bin/sh

Чтобы удалить его, выполните следующую команду:

sudo apt remove dash

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

You are about to do something potentially harmful.
To continue type in the phrase 'Yes, do as I say!'

Если вы действительно хотите уничтожить свою систему, введите ее и нажмите Return.

Ubuntu будет затем удалить bash, lightdm и ubuntu-desktop метапакет (а также все пакеты, которые зависят от этих трех), потому что все они зависят от dash, Если ваша текущая оболочка не работает идеально, ваша система будет недоступна после того, как вы убьете последний экземпляр bash или же dash,

Если вы действительно выполните эту команду, единственный способ восстановить нужные файлы - это загрузить Live CD и переустановить пакеты через chroot сессия восстановления.

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


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

sudo -s
cd /bin
rm sh
ln -s /path/to/your/shell sh
chmod 777 sh

Восстановить обратно dash повторив эти шаги, но указав dash вместо вашей собственной оболочки. Или просто беги sudo apt install --reinstall dash, Возможно, вам придется указать пользовательский init сделать это.

Я бы установил вашу собственную оболочку рядом с SH. Удаление SH - ОЧЕНЬ плохая идея, так как на нее полагаются многочисленные программы и скрипты.

Перенесемся на несколько лет вперед, и да, shможно удалить и заставить работать, но только в сценариях с одним приложением, таких как выделенные док-контейнеры, а не в универсальных системах с несколькими приложениями.

Например, Google использовал его в своих дистрибутивных контейнерах . Некоторые приложения могут быть скопированы туда (будучи установленными в более полной системе, например, Debian на более раннем этапе, с использованием двухэтапной сборки докера) вместе со всеми их общими зависимостями, идентифицированными с помощью ldd(пока они не зависят от *shили же xterm).

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