Il est dit que les paramètres pour que Shell ne se connecte pas au fichier .bashrc
et les paramètres du serveur de connexion au fichier .profile
.
Qu'entend-on vraiment par les shells login et non-login?
S'il vous plaît expliquer sans utiliser le jargon technique autant que possible.
Si vous êtes un utilisateur normal de Ubuntu Desktop, le shell de connexion seulement est ... votre bureau (vous tapez un mot de passe pour entrer, à droite;) ? Eh bien, techniquement, c'est un shell de connexion qui démarre une interface graphique, mais cela entre dans le 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 ressemble à un shell de connexion est si vous rencontrez un problème avec votre bureau et vous passez à un terminal virtuel avec le Ctrl+Alt+F1 raccourci.
ssh
(ou vous connecter localement avec ssh localhost
)bash -l
(ou sh -l
)root
initial avec Sudo -i
Sudo -u username -i
pour un autre utilisateur non -root
root
avec su - username
(et son mot de passe )Sudo login
pour changer d'utilisateurJe ne pense pas que une réponse correcte puisse être donnée sans "jargon technique". Étant donné que cette question est la première à apparaître dans Google pour la requête "Qu'est-ce qu'un shell de connexion", je propose une réponse plus correcte ci-dessous:
Login Shell est simplement un shell à qui il a été dit d'être un shell de connexion. Cela ne signifie pas un shell qui apparaît après votre connexion, bien que, généralement, l'application qui vous enregistre indique à Shell qu'il se lance comme un shell de connexion. Il existe les moyens suivants pour indiquer à Shell qu'il doit s'agir d'un login:
-l
ou --login
en supposant qu'il le connaisse (je ne connais aucun shell qui ne connaît pas -l
, mais --login
n'est pris en charge que par quelques shell).argv[0]
défini sur -{some_string}
(c'est-à-dire avec HYPHEN-MINUS ajouté au argv[0]
habituel ou à une autre chaîne). C'est ce que ssh et su font: su exécute simplement l'exécutable avec -su
sous la forme argv[0]
(bonjour à tout le monde, pensant que argv[0]
a quelque chose à voir avec le nom de l'exécutable en cours d'exécution), ssh exécute zsh avec -zsh
lorsque l'utilisateur a défini /bin/zsh
comme son shell.Loginess of the Shell 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 tels que ssh ou login (ou certains émulateurs de terminaux comme urxvt) utilisent des shells comme des identifiants de connexion utilisant argv[0]
qui commence par HYPHEN-MINUS. Certains, comme su ou Sudo (ou zsh: voir -
le modificateur de précommande décrit dans la section PRECOMMAND MODIFIERS de man zshmisc
) ne le font pas par défaut, mais on peut le leur dire. Certains ont la seule possibilité de dire à Shell d'être celui qui se connecte à l'aide de son argument (c'est-à-dire bash -l
): ssh avec un argument de commande (qui indique explicitement à ssh ce qu'il doit exécuter à l'extrémité distante).
En règle générale, il est préférable de consulter d'abord la documentation du programme utilisé pour appeler Shell afin de déterminer si Shell sera celui qui se connecte, puis d'effectuer quelques tests pour déterminer si l'application lancera un shell de connexion (par exemple, en ajoutant echo
à .profile
).