Qual è la differenza tra "su" con e senza trattino?


88

Sono abbastanza nuovo al terminale Linux e io non sono abbastanza sicuro che cosa la differenza tra sucon un trattino e susenza trattino è, per esempio: su - usernamecontro su username.

Ho esaminato la documentazione ma qui non è stato menzionato. Per favore qualcuno potrebbe aiutarmi?


una "shell di login" spesso significa shell interattiva. Questo è contro una shell che esegue solo uno script ed esce.
Shahbaz,

6
È proprio lì nella stessa manpage a cui ti colleghi : " -, -l, --login: trasforma la shell in una shell di login "
ArjunShankar,

1
non devi nemmeno cercarlo su Google, basta digitare su --help.
Art Shayderov,

1
Degno di nota: questo è particolarmente utile quando si fa causa a root poiché senza utilizzare l'hypen per avviare una nuova shell di accesso, $PATHnon si verrà aggiornati e quindi non sarà possibile chiamare direttamente i binari solo root in /sbine/usr/sbin
Garrett

Risposte:


86

La differenza tra "-" e "nessun trattino" è che quest'ultimo mantiene l'ambiente esistente (variabili, ecc.); il primo crea un nuovo ambiente (con le impostazioni dell'utente reale, non il tuo).

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

Il trattino ha due effetti:

1) passa dalla directory corrente alla home directory del nuovo utente (ad es. A / root nel caso dell'utente root) accedendo come tale utente

2) cambia le variabili ambientali in quelle del nuovo utente come dettate dal loro ~ / .bashrc. Vale a dire, se il primo argomento su su è un trattino, la directory e l'ambiente correnti verranno cambiati in quello che ci si aspetterebbe se il nuovo utente avesse effettivamente effettuato l'accesso a una nuova sessione (anziché occuparsi solo di una sessione esistente).


questo sito -> admon.org/difference-between-login-shell-and-non-login-shell dice che se usati senza il trattino i file / etc / profile e ~ / .bash_profile non vengono eseguiti. Che significato hanno questi due file nell'ambiente utente?
user574183,

2
Queste due cose sono i file che impostano l'ambiente dell'utente :) Non eseguirli significa mantenere l'ambiente originale. Eseguirli (usando "-") significa rendere il tuo ambiente uguale all'utente a cui stai "facendo richiesta". Usare il trattino è di solito quello che vuoi - io uso "-" abitualmente ogni volta che "su".
paulsm4,

l'ordine di esecuzione conta davvero? Lo sto chiedendo perché su quel sito hanno menzionato che i due file / etc / bashrc ~ / .bashrc vengono eseguiti in ordine inverso quando si trovano in una shell non di accesso. Qualcuno per favore mi aiuti
user574183

1
@ user574183 ovviamente, ad es. se uno imposta qualcosa ma l'altro disattiva qualcosa o imposta qualcos'altro
fikr4n

3

su -avvia una shell di login per root. Per le differenze con una shell normale, vedi questo sito per esempio.


2
È vero, ma non è la domanda :)
paulsm4,

Questo non è corretto, puoi eseguire su con un trattino e farlo avviare una shell per un altro utente. Eseguire quanto segue e vedere l'outputsudo su - "testuser" -c "whoami"
David Hergert,

@DavidHergert Yep, e senza un nome utente apre una shell per root.
Lars Kotthoff,

@LarsKotthoff - ok, scusa, il modo in cui è stato formulato sembrava che il trattino fosse ciò che lo rende una shell root, non il fatto che lasciare un utente per impostazione predefinita su root. Anche il mio SA residente locale mi ha confuso su questo. :)
David Hergert,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.