88 votes

Quels sont les shells de connexion et les shells non connectés ?

Il est dit que les paramètres pour les shells non connectés doivent aller dans le fichier .bashrc et les paramètres des shells connectés dans le fichier .profile.

Que signifient vraiment les shells de connexion et non de connexion ?

Veuillez expliquer sans utiliser de jargon technique autant que possible.

95voto

ish Points 134738

Tout simplement:

  • Si vous ouvrez un shell ou un terminal (ou basculez vers un), et qu'il vous demande de vous connecter (Nom d'utilisateur ? Mot de passe?) avant de vous donner un invite, c'est un shell de connexion.
  • Si ce n'est pas le cas (comme gnome-terminal), et qu'il vous permet de l'utiliser immédiatement, c'est un shell non de connexion.

Si vous êtes un utilisateur normal d'Ubuntu Desktop, le seul shell de connexion est... votre plateau de bureau (vous tapez un mot de passe pour entrer, n'est-ce pas? ;) Eh bien, techniquement c'est un shell de connexion qui lance une interface graphique, mais cela devient du jargon. Et oui, il lira les paramètres dans .profile

La seule fois où vous (un utilisateur normal) verrez probablement un shell de connexion qui semble être un shell de connexion, c'est si vous avez un problème avec votre bureau et que vous basculez vers un terminal virtuel avec le raccourci Ctrl+Alt+F1.


Les autres cas généraux pour avoir un shell de connexion incluent:

  • accéder à votre ordinateur à distance via ssh (ou se connecter localement avec ssh localhost)
  • simuler un shell de connexion initial avec bash -l (ou sh -l)
  • simuler un shell de connexion initial root avec sudo -i
    • ou sudo -u **NomUtilisateur** -i pour un autre utilisateur non-root
  • s'authentifier en tant qu'un autre utilisateur non-root avec su - **NomUtilisateur** (et leur mot de passe)
  • utiliser la commande sudo login pour changer d'utilisateur

11voto

ZyX Points 211

Je ne pense pas qu'une réponse correcte puisse être donnée sans utiliser de "jargon technique". Puisque cette question est la première à apparaître sur Google pour la requête "qu'est-ce qu'un shell de connexion", je fournirai ci-dessous une réponse plus correcte :

Un shell de connexion est simplement un shell auquel on a dit d'être un shell de connexion. Cela ne signifie pas un shell qui apparaît après la connexion, bien que généralement l'application qui vous connecte dise au shell qu'il lance d'être un shell de connexion. Il existe les façons suivantes de dire au shell qu'il doit être un shell de connexion :

  1. Exécuter le shell avec l'argument -l ou --login en supposant qu'il le reconnaisse (je ne connais aucun shell qui ne reconnaisse pas -l, mais --login n'est supporté que par quelques shells).
  2. Exécuter le shell avec argv[0] défini sur -{quelque_chaine} (c'est-à-dire avec un SIGNE MOINS ajouté au début du argv[0] habituel ou à une autre chaîne). C'est ce que font ssh et su : su exécute simplement le programme avec -su comme argv[0] (bonjour à tous ceux qui pensent que argv[0] a quelque chose à voir avec le nom de l'exécutable actuellement en cours d'exécution), ssh exécute zsh avec -zsh lorsque l'utilisateur a défini /bin/zsh comme son shell.

Le fait d'être un shell de connexion n'a absolument rien à voir avec le fait que quelqu'un vous demande un mot de passe ou effectue une autre procédure d'authentification. Certains programmes comme ssh ou login (ou certains émulateurs de terminal comme urxvt) exécutent des shells en tant que shells de connexion en utilisant argv[0] qui commence par un SIGNE MOINS. Certains comme su ou sudo (ou zsh : voir le modificateur de précommande - décrit dans la section MODIFICATEURS DE PRÉCOMMANDE de man zshmisc) ne le font pas par défaut, mais peuvent être indiqués. Certains ont pour seule option de dire au shell d'être un shell de connexion en utilisant son argument (c'est-à-dire bash -l) : ssh avec un argument de commande (qui indique explicitement à ssh quoi exécuter à l'extrémité distante).

Il est généralement préférable de consulter d'abord la documentation du programme utilisé pour invoquer le shell pour déterminer si le shell sera un shell de connexion, puis de faire quelques tests pour déterminer si l'application lancera un shell de connexion (par exemple, en ajoutant un echo à .profile).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X