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?


„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ę).


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ę .


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.