Я знаю, в чем разница между интерактивными / неинтерактивными и не входящими в систему оболочками, но на практике кажется, что не будет неинтерактивной оболочки для входа в систему, если у вас нет чего-то похожего /bin/bash --login some-script.sh
на сценарий (и даже это кажется немного странно). Это правильно или они более распространены?
14
telnet towel.blinkenlights.nl
для неинтерактивной оболочки входа в систему ;-)Ответы:
Я предполагаю, что вы говорите о концепции Bash «вход в систему» и «не вход в систему» и «интерактивные» и «неинтерактивные оболочки Bash», как описано в разделе « Вызов » на странице руководства. (Это отличается от интерпретации в ответе Джеймса Янгмана любой произвольной команды, используемой в качестве «оболочки» (или интерпретатора пользовательских команд) в
passwd(5)
файле, и от того, принимает ли эта программа пользовательский ввод, а некоторые, например/usr/sbin/nologin
, явно не принимают . )Вы правы, что
/bin/bash --login some-script.sh
создадите неинтерактивный логин Bash, и это, возможно, патологический пример. Существует один случай, возможно , редко , но на самом деле не странно, что производит неинтерактивную оболочку входа в систему :ssh somehost < some-file
. Здесьsshd
запустится Bash сargv[0]
установленным значением,-bash
потому что ему не была дана команда для запуска, в результате чего Bash считает себя оболочкой входа в систему, но, поскольку stdin не подключен к терминалу, Bash не перейдет в интерактивный режим ($-
не будет содержатьi
) ,(Лично этот случай кажется гораздо более разумным, чем обратное,
ssh somehost somecommand
которое не считается «оболочкой входа в систему», даже если это новый вход в систему,somehost
как и выше).Недавно я сделал то, что должен был сделать давно, и составил таблицу режимов Bash и запускаемых файлов инициализации . Если вы считаете, что это сбивает с толку, позаботьтесь об этом. Это мистифицирует меня, какова была их первоначальная цель с правилами о том, когда
.bashrc
выполняется.источник
На самом деле большинство оболочек входа в систему на вновь установленной системе не являются интерактивными:
Понятно
/bin/bash
и/bin/sh
традиционные оболочки, и они интерактивные. Но все остальные элементы в этом списке не являются интерактивными. Если вы читаете список и не знаете, что делает один из них, вы можете просто просмотреть его справочную страницу (например,man nologin
илиman sync
).Что на самом деле делает команда
Глядя на историю публикаций Капитана, я вижу, что они довольно неопытны с Unix. Так что, возможно, вопрос в комментарии о невыполнении, связанный с командной строкой вверху ответа, а не просто с выводом. Поэтому я объясню и командную строку, даже если это действительно не по теме для этого вопроса.
Команда является конвейером Unix . Конвейер представляет собой цепочку команд - вы читаете ее слева направо - в которой выход первой команды становится входом второй, выход второй становится входом третьей и т. Д. До тех пор, пока конец трубопровода. Выход последнего процесса отображается на терминале (если он не был перенаправлен). Видеть запись в Википедии о конвейерах оболочки для получения дополнительной информации.
Если вы не понимаете, что делает конвейер, вы можете просто запустить его по сегментам, чтобы увидеть, что происходит. Вы также можете прочитать страницу руководства для команд, которые используются (здесь
awk
,sort
иuniq
). На самом деле, вы должны сделать это сейчас. Я буду ждать.Давайте постепенно выполним этапы конвейера (вы можете безопасно сделать это в своей собственной системе Unix):
Вывод выше - это просто содержимое седьмого поля из
/etc/passwd
файла. Это база данных (плоский текстовый файл), которая сообщает системе, что такое оболочка для входа в систему каждого пользователя. Если вы хотите узнать больше о,/etc/passwd
просто прочитайте его (он доступен для чтения) и посмотрите на страницу руководства(man 5 passwd)
.Таким образом, прочитав весь список, вы можете получить представление о популярных элементах, но это не очень хороший формат для ответа на этот вопрос, потому что вопрос был о том, насколько распространены неинтерактивные оболочки. Давайте посчитаем их. Самый простой способ сделать это - сначала отсортировать элементы:
Мы можем использовать программу,
uniq
чтобы показать нам только уникальные предметы:~ $ awk -F: '{print $ 7}' </ etc / passwd | сортировать | uniq | sed -e 's / ^ / /' / bin / bash / bin / false / bin / sh / bin / sync / usr / sbin / nologin
Но подождите, это бесполезно, сколько там было каждого? Давайте спросим
uniq
(прочитайте справочную страницу!):Это результат, который мы видели в верхней части ответа, конечно. Давайте разберем это снова, чтобы увидеть записи по порядку:
Подождите, это не может быть правильным, 17 идет раньше 1 и 5 после 23. Проблема в том, что элементы сортируются лексикографически . Давайте попросим
sort
отсортировать их численно и в обратном порядке:Я думаю, это объясняет все в оригинальном ответе. Если вам все еще неясно, что делают эти команды, вы можете прочитать страницы руководства. Если вам все еще неясно, что происходит, лучше начать с чтения книги (онлайн или на бумаге), в которой объясняются Unix и Linux.
источник
/bin/sync
оболочка? так какая-нибудь утилита это оболочка?bash --login
в вопросе, он спрашивает конкретно оbash
процессах, которые не имеют установленнойi
опции. (Они возникают из-за таких команд, какssh somehost < script.sh
; это будет оболочка «неинтерактивная» для входа в систему, в смысле, указанном в разделе « ПРИВЕДЕНИЕ» справочной страницы Bash.)