изменение оболочки с Zsh на Bash

17

Мой веб-сервер был взломан кем-то, кто использовал оболочку zsh. Я чувствую себя более комфортно, используя оболочку bash, так как это настройки по умолчанию, поставляемые с Ubuntu и OS X (две основные операционные системы, которые я использую). Но этот вопрос ориентирован на сервер Ubuntu. У меня есть 4 веб-сайта, работающих на этом веб-сервере, я использую byobu, я использую tmux, я использую ruby ​​/ ruby ​​на rails, node.js, apache, несколько демонов. Если я переключу текущую корневую оболочку с zsh на bash, могут ли быть какие-либо негативные побочные эффекты, которые могут возникнуть в результате этого переключения? Например, будут ли процессы уничтожены, потому что их родительский процесс (оболочка) был переключен?

JohnMerlino
источник
Вы спрашиваете о последствиях изменений (которых нет, я сейчас использую zsh и могу переключиться на bash в любое время) или вы спрашиваете, как эффективно изменить оболочку?
Брайам
@Braiam Я нервничаю по поводу последствий изменений. Если нет никаких последствий, тогда я изменюсь. Я просто думал, что оболочка была родительским процессом для некоторых из этих демонов, таких как apache, и если бы мне пришлось отключиться от него, то это убило бы процесс apache. Но я думаю, что я не прав.
JohnMerlino

Ответы:

10

Изменяя вашу оболочку, через sudo chsh --shell=/bin/bash $USERизменит поле оболочки в /etc/passwd. Это значение используется только во время входа в систему, когда система не знает, какую оболочку использовать для вас.

Идущие процессы, запущенные ли zsh, bash apacheили evil_overlord's_programне будут затронуты

waltinator
источник
Разве оболочка не является родительским процессом других процессов, запущенных в ней, или просто управляющий терминал (а не оболочка) будет считаться родительским процессом?
ДжонМерлино
loginПрограмма выполняется в процессе, как и все. Когда он пропускает вас, он создает другой процесс с вашим UID и т. Д. И запускает / bin / bash (из / etc / passwd). Оболочка bash читает из STDIN (настроено login) и будет форкать / выполнять не встроенные команды, ждать их завершения и выполнять цикл для других команд. Идея «управления терминалом» бесполезна в Unix / Linux.
вальтинатор
25

Ответ от переполнения стека ( переключение с zsh на bash ):

Вы можете просто использовать exec для замены текущей оболочки новой оболочкой:

Переключиться на bash:

exec bash

Переключиться на Zsh:

exec zsh

Это не повлияет на новые окна терминала или что-то еще, но это удобно.

Обмен
источник
не работал. еще: echo $ SHELL / usr / bin / zsh
ses
8

Откройте свой терминал и используйте следующую команду:

chsh -s $(which bash)
rɑːdʒɑ
источник
Я предполагаю, что это эквивалент chsh -s / bin / bash
JohnMerlino
2
which bashдал бы абсолютный путь bash, так было бы то же самое, если бы /bin/bash, где bashбыл расположен.
ryanjdillon
0

В Mac OS Каталина

  1. Изменить на Zsh:

    chsh -s /bin/zsh
  2. Изменить на bash:

    chsh -s /bin/bash
Моно
источник