A maioria dos shells de login por contagem em um sistema recém-instalado não é interativa, na verdade:
$ 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
Claramente, /bin/bash
e /bin/sh
são shells tradicionais e são interativos. Mas todos os outros itens dessa lista são não interativos. Se você estiver lendo a lista e não souber o que uma delas faz, basta procurar a página de manual (por exemplo, man nologin
ou man sync
).
O que o comando realmente faz
Olhando para o histórico de postagens do Capitão Man, vejo que eles são bastante inexperientes com o Unix. Então, talvez a pergunta no comentário sobre não seguir relacionado à linha de comando no topo da resposta, não simplesmente a saída. Então eu vou explicar a linha de comando também, mesmo que seja fora do tópico para essa pergunta.
O comando é um pipeline Unix . Um pipeline é uma cadeia de comandos - você o lê da esquerda para a direita - no qual a saída do primeiro comando se torna a entrada do segundo, a saída do segundo se torna a entrada do terceiro, e assim por diante, até que o fim do pipeline. A saída do último processo é mostrada no terminal (a menos que tenha sido redirecionada). Veja a entrada da Wikipedia nos oleodutos da shell para mais informações.
Se você não entender o que um pipeline está fazendo, basta executá-lo em segmentos para ver o que está acontecendo. Você também pode ler a página de manual dos comandos que estão sendo usados (aqui, awk
, sort
e uniq
). Na verdade, você deveria fazer isso agora. Vou esperar.
Vamos executar os estágios do pipeline incrementalmente (você pode fazer isso com segurança no seu próprio sistema 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 ... ]
A saída acima é simplesmente o conteúdo do sétimo campo do arquivo /etc/passwd
. Esse é o banco de dados (flat-text-file) que informa ao sistema o que é o shell de login de todo mundo. Se você quiser saber mais sobre /etc/passwd
apenas leia (é legível por todos) e veja a página de manual para isso (man 5 passwd)
.
Então, lendo toda a lista, você pode ter uma idéia do que são os itens populares, mas não é um bom formato para uma resposta a essa pergunta, porque a questão era realmente sobre como os shells não interativos são comuns. Vamos contá-los. A maneira mais simples de fazer isso é classificar os itens primeiro:
~$ 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 ... ]
Podemos usar o programa uniq
para nos mostrar somente os itens exclusivos:
~ $ awk -F: '{print $ 7}' < / etc / passwd | classificar | uniq | sed-e '/ ^ / /'
/ bin / bash
/ bin / false
/ bin / sh
/ bin / sync
/ usr / sbin / nologin
Mas espere, não adianta, quantos de cada um estavam lá? Vamos perguntar uniq
(leia a man page!):
~$ 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
Essa é a saída que vimos no topo da resposta, é claro. Vamos classificá-lo novamente para ver as entradas na ordem:
~$ 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
Espere, isso não pode estar certo, 17 vem antes de 1 e 5 depois de 23. O problema é que os itens estão sendo classificados lexicograficamente . Vamos pedir ao sort
para ordená-los numericamente e na ordem inversa:
~$ 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
Acho que isso explica tudo na resposta original. Se ainda não tiver certeza dos detalhes do que esses comandos fazem, você pode ler as páginas de manual. Se você ainda não está claro sobre os princípios do que está acontecendo, pode ser melhor começar lendo um livro (on-line ou em papel) explicando Unix e Linux.