В чем разница между «су» с дефисом и без него?


88

Я совершенно новый для терминала Linux , и я не совсем уверен , что разница между suдефисом и suбез дефиса, например: su - usernameпротив прогноза su username.

Я посмотрел в документации, но там, это не было упомянуто. Может ли кто-нибудь помочь мне?


«оболочка входа» часто означает интерактивную оболочку. Это против оболочки, которая просто выполняет скрипт и завершает работу.
Шахбаз

6
Это прямо там, на той же man- странице, на которую вы ссылаетесь : " -, -l, --login: сделать оболочку оболочкой для входа в систему "
ArjunShankar

1
вам даже не нужно гуглить, просто введите su --help.
Арт Шайдеров

1
Примечательно: это особенно полезно, когда вы используете root, так как без использования hypen для запуска новой оболочки входа вы $PATHне будете обновляться, и, следовательно, вы не сможете напрямую вызывать двоичные файлы только для root /sbinи/usr/sbin
Garrett.

Ответы:


86

Разница между «-» и «без дефиса» заключается в том, что последний сохраняет существующую среду (переменные и т. Д.); первый создает новую среду (с настройками реального пользователя, а не ваших собственных).

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

Дефис имеет два эффекта:

1) переключается из текущего каталога в домашний каталог нового пользователя (например, в / root в случае пользователя root), войдя в систему как этот пользователь

2) изменяет переменные окружения на переменные нового пользователя в соответствии с их ~ / .bashrc. То есть, если первым аргументом su является дефис, текущий каталог и среда будут изменены на ожидаемые, если новый пользователь фактически вошел в новый сеанс (а не просто принял существующий сеанс).


этот сайт -> admon.org/difference-between-login-shell-and-non-login-shell говорит, что при использовании без дефиса файлы / etc / profile и ~ / .bash_profile не выполняются. Какое значение имеют эти два файла для пользовательской среды?
user574183

2
Эти две вещи являются файлами, которые устанавливают пользовательскую среду :). Не выполнять их означает сохранить исходную среду. Выполнение их (с помощью «-») означает создание вашей среды такой же, как и у пользователя, с которым вы «судите». Использование дефиса обычно то, что вы хотите - я использую "-" обычно всякий раз, когда я "su".
paulsm4

порядок исполнения действительно имеет значение? Я спрашиваю об этом, потому что на этом сайте они упомянули, что два файла / etc / bashrc ~ / .bashrc выполняются в обратном порядке, когда они не входят в оболочку. Кто-нибудь, пожалуйста, помогите мне
user574183

1
@ user574183 конечно, например, если один установил что-то, а другой сбросил что-то или установил что-то другое
fikr4n

3

su -запускает оболочку входа в систему для root. Отличие от обычной оболочки смотрите на этом сайте, например.


2
Это правда, но это не вопрос :)
paulsm4

Это неверно, вы можете запустить su с дефисом и запустить оболочку для другого пользователя. Выполните следующее и посмотрите выводsudo su - "testuser" -c "whoami"
Дэвид Хергерт

@DavidHergert Да, и без имени пользователя он открывает оболочку для root.
Ларс Котхофф

@LarsKotthoff - хорошо, извините, то, как оно было сформулировано, звучало так, будто черта - это то, что делает его корневой оболочкой, а не то, что при отключении пользователя по умолчанию используется root. Даже мой местный житель SA запутал меня в этом. :)
Дэвид Хергерт
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.