Session shell - Login

Mise à jour : Debian 9.1

Le shell est le programme qui lit, interprète et exécute les commandes lues depuis un terminal ou un fichier et permet d'interagir avec l'ordinateur. Plusieurs shells peuvent être ouverts simultanément, de façon parallèle ou imbriquée, par un ou plusieurs utilisateurs.

Ce document décrit le déroulement d'une session shell interactive.

Terminologie :

Sommaire

1 - Démarrage

1.1 - Principe

Le démarrage d'un shell interactif s'effectue

La méthode de lancement du shell va jouer sur la définition de l'environnement :

1.2 - Démarrage en lançant un terminal

alt Ctrl Fn

Un shell de connexion s'ouvre.

Un shell "non connexion" s'ouvre.

Pour plus de détails sur l'ouverture d'un terminal voir : Terminal

1.3 - Démarrage d'un shell fils avec bash

$ bash -l
Mot de passe :
$ bash

1.4 - Démarrage d'un shell fils avec su

su démarre un nouveau shell, comme bash, mais permet de changer d'utilisateur. Dans le cas du super-utilisateur, le nom (root) peut être omis dans la commande.

$ su -l nom_utilisateur
Mot de passe :
$ su nom_utilisateur
Mot de passe :

Note : Dans ce dernier cas, il s'agit bien d'un shell "non connexion", la saisie du nom d'utilisateur et du mot de passe appartiennent à la commande su et non à bash.

2 - Propriétés du shell courant

2.1 - Identifiants de processus

Les commandes suivantes permettent d'afficher le pid du shell et les shells ouvert dans la session :

$ echo $BASHPID
2716

$ ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1000 2698 2693 0 80 0 - 5407 - pts/0 00:00:00 bash
0 S 1000 2716 2698 0 80 0 - 5419 - pts/0 00:00:00 bash
0 R 1000 2745 2716 0 80 0 - 7465 - pts/0 00:00:00 ps

Dans l'exemple ci-dessus, le pid du shell courant est 2716. Son parent a pour pid 2698 (colonne PPID), et est lui-même un shell. Le shell courant est donc un shell fils.

2.2 - Type de shell (connexion - interactif)

Repris de : https://unix.stackexchange.com/questions/26676/how-to-check-if-a-shell-is-login-interactive-batch#26827

Les commandes suivantes permettent d'afficher

$ shopt -q login_shell && echo 'Shell de connexion' || echo 'Pas un shell de connexion'
$ [[ $- == *i* ]] && echo 'Shell interactif' || echo 'Shell non interactif'

3 - Clôture

La commande exit ou la combinaison de touches Ctrl D permettent

Les shells de connexion peuvent également être fermés avec la commande logout.

4 - Divers

$ loginctl list-users 
UID USER
1000 pi

1 users listed.

$ loginctl list-sessions
SESSION UID USER SEAT TTY
12 1000 pi pts/0

1 sessions listed.
$ loginctl user-status
pi (1000)
Since: Mon 2021-12-13 14:48:58 CET; 25min ago
State: active
Sessions: *12
Linger: no
Unit: user-1000.slice
├─session-12.scope
│ ├─655 sshd: pi [priv]
│ ├─682 sshd: pi@pts/0
│ ├─683 -bash
│ ├─746 loginctl user-status
│ └─747 pager
└─user@1000.service
└─init.scope
├─659 /lib/systemd/systemd --user
└─660 (sd-pam)

déc. 13 14:48:59 raspi systemd[659]: Reached target Timers.

$ loginctl session-status
12 - pi (1000)
Since: Mon 2021-12-13 14:48:58 CET; 28min ago
Leader: 655 (sshd)
TTY: pts/0
Remote: 192.168.0.14
Service: sshd; type tty; class user
State: active
Unit: session-12.scope
├─655 sshd: pi [priv]
├─682 sshd: pi@pts/0
├─683 -bash
├─769 loginctl session-status
└─770 pager
déc. 13 14:48:59 raspi systemd[1]: Started Session 12 of user pi