Pour expliquer cela, vous devez savoir ce que font les programmes:
su
- La commande su
est utilisée pour basculer vers un autre utilisateur ( s avec u ser), mais vous pouvez également passer à l’utilisateur root par invoquer la commande sans paramètre. su
vous demande le mot de passe de l'utilisateur à changer après avoir tapé le mot de passe que vous avez changé pour l'environnement de l'utilisateur.
sudo
- sudo
est destiné à exécuter une seule commande avec les privilèges root. Mais contrairement à su
, il vous demande le mot de passe de l'utilisateur actuel. Cet utilisateur doit être dans le fichier sudoers (ou un groupe qui se trouve dans le fichier sudoers). Par défaut, Ubuntu "se souvient" de votre mot de passe pendant 15 minutes, ce qui vous évite de taper votre mot de passe à chaque fois.
bash
- Une interface texte pour interagir avec l'ordinateur. Il est important de comprendre la différence entre les shells de connexion, non connectés, interactifs et non interactifs:
- shell de connexion: un shell de connexion vous connecte au système en tant qu'utilisateur spécifié, car il s'agit d'un nom d'utilisateur et d'un mot de passe. Lorsque vous tapez sur ctrl + alt + F1 pour vous connecter à un terminal virtuel après une connexion réussie, un shell de connexion.
- shell non connecté: un shell exécuté sans connexion, nécessaire pour cela, est un utilisateur actuellement connecté. Lorsque vous ouvrez un terminal graphique dans gnome, il s’agit d’un shell non connecté.
- shell interactif: un shell (login ou non) où vous pouvez taper ou interrompre de manière interactive des commandes. Par exemple un terminal gnome.
- shell non interactif: Un (sous) shell qui est probablement exécuté à partir d'un processus automatisé. Vous ne verrez ni entrée ni sortie.
sudo su
Appelle sudo
avec la commande su
. Bash est appelé shell interactif non connecté. Donc, bash exécute uniquement .bashrc
. Vous pouvez voir qu'après être passé à root, vous êtes toujours dans le même répertoire:
[email protected]:~$ sudo su
[email protected]:/home/user#
sudo su -
Cette fois, il s’agit d’un shell de connexion, donc /etc/profile
, .profile
et .bashrc
sont exécutés et vous vous trouverez dans le répertoire principal de root avec l’environnement root.
sudo -i
C'est presque la même chose que sudo su -
L'option -i (simuler la connexion initiale) exécute le shell spécifié par l'entrée de base de données de mot de passe de l'utilisateur cible comme shell de connexion. Cela signifie que les fichiers de ressources spécifiques à la connexion tels que .profile
, .bashrc
ou .login
seront lus et exécutés par le shell.
sudo /bin/bash
Cela signifie que vous appelez sudo
avec la commande /bin/bash
. /bin/bash
est démarré en tant que shell non connecté, de sorte que tous les fichiers de points ne sont pas exécutés, mais bash lui-même lit .bashrc
de l'utilisateur appelant. Votre environnement reste le même. Votre maison ne sera pas la maison de la racine. Donc, vous êtes root, mais dans l'environnement de l'utilisateur appelant.
sudo -s
lit la variable $SHELL
et exécute le contenu. Si $SHELL
contient /bin/bash
, il appelle sudo /bin/bash
(voir ci-dessus).
Vérifier:
Pour vérifier si vous êtes dans un shell de connexion ou non (ne fonctionne que dans bash car shopt
est une commande intégrée):
shopt -q login_shell && echo 'Login shell' || echo 'No login shell'