Яка різниця між "су" із дефісом та без нього?


86

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

Я заглянув у документацію, але там про це не згадували. Може хтось, будь ласка, допоможе мені?


"оболонка для входу" часто означає інтерактивну оболонку. Це проти оболонки, яка просто виконує сценарій та виходить.
Шахбаз

6
Це саме там, у тій самій сторінці, на яку ви посилаєтесь : " -, -l, --login: зробіть оболонку оболонкою для входу "
ArjunShankar

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

1
Варто зазначити, що це особливо корисно при використанні корінгів, оскільки без використання гіпена для запуску нової оболонки для входу $PATHне буде оновлено, і, отже, ви не зможете безпосередньо викликати бінарні файли, що мають лише корінь, у/sbin/usr/sbin
Гарретт

Відповіді:


84

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

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 не виконуються. Яке значення мають ці два файли для середовища користувача?
користувач574183

2
Ці дві речі - це файли, які задають середовище користувача :) Не виконувати їх означає зберегти початкове середовище. Виконання їх (використовуючи "-") означає зробити ваше оточення таким же, як користувач, якого ви "суіть". Використовувати дефіс, як правило, те, що ви хочете - я використовую "-" звично, коли я "су".
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.