GNU/Linux >> Tutoriels Linux >  >> Linux

Différence entre le shell de connexion et le shell sans connexion ?

Je comprends la différence fondamentale entre un shell interactif et un shell non interactif. Mais qu'est-ce qui différencie exactement un shell de connexion d'un shell sans connexion ?

Pouvez-vous donner des exemples d'utilisations d'un interactif sans connexion coquille ?

Réponse acceptée :

Un shell de connexion est le premier processus qui s'exécute sous votre ID utilisateur lorsque vous vous connectez pour une session interactive. Le processus de connexion indique au shell de se comporter comme un shell de connexion avec une convention :passer l'argument 0, qui est normalement le nom de l'exécutable du shell, avec un - caractère ajouté (par exemple, -bash alors que ce serait normalement bash . Les shells de connexion lisent généralement un fichier qui fait des choses comme définir des variables d'environnement :/etc/profile et ~/.profile pour le shell Bourne traditionnel, ~/.bash_profile en plus pour bash, /etc/zprofile et ~/.zprofile pour zsh, /etc/csh.login et ~/.login pour csh, etc.

Lorsque vous vous connectez sur une console texte, ou via SSH, ou avec su - , vous obtenez une connexion interactive coquille. Lorsque vous vous connectez en mode graphique (sur un gestionnaire d'affichage X), vous n'obtenez pas de shell de connexion, mais plutôt un gestionnaire de session ou un gestionnaire de fenêtres.

Il est rare d'exécuter une connexion non interactive shell, mais certains paramètres X le font lorsque vous vous connectez avec un gestionnaire d'affichage, afin de s'arranger pour lire les fichiers de profil. Autres paramètres (cela dépend de la distribution et du gestionnaire d'affichage) lire /etc/profile et ~/.profile explicitement, ou ne les lisez pas. Une autre façon d'obtenir un shell de connexion non interactif consiste à se connecter à distance avec une commande transmise via une entrée standard qui n'est pas un terminal, par ex. ssh example.com <my-script-which-is-stored-locally (par opposition à ssh example.com my-script-which-is-on-the-remote-machine , qui exécute un shell non interactif et sans connexion).

Lorsque vous démarrez un shell dans un terminal dans une session existante (écran, terminal X, tampon de terminal Emacs, un shell dans un autre, etc.), vous obtenez un interactif, sans connexion coquille. Ce shell peut lire un fichier de configuration du shell (~/.bashrc pour bash appelé en tant que bash , /etc/zshrc et ~/.zshrc pour zsh, /etc/csh.cshrc et ~/.cshrc pour csh, le fichier indiqué par ENV variable pour les shells compatibles POSIX/XSI tels que dash, ksh et bash lorsqu'elle est appelée en tant que sh , $ENV si défini et ~/.mkshrc pour mksh, etc.).

Lorsqu'un shell exécute un script ou une commande transmise sur sa ligne de commande, il s'agit d'un non interactif, sans connexion coquille. De tels shells s'exécutent tout le temps :il est très courant que lorsqu'un programme appelle un autre programme, il exécute en réalité un petit script dans un shell pour invoquer cet autre programme. Certains shells lisent un fichier de démarrage dans ce cas (bash exécute le fichier indiqué par le BASH_ENV variable, zsh exécute /etc/zshenv et ~/.zshenv ), mais c'est risqué :le shell peut être invoqué dans toutes sortes de contextes, et il n'y a pratiquement rien que vous puissiez faire qui ne puisse pas casser quelque chose.

En relation:Comprendre tc qdisc et iperf ?

Je simplifie un peu, voir le manuel pour les détails sanglants.


Linux
  1. La différence entre une commande intégrée et une qui ne l'est pas ?

  2. La différence entre les guillemets "...", "...", $'...' et $"..." dans le shell ?

  3. La Différence Entre [[ $a ==Z* ]] Et [ $a ==Z* ] ?

  4. Différence entre 2>&-, 2>/dev/null, |&, &>/dev/null et>/dev/null 2>&1 ?

  5. La différence d'utilisation entre les variables shell et les variables d'environnement ?

Différence entre apt et apt-get expliquée

Quelle est la différence entre la connexion et le shell sans connexion

Linux – Quelle est la différence entre `su -` et `su –login` ?

Différence entre snat et mascarade?

Quelle est la différence entre une console, un terminal et un shell ?

Différence entre '{}' et {} dans la commande find ?