В чем разница между su и su- в Linux?

Как удалить каталог в Linux Изучение

Разница между su и su — командами с дефисом заключается в том, что команда su без аргументов сохраняет почти все переменные среды, принадлежащие исходному пользователю. Напротив, команда su через дефис очищает большинство переменных среды.

Мы говорим не о двух разных командах, а о команде без определенного флага (дефис — это флаг) и той же команде с флагом.

Набрать su — это то же самое, что ввести su -l; обе команды очистят большинство переменных среды. Таким образом, прежде чем продолжить эту статью, давайте посмотрим, что такое переменная среды.

Переменные среды в Linux

Переменные среды — это значения, используемые для определения характеристик среды, в которой выполняются процессы оболочки и их дочерние процессы, например, процессы используют переменную среды $ SHELL, чтобы узнать используемую оболочку ( Bash, Zsh и т.д.).

В системе много переменных; в этой статье мы сосредоточимся на тех переменных, на которые влияет команда su.

Чтобы увидеть все переменные в вашей системе, вы можете запустить команду экспорта, как показано ниже.

export

Чтобы увидеть все переменные в вашей системе

Как вы видите на скриншоте выше, в нашей системе много переменных. Мы сосредоточимся на конкретных переменных HOME, SHELL, USER, LOGNAME и PATH.

Первая переменная, которую мы увидим, — это PATH. Значения этой переменной среды полезны для системы, чтобы знать, где найти команды или программы для выполнения. Системная переменная среды PATH по умолчанию определена в файле / etc / profile. Переменные PATH пользователей находятся в их домашних каталогах в ~ /.profile.

Чтобы узнать значения переменных среды PATH, вы можете использовать команду echo, за которой следует символ $ и переменная среды, которую вы хотите проверить, в данном случае PATH, как показано в примере ниже.

echo $PATH

Как видите, система возвращает определенные переменные среды, чтобы наша система знала, где искать и находить команды, которые мы хотим выполнить.

Вторая переменная среды, описанная в этой статье, — это переменная SHELL. Значение этой переменной сообщает системе, какую оболочку мы используем, если Bash, Zsh, Ksh и т.д.

Читайте также:  6 основных технологических тенденций в 2021 году

Чтобы увидеть значение переменной среды SHELL, повторите описанный ранее шаг, заменив $ PATH на $ SHELL, как показано на снимке экрана ниже.

echo $SHELL

Как видите, оболочка — это Bash. Вот как наша система узнает, какую оболочку мы используем, с указанным выше значением.

Еще одна важная переменная среды в Linux — это $ HOME. Это значение указывает домашний каталог пользователя. Чтобы узнать это значение, вы можете запустить команду ниже.

echo $HOME

Значение переменной окружения $ LOGNAME — это пользователь, под которым вы вошли в систему.

echo $LOGNAME

Значение переменной среды $ USER — это идентификатор пользователя, который совпадает с $ LOGNAME.

echo $USER

Переменные среды, описанные выше, затрагиваются командой su при добавлении дефиса или флага -l.

Разница между командами «su» и «su -»

Разница между командой su без флагов и su с дефисом или -l заключается в том, что команда без флагов сохраняет переменные среды и изменяет только пользователя.

При использовании с дефисами или флагом -l большинство переменных среды очищаются.

В следующем примере показано, как пользователь linuxhint переключается на root с помощью su без параметров.

Затем, после проверки переменной окружения $ LOGNAME, мы видим, что она остается как linuxhint, а не root.

su

echo $LOGNAME

В отличие от предыдущего примера, если используется дефис, он будет обновлен до корневого при проверке переменной $ LOGNAME.

su —

echo $LOGNAME

Давайте попробуем то же самое с переменной окружения $ USER.

su

echo $USER

Как видите, при выполнении su как linuxhint для перехода на root и проверке переменной $ USER он остается как linuxhint.

В отличие от предыдущего примера, при использовании дефиса переменная $ USER будет очищена и обновлена, как показано ниже.

su —

echo $USER

В завершение этого урока последний пример показывает, что флаг -l действует точно так же, как дефис.

su -l

echo $LOGNAME

echo $USER

Вывод

Переменные среды — это базовая концепция, которую должен знать любой пользователь Linux. Как только вы поймете их функцию, вы легко сможете понять разницу между командой su без флага -l и с флагом -l (то же самое, что и su с дефисом ). Надеюсь, эта статья, показывающая разницу между » su » и » su — «, была полезной.

Оцените статью
bestprogrammer.ru
Добавить комментарий