L’utilitaire su (switch user) permet dans les environnements GNU/Linux de changer d’utilisateur en ligne de commande. La syntaxe est :

su [options] [-] [user [argument...]]

Si aucun utilisateur est spécifié, su changera l’utilisateur pour l’utilisateur root. Ainsi une utilisation fréquente de cette commande est ce changement d’utilisateur, avec une variante avec sudo :

user@linux:~$ su
root@linux:/home/user#

user@linux:~$ sudo su
root@linux:/home/user#

La différence entre ces deux commandes est le mot de passe à saisir. Pour la première commande, le mot de passe demandé est le mot de passe de l’utilisateur root alors que pour la deuxième commande, le mot de passe demandé est celui de l’utilisateur user grâce à la commande sudo.

Cependant les commandes ci-dessus sont incomplètes, su sans argument ne permet de changer complétement d’utilisateur. Ce qu’il manque c’est le chargement des variables d’environnements de l’utilisateur en plus. Pour charger toutes les variables d’environnments, notammant le $PATH, il est nécessaire d’ajouter l’argument - :

user@linux:~$ su -
root@linux:~#

user@linux:~$ sudo su -
root@linux:~#

La différence de résultat est justement due au chargement des variables avec la variables $HOME qui est /root pour le user root, donnant un ~ au prompt en lieu et place du chemin /home/user.