Existem tipos de shells Unix? [fechadas]

4

Descobri que existem shells como nologin , false e true . O que mais há?

Eu não sei qual é a palavra-chave correta a ser usada para listar os shells. Sempre que eu procuro usando as palavras-chave linux shell types , obtenho resultados no contexto de ilustração das diferenças entre bash , csh , zsh e os outros.

Qual é a palavra-chave correta a ser usada para encontrar mais sobre esse assunto?

    
por joker 09.09.2018 / 12:19

5 respostas

9

nologin, false e true, não são shells, são apenas formas de impedir o login. Isso deixa os que terminam em sh . Portanto, pesquisar em /bin , /usr/bin , etc ajudará a encontrar a maioria dos que estão instalados.

Depois, há o problema de "o que é um shell?" é python, purl, tcl, etc., um shell? Bem, provavelmente não, mas onde está a linha de divisão? Como true , false e nologin não interpretam (não aceitam entrada do usuário, não são idiomas, etc), então eles são definitivamente no lado não-shell da a linha.

No entanto, a dose de shell de login não precisa ser um shell, nem precisa ser interativo.

Você pode pesquisar na interweb, usando seu mecanismo de pesquisa favorito, para shells Unix.

    
por 09.09.2018 / 12:49
6

I found there are shells like nologin, false, and true. What else are there?

Estes não são shells, como @ ctrl-alt-delor já apontado .

I don't know what to type to list the shells.

Você não pode obter uma lista completa de todos os shells existentes. Isso seria como pedir uma lista de todos os softwares que existem.

Whenever I search with linux shell types (and the likes), I get results in the context of illustrating differences between bash, csh, zsh, and the others you know.

O que é realmente útil, porque estes são shells populares que você provavelmente encontrará.

What is the keyword to use to learn more about the subject?

"shell" também é conhecido como " REPL

    
por 09.09.2018 / 13:05
4

Para tornar o ponto nas outras respostas mais explícito: Não há nada de especial sobre "um shell". Este

I understand that nologin, false, and true are actually shells and they are used to prevent users from logging in

não é verdade: false e true eram apenas programas que já estavam disponíveis nos primeiros sistemas Unix (e eles eram usados em outros contextos). O que aconteceu foi que havia a situação em que havia contas de usuário que não correspondiam a um usuário real. Então a questão era o que colocar no campo "shell" em /etc/passwd . Porque você pode colocar em qualquer qualquer programa lá, os primeiros administradores de sistema acharam que era um hack fofo (e prático) usar apenas /bin/false . Os sysadmins posteriores acharam que era um pouco demais, e escreveram nologin (agora que eles tinham mais espaço em disco para usar) para documentar melhor essa intenção.

Então: Você pode usar qualquer programa como o programa que é gerado quando um usuário faz o login. Muitos programas não fazem sentido (por exemplo, quando eles precisam de argumentos de linha de comando). Alguns outros irão. Se você ficar entediado, você pode escrever o seu próprio. Você não precisa colocar nenhum molho especial para torná-lo "uma concha".

    
por 09.09.2018 / 13:12
4

Esta é uma pergunta em que a resposta é complicada. O que a maioria das pessoas chama de "shell" é um Read-Eval-Print Loop e, portanto, até mesmo um interpretador python é um shell, desde que você esteja executando python interativamente. No entanto, isso significaria que a nologina não é uma casca real! Então, o que é uma concha?

Tecnicamente falando, qualquer programa pode ser usado como um shell. Na verdade, aqui estão algumas fotos minhas usando invólucros incomuns:

  1. Shell Python como o shell de login
  2. Nano como shell (embora não seja possível distinguir entre a execução normal, já que é tela cheia)
  3. Cat funcionando como um shell
  4. Top rodando como um shell (mesmo que você não consiga vê-lo como um shell)
  5. E um programa mundial de olá!

No entanto, isso não é o que você esperaria estar executando como shells. Normalmente, você desejará estar executando um dos shells em /etc/shells . Por exemplo, o meu contém:

# /etc/shells: valid login shells
/bin/sh
/bin/bash
/bin/rbash
/bin/dash
/usr/bin/tmux
/usr/bin/screen

e nenhuma das conchas que mencionei anteriormente! Então, por que eles correm?

Para simplificar, eles fazem, mas apenas localmente. Se você examinar a% man_de% manpage com shells , descobrirá que man shells é usado principalmente por programas como daemons FTP. É por isso que você não vê o /etc/shells shell em nologin : ele impede o login no FTP e outros daemons que não são de login por não estarem lá, enquanto impede o login localmente por ser um simples programa /etc/shells , e não um REPL.

Portanto, para responder à sua pergunta: Existe apenas um tipo de shell, e isso é executável. Se você pode rodar um programa, é um shell.

    
por 09.09.2018 / 15:37
2

Tudo o que você quiser.

Um shell é apenas um aplicativo TTY. então qualquer coisa que você possa rodar em um TTY pode ser um shell.

Um exemplo de uma concha não convencional seria um serviço de quadro de avisos: usuário efetua login via ssh ou telnet e obtém um BBs em vez de uma linha de comando

    
por 09.09.2018 / 13:03