Можно ли удалить 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
).