J'ai vu beaucoup de commentaires ici dans Ask Ubuntu concernant la préférence d'utiliser Sudo -s
plutôt que Sudo su
.
Pour moi, ces deux commandes font exactement la même chose. Mais pourquoi Sudo -s
est-il censé être meilleur?
Je pense que Sudo -s
n'est pas "meilleur", c'est juste différent.
Sudo -s
conserve votre répertoire $ HOME. Ainsi, lorsque vous démarrez des programmes, ils utiliseront vos fichiers de configuration (et non ceux de la racine), etc. Inconvénient: ils peuvent également modifier la propriété de vos fichiers dans le répertoire $ HOME. Exemple typique: le fichier .Xauthority
, mais Je n'ai jamais eu de problème avec ça.
Sudo su
ou Sudo -i
les programmes utiliseront le répertoire personnel de la racine et ses fichiers de configuration. Cela peut sembler plus intuitif, mais cela signifie également qu’il n’utilisera pas la configuration que vous vous êtes définie (alias, historique de bash, ...).
Parce que Sudo -s
ne changera pas vos variables d’environnement, en particulier $HOME
, qui restera HOME=/home/USER
. Si vous utilisez Sudo su
, ceci deviendra HOME=/root
, ce qui peut avoir des effets indésirables lorsque les programmes que vous démarrez tentent d'accéder au répertoire de base de votre utilisateur.
En gros, cela ressemble à Sudo
vs gksudo
lors de l’exécution de programmes graphiques.
Mis à part les différences déjà mentionnées avec les variables d'environnement, je trouve Sudo su
idiot et inutile car vous demandez à Sudo
d'exécuter su
en tant que root et de lui demander d'exécuter un shell en tant que root. Pourquoi demander à un programme de demander à un programme de vous donner un shell racine, alors que vous pouvez simplement demander au premier programme de vous donner ce shell? Est-ce important dans la pratique? Non, je suis juste pédant.
Je ne suis pas d’accord avec d’autres réponses lors de l’examen des cas dans lesquels vous souhaitez vous connecter en tant qu’utilisateur qui n’a pas de shell. C'est un cas très courant avec des utilisateurs affectés à des services.
L'utilisation de "Sudo su" démarrera le shell spécifié par l'utilisateur. Toutefois, dans le cas d’un utilisateur affecté à un processus serveur, le shell est/usr/bin/false et la journalisation échouera. Au lieu de cela, vous devriez entrer comme:
Sudo -sHu <server-user>
qui va vous connecter et cd à son chemin de départ, même si l'utilisateur n'a pas attribué de shell