Различия между / usr / bin / login и / usr / bin / bash

3055
kiamlaluno

В Terminal.app « Оболочки» открываются с настройками с помощью стандартной оболочки входа в систему (/ usr / bin / login) и « Command» (полный путь) (который по умолчанию содержит / usr / bin / bash в качестве пути).

По умолчанию я выбрал опцию « Оболочка входа по умолчанию» (/ usr / bin / login) .

В чем разница между / usr / bin / login и / usr / bin / bash ? Какой из них следует выбрать в качестве оболочки по умолчанию?

1

5 ответов на вопрос

4
jerseyboy

Практическое отличие состоит в том, что получающаяся среда оболочки считывает свои начальные параметры конфигурации.

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

bash - это оболочка, которая знает, была ли она вызвана как оболочка входа или нет. Оболочка для входа в bash читает .bash_profile или .bash_login или .profile - только один, в таком порядке предпочтения. Оболочка без регистрации не будет читать .profile, но будет читать из .bashrc. Это нормальное поведение bash на современных * nix платформах, но оно может привести к трудностям при обнаружении странного поведения, если вы не понимаете, что происходит.

Например, вы можете открыть оболочку «login» через Terminal и получить один набор переменных среды (скажем, из вашего .profile), затем набрать «bash» и получить совершенно другой набор переменных (из .bashrc, плюс любые переменные, которые были экспортированы, за исключением тех, которые не были). В частности, PATH может быть искажен повторяющимися или отсутствующими записями.

3
garyjohn

/ usr / bin / login не является оболочкой; это программа, используемая для входа в систему. Он управляет процессом входа в систему. Как пользователь правильно настроенной системы, вам никогда не придется беспокоиться о / usr / bin / login. Если вам все равно интересно, прочитайте

man login 

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

man bash 

Обе эти команды man могут быть выполнены в командной строке.

Terminal.app по умолчанию выбрал `usr / bin / login` в качестве оболочки по умолчанию; вот почему я спрашиваю kiamlaluno 14 лет назад 0
Скажем так, я не знаю ответа. Я сам не пользуюсь Mac, но я просто экспериментировал с настройками терминала на MacBook Pro моей жены. Единственное различие, которое я видел между этими двумя настройками, используя «ps -fu username», было то, что выбор bash приводил к добавлению «-q» к аргументам входа в систему. Я думал, что оболочка второго терминала будет потомком первого входа в систему, если / usr / bin / login не была оболочкой по умолчанию, но я не мог понять, как открыть второй терминал. garyjohn 14 лет назад 0
1
DVK

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

В деталях:

login - это программа, используемая для входа в систему пользователя, в конце которой запускается оболочка (или интерпретатор командной строки).

вход в систему знает только то, как сделать одно - войти в систему пользователя (проверить подлинность, используя имя пользователя / пароль, установить некоторые переменные среды, такие как TERM и PATH, и выполнить пару задач администратора при входе в систему - подробности см. по ссылке).

Оболочки Unix (из которых Баш является примером) является интерпретатором командной строки в сочетании с интерпретатором сценариями, и его функция заключается в принимать входные данные (от пользователя или поставляется программно) и выполнить требуемые команды.

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

Посмотрите, что я добавил к первоначальному вопросу. Terminal.app позволяет установить логин в качестве логина по умолчанию, который является значением по умолчанию. kiamlaluno 14 лет назад 0
0
akira
% man login  login is used when signing onto a system. It can also be used to switch from one user to another at any time (most modern shells have support for this feature built into them, however).   % man bash  Bash is an sh-compatible command language interpreter that executes commands read from the standard input or from a file. 

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

-1
aladine

/ USR / бен / Баш

Это встроенное ядро ​​Linux в Mac OS. Тогда я думаю, что это почти то же самое, когда вы получаете команду в Linux. Оболочка по умолчанию должна быть bash.

Я не понимаю, что должно означать ваше первое предложение. Ignacio Vazquez-Abrams 14 лет назад 5

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