O que são shells de login e não-login?

62

Diz-se que as configurações do shell de login não são inseridas no arquivo .bashrc e as configurações do shell de login vão para o arquivo .profile .

O que realmente significa as caixas de login e não-login?

Por favor, explique sem usar o jargão técnico, tanto quanto possível.

    
por DUKE 25.06.2012 / 19:00

2 respostas

68

Simplificando:

  • Se você abrir um shell ou terminal (ou alternar para um) e solicitar que você efetue login (Nome de usuário? Senha?) antes de fornecer um prompt, será um shell de login.
  • Se não (como gnome-terminal ), e permitir que você o use imediatamente, é um shell que não é de login.

Se você é um usuário normal do Ubuntu Desktop, o shell de login somente é ... seu desktop (você digita uma senha para entrar, certo;)? Bem, tecnicamente é um shell de login que inicia uma interface gráfica, mas isso está chegando ao jargão. E sim, ele lerá as configurações em .profile

A única vez que você (um usuário normal) provavelmente verá um shell de login que parece como um shell de login é se você está tendo algum problema com seu desktop e você muda para um terminal virtual com o Ctrl + Alt + atalho F1 .

Os outros casos gerais para ter um shell de login incluem:

  • acessando seu computador remotamente via ssh (ou conectando localmente com ssh localhost )
  • simulando um shell de login inicial com bash -l (ou sh -l )
  • simulando um shell de login root inicial com sudo -i
    • ou sudo -u username -i para outro usuário que não seja root
  • autenticando como outro usuário que não seja root com su - username (e sua senha)
  • usando o comando sudo login para alternar usuário
por ish 26.06.2012 / 04:28
7

Eu não acho que a resposta correta possa ser dada sem o "jargão técnico". Como essa pergunta é a primeira a aparecer no Google para a consulta "o que é um shell de login", estou fornecendo uma resposta mais correta abaixo:

O shell de login é simplesmente um shell que foi dito para ser um shell de login. Ele faz não significar o shell que aparece depois que você faz o login, embora normalmente o aplicativo que faz o login lhe diga que o shell é iniciado como um shell de login. Existem as seguintes maneiras de dizer ao shell que deve ser um login:

  1. Executando o shell com o argumento -l ou --login assumindo que ele o conhece (não conheço nenhum shells que não conheçam o -l , mas --login é suportado apenas por alguns shells).
  2. Executando o shell com argv[0] definido como -{some_string} (ou seja, com HYPHEN-MINUS pré-anexado ao usual argv[0] ou a alguma outra string). Isto é o que o ssh e su fazem: o su executa o executável com -su as argv[0] (olá para todo mundo pensando argv[0] tem algo a ver com o nome executável atualmente), ssh executa zsh com -zsh quando o usuário definiu /bin/zsh como sua concha.

Loginess do shell não tem absolutamente nada a ver com alguém pedindo uma senha ou executando algum outro procedimento de autenticação. Alguns programas como o ssh ou o login (ou alguns emuladores de terminal como o urxvt) executam shells como um login usando argv[0] que começa com um HYPHEN-MINUS. Alguns como su ou sudo (ou zsh: veja - modificador de pré-encomenda descrito na seção PRECOMMAND MODIFIERS em man zshmisc ) não fazem isso por padrão, mas podem ser informados. Alguns têm a única opção de dizer shell para ser o login usando seu argumento (ou seja, bash -l ): ssh com um argumento de comando (que explicitamente diz ao ssh o que executar no final remoto).

Geralmente é melhor primeiro consultar a documentação do programa usado para invocar o shell para determinar se o shell será o login e o segundo realizar alguns testes para determinar se o aplicativo iniciará um shell de login (por exemplo, adicionando echo para .profile ).

    
por ZyX 17.01.2015 / 21:33