Outils pour utilisateurs

Outils du site


sysadmin:linux:shell

Ceci est une ancienne révision du document !


Le shell

Le shell ou l'interpréteur de commandes est un programme spécialisé dont le rôle est de permettre les interactions avec le système d'exploitation. C'est une interface qui peut être utilisée soit par un opérateur humain soit par un programme. On distingues plusieurs modes de fonctionnement et d'invocation:

Modes de fonctionnement:

  • L' interactive shell (abrégé I) attend les instructions de l'utilisateur. Il est a l'écoute d'un périphérique d'entrée (le clavier) et traite séquentiellement les instructions communiquées par l'utilisateur.
  • Le non interactive shell (NI) est lancé par un processus automatisé, les commandes sont traitées par lots sans interaction attendue de la part de l'utilisateur.

Modes d'invocation:

  • Le login shell (L) est utilisé pour initialiser l'environnement de l'utilisateur. Il permet d’exécuter un ensemble de commandes seulement une fois, ces commandes sont regroupées dans des scripts d'initialisation lus seulement par le login shell.
  • Le non login shell (NL) désigne tout autre shell.

On retrouve au final 4 types de shell:

  1. NINL: non interactive non login shell (utilisé par les processus et programmes)
  2. NIL: non interactive login shell
  3. INL interactive non login shell (le terminal émulé par l'interface graphique est donc de ce type)
  4. IL interactive login shell

Identifier le shell de login

La documentation du shell bash indique que pour le shell de login, la variable réservée $0 préfixe le nom du script par le caractère -.

# Connexion SSH à un serveur distant pour démarrer un shell de login interactif (IL)
ssh user@host.example.com 
 
# Affiche la valeur de $0
echo $0
-bash
 
 
# invocation d'un nouveau shell et affichage de la variable $0
bash -i -s
echo $0
bash

Pour qu'un shell soit considéré comme shell de login, il suffit de positionner l'option -l lors de son l'invocation:

# Affiche le PID du shell courant
echo PID=$$
PID=5508
 
# Détermine si le shell courant est un shell de login:
shopt login_shell 
login_shell     off
 
# Invoque un nouveau shell avec l'option -l (login_shell)
/bin/bash -l -i -c 'echo $0; echo PID=$$; shopt login_shell; pstree -p -s -h $$'
/bin/bash
PID=37394
login_shell     on
systemd(1)───systemd(4262)───gnome-terminal-(4965)───bash(4973)───screen(5506)───screen(5507)───bash(5508)───bash(37394)───pstree(37401)
sysadmin/linux/shell.1642179475.txt.gz · Dernière modification : 2022/01/14 16:57 de yoann