Создание zsh оболочка по умолчанию без корневого доступа

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

Лучший способ получить надежный загрузчик состоит в том, чтобы использовать рабочий загрузчик. Имейте простой загрузчик первой стадии в фиксированной конфигурации, что chainloads загрузчик Linux (подводная лодка или независимо от того, что Ваша встроенная система имеет), с механизмом нейтрализации. Сама подводная лодка может реализовать механизм нейтрализации — см. “Нейтрализацию Загрузочного образа реализации на подводной лодке” в списке рассылки Пользователей подводной лодки и Избыточных Изображениях на xpedite5370 для примера.

54
01.01.2017, 09:44
7 ответов

Создайте .bash_profile в своем домашнем каталоге и добавьте следующие строки:

export SHELL=/bin/zsh
exec /bin/zsh -l

Обновление: .profile может работать как общее решение, если оболочка по умолчанию не bash. Я не уверен, что . profile может быть вызван Zsh также, что он может стать избыточным, но мы можем сделать это безопасно с помощью простой проверки:

export SHELL=/bin/zsh
[ -z "$ZSH_VERSION" ] && exec /bin/zsh -l

Мы также можем использовать который для получения динамического пути zsh, который полагается на значение $PATH:

export SHELL=`which zsh`
[ -z "$ZSH_VERSION" ] && exec "$SHELL" -l
71
27.01.2020, 19:33

Я не думаю, что предоставленный ответ на самом деле делает zsh оболочкой по умолчанию. Он просто изменяет оболочку на zsh, как только пользователь входит в свою оболочку по умолчанию . Пользователь все равно войдет в свою DEFAULT SHELL, но при этом оболочка изменится на zsh

Чтобы изменить оболочку по умолчанию, используйте:

usermod -s /path/to/shell username 

Для этого вы должны быть корневым пользователем.

Иначе вам пригодится описанное выше обходное решение .

Добавлено из комментария

chsh -s /path/to/zsh  # considered as standard as compared to usermod

и может быть вызвано пользователем для себя.

-3
27.01.2020, 19:33

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

Скорее всего, Вы не сможете использовать chsh как не корневой, потому что используемая Вами система настроена таким образом, что chsh не будет работать, например, потому что система использует NIS или LDAP, а не только /etc/passwd файл. Или, возможно, ваш системный администратор просто хочет сохранить некоторый контроль.

Процедура изменения оболочки зависит от политик вашей организации. Может быть локальная команда, которая делает то, что обычно делает chsh. Или вам может понадобиться отправить запрос в службу поддержки с запросом на изменение оболочки.

Большинство остальных ответов хороши, но если ваши администраторы достаточно отзывчивы, вам, возможно, не стоит беспокоиться о взломе ваших сценариев запуска. Вероятно, я бы просто вызвал zsh -l вручную после входа в систему, пока администратор не обновит мою учетную запись.

Еще кое-что, что нужно иметь в виду: Иногда разные оболочки могут использовать одни и те же загрузочные файлы. Например, sh и bash могут выполнять $HOME/.profile, а csh и tcsh могут выполнять $HOME/. login и $HOME/.cshrc (хотя такие файлы запуска, как .bashrc, .bash_profile и .tcshrc могут их переопределить). Если вашей оболочкой по умолчанию является /bin/csh и вы хотите использовать /bin/tcsh, обновление вашего .login для вызова /bin/tcsh -l может создать бесконечный цикл. zsh случайно не выполняет bash-специфические файлы запуска, так что для вас это не проблема.

Большинство оболочек устанавливают переменные, которые определяют, какую оболочку вы выполняете ($BASH_VERSION, $tcsh, $ZSH_VERSION). Если вы собираетесь написать код запуска для вызова предпочтительной оболочки, не плохая идея заключить ее в if, так что она будет выполняться только если вы еще не запустили эту оболочку. Использование кода из ответа konsolebox:

if [ "${ZSH_VERSION:-unset}" = "unset" ] ; then
    export SHELL=/bin/zsh
    exec /bin/zsh -l
fi

(Добавлена сложность проверки "${ZSH_VERSION:-unset}" вместо простого "$ZSH_VERSION" допускает возможность того, что вы сделали set -o unset, опция, которая приводит к тому, что ссылка на неопределенную переменную будет ошибкой)

.
1
27.01.2020, 19:33

Я считаю, что команда chsh предназначена именно для этой цели. Хотя, я не уверен, что каждый дистрибутив Linux/Unix поддерживает это. Проверьте man-страницу chsh.

1
27.01.2020, 19:33

Обычно вы можете использовать chsh в качестве не корневого пользователя. Но иногда он отключается, обычно на сайтах, которые используют какую-то сетевую базу данных пользователей, например, NIS и LDAP. Вместо этого может быть ypchsh (NIS) или chsh.ldap (LDAP). Также

chsh обычно допускают только некоторые утвержденные оболочки, обычно перечисленные в /etc/shells.

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

  • Если оболочка для входа в систему - sh, dash или ksh: файл, который вам нужно отредактировать, будет ~/.profile. Остерегайтесь, что этот файл читается в начале интерактивного сеанса, а также некоторыми неинтерактивными скриптами запуска сеанса (например, для сеансов X11), поэтому вам нужно позаботиться: вызывайте exec (который заменяет текущий процесс) только в том случае, если текущая оболочка командной строки является интерактивной. За исключением оболочки Борна (/bin/sh из Solaris 10 и ранее), вы можете сказать, что оболочка интерактивна по наличию i в списке опций ($-).

    preferred_shell=
    если [ -x /bin/zsh ]; тогда
     preferred_shell=/bin/zsh
    
    …
    если [ -n "$preferred_shell" ]; тогда
     корпус $-в
     *i*) SHELL=$preferred_shell; экспортировать SHELL; выполнить "$preferred_shell";;
     esac
    
    

    Если вы хотите, чтобы zsh прочитал ваш .zprofile, передайте опцию -l.

  • Если ваша оболочка для входа в систему имеет значение bash, вы можете продолжить работу, как описано выше. Или же вы можете поместить эти команды в ~/.bash_profile. Большинство сеансовых скриптов запуска только читают ~/.profile, а не ~/.bash_profile, но я видел некоторые, которые запускаются под bash и читал .bash_profile, так что даже там Вы должны быть осторожны и не вызывать exec в неинтерактивном shell'е.

  • Если ваша оболочка для входа в систему - это csh или tcsh, см. пример в Изменение оболочки по умолчанию без chsh или привилегий администратора

12
27.01.2020, 19:33

Я могу придумать несколько сценариев.

  1. zshнет в /etc/shells,и OP хочет использовать его без ввода zshв командной строке. Возможные решения.

    a )использовать трюки профиля, чтобы выполнить его при входе в систему. Это так же эффективно, как изменение оболочки.

    b )попросить администратора добавить zshк /etc/shells, чтобы вы могли chshк нему

    c )умоляю админа сменить оболочку. это неразумно, потому что вы потеряете способность ftp. вы можете использовать ftp, только если у вас есть снаряд в/etc/shells

  2. пользователь хочет выйти из ограниченной оболочки, скорее всего, rbashили rsh.

    Если .profileдоступен для редактирования, PATHможно расширить, отредактировав его. Как только /binокажется в пути, вы можете запустить bashизнутри rsh/rbash, получив доступ к команде chsh, позволяющей менять оболочки. Многие команды имеют escape-последовательности оболочки, которые можно использовать для выхода из ограниченной оболочки и восстановления доступа к chsh.

  3. chshдействительно не работает по какой-то другой причине. решение а из возможности 1 является ответом и здесь.

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

1
27.01.2020, 19:33

Я думаю, что это может быть еще один метод, с помощью которого мы можем настроить пользовательскую команду для запуска zsh вместо команды bash по умолчаниюenter image description here

0
18.09.2021, 11:18

Теги

Похожие вопросы