На самом деле большинство оболочек входа в систему на вновь установленной системе не являются интерактивными:
$ awk -F: '{print $7}' < /etc/passwd | sort | uniq -c
5 /bin/bash
23 /bin/false
1 /bin/sh
1 /bin/sync
17 /usr/sbin/nologin
Понятно /bin/bash
и /bin/sh
традиционные оболочки, и они интерактивные. Но все остальные элементы в этом списке не являются интерактивными. Если вы читаете список и не знаете, что делает один из них, вы можете просто просмотреть его справочную страницу (например, man nologin
или man sync
).
Что на самом деле делает команда
Глядя на историю публикаций Капитана, я вижу, что они довольно неопытны с Unix. Так что, возможно, вопрос в комментарии о невыполнении, связанный с командной строкой вверху ответа, а не просто с выводом. Поэтому я объясню и командную строку, даже если это действительно не по теме для этого вопроса.
Команда является конвейером Unix . Конвейер представляет собой цепочку команд - вы читаете ее слева направо - в которой выход первой команды становится входом второй, выход второй становится входом третьей и т. Д. До тех пор, пока конец трубопровода. Выход последнего процесса отображается на терминале (если он не был перенаправлен). Видеть запись в Википедии о конвейерах оболочки для получения дополнительной информации.
Если вы не понимаете, что делает конвейер, вы можете просто запустить его по сегментам, чтобы увидеть, что происходит. Вы также можете прочитать страницу руководства для команд, которые используются (здесь awk
, sort
иuniq
). На самом деле, вы должны сделать это сейчас. Я буду ждать.
Давайте постепенно выполним этапы конвейера (вы можете безопасно сделать это в своей собственной системе Unix):
~$ awk -F: '{print $7}' < /etc/passwd | sed -e 's/^/ /'
/bin/bash
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/bin/sync
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/bin/false
/bin/false
/bin/false
/bin/false
/bin/false
/bin/false
/bin/false
/bin/false
/bin/false
/usr/sbin/nologin
[ ... and so on, I've left the rest out ... ]
Вывод выше - это просто содержимое седьмого поля из /etc/passwd
файла. Это база данных (плоский текстовый файл), которая сообщает системе, что такое оболочка для входа в систему каждого пользователя. Если вы хотите узнать больше о, /etc/passwd
просто прочитайте его (он доступен для чтения) и посмотрите на страницу руководства (man 5 passwd)
.
Таким образом, прочитав весь список, вы можете получить представление о популярных элементах, но это не очень хороший формат для ответа на этот вопрос, потому что вопрос был о том, насколько распространены неинтерактивные оболочки. Давайте посчитаем их. Самый простой способ сделать это - сначала отсортировать элементы:
~$ awk -F: '{print $7}' < /etc/passwd | sort
/bin/bash
/bin/bash
/bin/bash
/bin/bash
/bin/bash
/bin/false
/bin/false
/bin/false
/bin/false
/bin/false
[ ... and so on, I've left the rest out ... ]
Мы можем использовать программу, uniq
чтобы показать нам только уникальные предметы:
~ $ awk -F: '{print $ 7}' </ etc / passwd | сортировать | uniq | sed -e 's / ^ / /' / bin / bash / bin / false / bin / sh / bin / sync / usr / sbin / nologin
Но подождите, это бесполезно, сколько там было каждого? Давайте спросим uniq
(прочитайте справочную страницу!):
~$ awk -F: '{print $7}' < /etc/passwd | sort | uniq -c
5 /bin/bash
23 /bin/false
1 /bin/sh
1 /bin/sync
17 /usr/sbin/nologin
Это результат, который мы видели в верхней части ответа, конечно. Давайте разберем это снова, чтобы увидеть записи по порядку:
~$ awk -F: '{print $7}' < /etc/passwd | sort | uniq -c | sort
17 /usr/sbin/nologin
1 /bin/sh
1 /bin/sync
23 /bin/false
5 /bin/bash
Подождите, это не может быть правильным, 17 идет раньше 1 и 5 после 23. Проблема в том, что элементы сортируются лексикографически . Давайте попросим sort
отсортировать их численно и в обратном порядке:
~$ awk -F: '{print $7}' < /etc/passwd | sort | uniq -c | sort -n -r
23 /bin/false
17 /usr/sbin/nologin
5 /bin/bash
1 /bin/sync
1 /bin/sh
Я думаю, это объясняет все в оригинальном ответе. Если вам все еще неясно, что делают эти команды, вы можете прочитать страницы руководства. Если вам все еще неясно, что происходит, лучше начать с чтения книги (онлайн или на бумаге), в которой объясняются Unix и Linux.
telnet towel.blinkenlights.nl
для неинтерактивной оболочки входа в систему ;-)