Qual é a diferença entre "su" com e sem hífen?

87

Eu sou muito novo para o terminal Linux e eu não tenho certeza qual é a diferença entre sucom um hífen e susem hífen é, por exemplo: su - usernamevs. su username.

Examinei a documentação, mas lá não foi mencionado. Alguém poderia me ajudar?

user574183
fonte
um "shell de login" geralmente significa shell interativo. Isso é contra um shell que apenas executa um script e sai.
Shahbaz
6
É ali mesmo na mesma página de manual que você conectar-se a : " -, -l, --login: fazer o shell um shell de login "
ArjunShankar
1
você nem precisa pesquisar no google, basta digitar su --help.
Art Shayderov
1
Digno de nota: Isso é particularmente útil quando você deseja fazer o root, pois sem usar o hypen para iniciar um novo shell de login, você $PATHnão será atualizado e, portanto, não poderá chamar diretamente binários somente raiz no /sbine/usr/sbin
Garrett

Respostas:

85

A diferença entre "-" e "sem hífen" é que o último mantém seu ambiente existente (variáveis, etc); o primeiro cria um novo ambiente (com as configurações do usuário real, não a sua).

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

O hífen tem dois efeitos:

1) alterna do diretório atual para o diretório inicial do novo usuário (por exemplo, para / root no caso do usuário root) efetuando login como esse usuário

2) altera as variáveis ​​ambientais para as do novo usuário, conforme determinado por ~ / .bashrc. Ou seja, se o primeiro argumento para su for um hífen, o diretório e o ambiente atuais serão alterados para o que seria esperado se o novo usuário realmente tivesse feito logon em uma nova sessão (em vez de apenas assumir uma sessão existente).

paulsm4
fonte
este site -> admon.org/difference-between-login-shell-and-non-login-shell diz que quando usado sem o hífen, os arquivos / etc / profile e ~ / .bash_profile não são executados. Qual o significado desses dois arquivos no ambiente do usuário?
user574183
2
Essas duas coisas são os arquivos que definem o ambiente do usuário :) Não executá-los significa manter o ambiente original. Executá-los (usando "-") significa tornar seu ambiente igual ao usuário ao qual você está "su'ing". Usar o hífen geralmente é o que você deseja - eu uso "-" habitualmente sempre que "su".
paulsm4
a ordem de execução realmente importa? Estou perguntando isso porque nesse site eles mencionaram que os dois arquivos / etc / bashrc ~ / .bashrc são executados na ordem inversa quando em um shell que não é de login. Alguém por favor me ajude
user574183
1
@ user574183 é claro, por exemplo, se um conjunto algo, mas o outro unset algo ou definido para outra coisa
fikr4n
3

su -inicia um shell de logon para root. Para as diferenças em relação a um shell normal, consulte este site por exemplo.

Lars Kotthoff
fonte
2
Isso é verdade, mas não é a questão :)
paulsm4
Isso está incorreto, você pode executar su com um traço e iniciar um shell para um usuário diferente. Execute o seguinte e ver a saídasudo su - "testuser" -c "whoami"
David Hergert
@DavidHergert Sim, e sem um nome de usuário, ele abre um shell para o root.
Lars Kotthoff
@LarsKotthoff - ok, desculpe, a maneira como foi redigida soou como se o traço fosse o que o torna um shell raiz, não o fato de deixar de fora o padrão de usuário para o root. Até a minha residente local, SA, me confundiu. :)
David Hergert