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


Je suis tout à fait nouveau au terminal Linux et je ne suis pas tout à fait sûr de la différence entre su avec un trait d'union et su sans trait d'union, par exemple: su - username contre. su username.

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


69
2017-07-26 16:39


origine


un "shell de connexion" signifie souvent un shell interactif. Ceci est contre un shell qui exécute juste un script et quitte. - Shahbaz
Il est juste là dans le même page de manuel que vous liez à: "-, -l, --login: faire du shell un shell de connexion" - ArjunShankar
vous n'avez même pas besoin de google, tapez simplement su --help. - Art Shayderov
Ce qui est particulièrement intéressant: ceci est particulièrement utile lorsque vous utilisez root comme si vous utilisiez l'hypen pour démarrer un nouveau shell de connexion, votre $PATH ne sera pas mis à jour et donc vous ne pourrez pas appeler directement les binaires root uniquement dans /sbin et /usr/sbin - Garrett


Réponses:


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

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

Le trait d'union a deux effets:

1) bascule du répertoire actuel vers le répertoire personnel du   nouvel utilisateur (par exemple, à / root dans le cas de l'utilisateur root) en se connectant   comme cet utilisateur

2) modifie les variables d'environnement en celles du nouvel utilisateur comme   dicté par leur ~ / .bashrc. Autrement dit, si le premier argument de su est un   tiret, le répertoire actuel et l’environnement seront remplacés par   serait attendu si le nouvel utilisateur avait effectivement ouvert une session sur un nouveau   session (plutôt que de simplement prendre en charge une session existante).


67
2017-07-26 16:43



ce site -> admon.org/difference-between-login-shell-and-non-login-shell dit que lorsqu'il est utilisé sans le trait d'union, les fichiers / etc / profile et ~ / .bash_profile ne sont pas exécutés. Quelle est la signification de ces deux fichiers sur l'environnement utilisateur? - user574183
Ces deux choses sont les fichiers qui ensemble l'environnement utilisateur :) ne pas les exécuter signifie en gardant votre environnement d'origine. Les exécuter (en utilisant "-") signifie faire votre environnement le même que l'utilisateur que vous êtes en train de "faire". Utiliser le trait d'union est généralement ce que vous vouloir - J'utilise "-" habituellement à chaque fois que je "su". - paulsm4
l'ordre d'exécution est-il vraiment important? Je le demande 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
@ utilisateur574183 bien sûr, par ex. si l'un a mis quelque chose mais que l'autre a désactivé quelque chose ou s'est mis à autre chose - BornToCode


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


2
2017-07-26 16:43



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 la commande suivante et voyez la sortie sudo su - "testuser" -c "whoami" - David Hergert
@DavidHergert Yep, et sans nom d'utilisateur, ouvre un shell pour root. - Lars Kotthoff
@LarsKotthoff - ok, désolé, la façon dont cela a été formulé semblait être que le tiret est ce qui en fait un shell root, et non le fait que laisser un utilisateur par défaut soit root. Même mon résident local SA m'a confondu à ce sujet. :) - David Hergert