Я постоянно помещаю код PS1 в bashrc.
Мой код выглядит следующим образом:
export PS1="\[\e[01;37m\][\[\e[0m\]\[\e[01;32m\]\u\[\e[0m\]\[\e[00;37m\]@\[\e[0m\]\[\e[01;34m\]\h\[\e[0m\]\[\e[00;37m\] \[\e[0m\]\[\e[00;37m\]\t\[\e[0m\]\[\e[01;37m\] \W \e[1;37m(\e[1;32m|\e[1;33m|\e[1;31m|\e[1;37m]\\$ \[\e[0m\]"
Я использую другую PS1 для root (/root/.bashrc) - красное имя пользователя, а для производственных и локальных серверов - другой формат.
Смотрите это reddit для классных кодов. Трюк с новой линией действительно полезен!
sudo su -p
сохранит среду вызывающего пользователя, за некоторыми исключениями. Исключения можно найти на справочной страницеsu
, но соответствующая часть —:
-m, -p, --preserve-environment
Preserve the entire environment, i.e. it does not set HOME,
SHELL, USER nor LOGNAME. This option is ignored if the option
--login is specified.
Запустите sudo -l
от имени обычного пользователя, чтобы просмотреть действующие параметры.
Включает ли вывод env_reset
? Если да, то при прохождении sudo
будет сохранен только краткий список безопасных/необходимых переменных окружения. Вы можете использовать ключевые слова env_check
и/или env_keep
в файле sudoers
, чтобы указать переменные среды, которые будут разрешены через sudo
.
Включает ли вывод always_set_home
? Если это так, то переменная среды $HOME
будет указывать на домашний каталог целевого пользователя, то есть /root
в вашем случае. В результате результирующая оболочка будет запускать /root/.bashrc
, а не вашу личную, и аналогичным образом все программы будут искать свои пользовательские -конфигурационные файлы в каталоге /root/
, а не в вашем личном домашнем каталоге.
Если sudo -s
использует корневой .bashrc
, а не ваш личный, то always_set_home
скорее всего действует (или у вас странный дистрибутив с драконовскими модулями PAM или что-то в этом роде ). В этом случае используйте visudo
для редактирования файла sudoers и добавьте одну из следующих строк (восклицательный знак перед названием параметра означает «не»):
Defaults !always_set_home
отключает параметр для всех пользователей. Defaults>root !always_set_home
отключает его для всех переходов к пользователю root, кем бы ни был первоначальный пользователь. Defaults:johndoe !always_set_home
отключает его для переходов, где johndoe
— только исходный пользователь. Порядок имеет значение :Последняя настройка имеет преимущество, поэтому, если в вашем файле sudoers
есть какие-либо существующие Defaults
строки, вы должны добавить свои настройки после них.
А если соединить su
после sudo
, будут применяться собственные правила, которые обычно не настраиваются. Поведение (и даже доступность )su -p
или su -m
различаются в разных дистрибутивах и версиях Linux.
sudo su
означает переключение с вашего обычного пользователя на root, а затем снова с root на root, что максимизирует шансы нарушения тщательно -настроенных настроек персональной среды с небольшой выгодой. С помощью sudo -s
вы можете добиться того же, либо напрямую, либо с некоторой настройкой параметров Defaults
в файле sudoers
, в зависимости от ваших предпочтений и выбора дистрибутива Linux.
sudo su -
, с другой стороны, является устаревшим способом сказать: «Я явно хочу, чтобы среда была такой же, как если бы целевой пользователь (, то есть root ), вошел в систему напрямую; я не хочу, чтобы след моего личного окружения, чтобы остаться в результирующем сеансе». Если у вас есть версия sudo
, выпущенная в этом тысячелетии, вы можете вместо этого использовать sudo -i
.
В 2010-х единственными причинами использования sudo su
или sudo su -
, вероятно, были мышечная память, следование устаревшим советам или работа с действительно старыми системами.Вероятно, вам следует разучить эти две команды.