Разница между 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 и т.д.
Чтобы увидеть значение переменной среды 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 — «, была полезной.