Quelle est la différence entre «su» avec et sans trait d'union?

88

Je suis tout à fait nouveau à la borne Linux et je ne suis pas tout à fait sûr de ce que la différence entre suavec un trait d' union et susans un trait d' union est, par exemple: par su - usernamerapport su username.

J'ai regardé dans la documentation mais là dedans, cela n'a pas été mentionné. Est-ce que quelqu'un pourrait m'aider s'il vous plaît?

utilisateur574183
la source
Un "shell de connexion" signifie souvent un shell interactif. Ceci est opposé à un shell qui exécute un script et se ferme.
Shahbaz
6
C'est juste là dans la même page de manuel que vous vous dirigez vers : " -, -l, --login: transformez le shell en shell de connexion "
ArjunShankar
1
vous n'avez même pas à google, il suffit de taper su --help.
Art Shayderov
1
De noteworthyness: Ceci est particulièrement utile lorsque su-ment à la racine que sans utiliser le hypen pour lancer un nouveau shell de connexion, votre $PATHne sera pas mis à jour et donc vous ne serez pas en mesure d'appeler directement les fichiers binaires root uniquement dans /sbinet/usr/sbin
Garrett

Réponses:

86

La différence entre "-" et "pas de trait d'union" est que ce dernier conserve votre environnement existant (variables, etc.); le premier crée un nouvel environnement (avec les paramètres de l'utilisateur réel, pas les vôtres).

https://wiki.archlinux.org/index.php/Su

Le trait d'union a deux effets:

1) bascule du répertoire en cours vers le répertoire de base du nouvel utilisateur (par exemple, vers / root dans le cas de l'utilisateur root) en vous connectant en tant qu'utilisateur

2) remplace les variables d'environnement par celles du nouvel utilisateur, comme indiqué par ~ / .bashrc. En d’autres termes, si le premier argument de su est un trait d’union, le répertoire et l’environnement actuels seront modifiés de la manière attendue si le nouvel utilisateur s’était réellement connecté à une nouvelle session (au lieu de simplement reprendre une session existante).

paulsm4
la source
ce site -> admon.org/difference-between-login-shell-and-non-login-shell indique que, lorsqu'ils sont utilisés sans trait d'union, les fichiers / etc / profile et ~ / .bash_profile ne sont pas exécutés. Quelle est l'importance de ces deux fichiers sur l'environnement de l'utilisateur?
user574183
2
Ces deux éléments sont les fichiers qui définissent l'environnement utilisateur :) Ne pas les exécuter signifie conserver votre environnement d'origine. Les exécuter (en utilisant "-") signifie que votre environnement est identique à l'utilisateur que vous "suez". Utiliser le trait d'union est généralement ce que vous voulez - j'utilise habituellement "-" chaque fois que je "su".
paulsm4
l'ordre d'exécution est-il vraiment important? Je pose la question parce que, sur ce site, ils ont mentionné que les deux fichiers / etc / bashrc ~ / .bashrc sont exécutés dans l’ordre inverse lorsqu’ils se trouvent dans un shell non connecté. Quelqu'un s'il vous plaît aidez-moi
user574183
1
@ user574183 bien sûr, par exemple si l'un définit quelque chose mais l'autre désactive quelque chose ou définit quelque chose d'autre
fikr4n
3

su -démarre un shell de connexion pour root. Pour les différences avec un shell normal, voir ce site par exemple.

Lars Kotthoff
la source
2
C'est vrai, mais ce n'est pas la question :)
paulsm4
C'est incorrect, vous pouvez exécuter su avec un tiret et le faire démarrer un shell pour un autre utilisateur. Exécutez ce qui suit et voyez la sortiesudo su - "testuser" -c "whoami"
David Hergert
@ DavidHergert Oui, et sans nom d'utilisateur, il ouvre un shell pour root.
Lars Kotthoff
@LarsKotthoff - ok, désolé, le libellé est tel que le tiret est ce qui en fait un shell racine, et non le fait de laisser un utilisateur par défaut à root. Même mon résident local SA m'a confondu à ce sujet. :)
David Hergert