Jaka jest różnica między „su” z łącznikiem i bez łącznika?

86

Jestem zupełnie nowy w terminalu Linux i nie jestem pewien, co różnica między sułącznikiem i subez łącznika jest, na przykład: su - usernamewersetach su username.

Przejrzałem dokumentację, ale tam nie wspomniano o niej. Czy ktoś mógłby mi pomóc?

użytkownik574183
źródło
„powłoka logowania” często oznacza powłokę interaktywną. Jest to vs powłoka, która po prostu wykonuje skrypt i kończy działanie.
Shahbaz
6
Jest tam, na tej samej stronie, do której prowadzi link : „ -, -l, --login:
ustaw
1
nawet nie musisz google, po prostu wpisz su --help.
Art Shayderov
1
Co warte podkreślenia: jest to szczególnie przydatne, gdy starasz się o rootowanie, ponieważ bez użycia łącznika do uruchomienia nowej powłoki logowania, twoja $PATHaktualizacja nie zostanie zaktualizowana, a zatem nie będziesz mógł bezpośrednio wywoływać plików binarnych tylko do roota /sbini/usr/sbin
Garrett

Odpowiedzi:

84

Różnica między „-” a „bez łącznika” polega na tym, że ten drugi utrzymuje istniejące środowisko (zmienne itp.); ten pierwszy tworzy nowe środowisko (z ustawieniami faktycznego użytkownika, a nie własnego).

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

Łącznik ma dwa efekty:

1) przełącza się z bieżącego katalogu na katalog domowy nowego użytkownika (np. Do / root w przypadku użytkownika root), logując się jako ten użytkownik

2) zmienia zmienne środowiskowe na zmienne nowego użytkownika zgodnie z ich ~ / .bashrc. Oznacza to, że jeśli pierwszym argumentem su jest łącznik, bieżący katalog i środowisko zostaną zmienione na oczekiwane, gdyby nowy użytkownik faktycznie zalogował się do nowej sesji (zamiast przejmować istniejącą sesję).

paulsm4
źródło
ta strona -> admon.org/difference-between-login-shell-and-non-login-shell mówi, że przy użyciu bez łącznika pliki / etc / profile i ~ / .bash_profile nie są wykonywane. Jakie znaczenie mają te dwa pliki w środowisku użytkownika?
user574183,
2
Te dwie rzeczy to pliki, które ustawiają środowisko użytkownika :) Brak ich wykonania oznacza zachowanie oryginalnego środowiska. Wykonując je (za pomocą „-”) oznacza, czyniąc swoje otoczenie tak samo jak użytkownik jesteś „su'ing” do. Używanie łącznika jest zwykle tym, czego chcesz - używam „-” zwykle, gdy „su”.
paulsm4
czy kolejność wykonania naprawdę ma znaczenie? Pytam o to, ponieważ na tej stronie wspomniano, że dwa pliki / etc / bashrc ~ / .bashrc są wykonywane w odwrotnej kolejności, gdy są w powłoce innej niż login.
Niech
1
@ user574183 oczywiście, np. jeśli jeden ustawi coś, a drugi rozłącza coś lub ustawia na coś innego
fikr4n
3

su -uruchamia powłokę logowania dla roota. Aby zobaczyć różnice w stosunku do zwykłej powłoki, zobacz na przykład tę stronę .

Lars Kotthoff
źródło
2
To prawda, ale nie o to chodzi :)
paulsm4
To niepoprawne, możesz uruchomić su z myślnikiem i uruchomić powłokę dla innego użytkownika. Wykonaj następujące czynności i zobacz wyniksudo su - "testuser" -c "whoami"
David Hergert
@DavidHergert Tak, i bez nazwy użytkownika otwiera powłokę dla roota.
Lars Kotthoff,
@LarsKotthoff - ok, przepraszam, sposób, w jaki został sformułowany, brzmiał tak, jakby kreska była tym, co czyni go powłoką root, a nie faktem, że pominięcie użytkownika domyślnie rootuje. Nawet mój lokalny mieszkaniec SA pomylił mnie w tej sprawie. :)
David Hergert