Есть ли способ увидеть переменную окружения другого пользователя? Я хочу сделать это как root, так что разрешения не будут проблемой, я думаю.
Для самого пользователя я использую echo $PATH
или set | grep PATH
(или set
когда я не помню имя переменной). Какова будет аналогичная инструкция для другого пользователя?
Для чего это стоит, я на Ubuntu Server 13.04.
echo $MAIL
, но я подумал, что может быть ярлык..forward
)? Пользователи часто устанавливают несколько переменных в своих.profile
или других файлах конфигурации, и нет способа надежно перечислить их все. Опять же, какую проблему вы пытаетесь решить?Ответы:
Другим вариантом является использование
env
. Запустите это какroot
:Например
источник
HOME=/root
. Это домашний каталог root, но это не мой стандартный домашний каталог. Если вы хотите знать среду, которую конкретный пользователь получит при входе в систему, вы должны запустить сценарии запуска оболочки входа этого конкретного пользователя (и помните, что его оболочка входа может отличаться от вашей оболочки входа).root
из менеджера входа? Работает нормально, если я захожу на tty и захожу какroot
.env | grep HOME
и получаюHOME=/home/uwe
; Я выполняю,su
а затем еще разenv | grep HOME
и получаюHOME=/root
, затем я бегуsudo -u uwe env | grep HOME
и все еще получаюHOME=/root
.xterm
вместо моего обычного терминала) и получил ожидаемый результат.sudo
устанавливает переменную HOME только в том случае, если-H
опция присутствует или если установлена соответствующая запись в/etc/sudoers
. Кажется, что наши файлы sudoers отличаются. Во всяком случае, это, вероятно, хорошая идея, чтобы использовать-H
здесь, и, возможно, также-i
.Для одного пользователя вы можете сделать так:
Список $ PATH всех пользователей:
@Camil Staps
. ~/.profile
Таким образом, уловка, которую я учу у моего любимого человека, Петерис Круминьш. Он объяснил трюк здесь . Может быть, позже у версии bash была возможность сборкиNON_INTERACTIVE_LOGIN_SHELLS
.источник
$PATH
этого также работает без. ~/.profile;
части - для чего это?$PATH
даже без использования источников~/.profile
, но это почти наверняка не то, что вам нужно (= значение, которое этот пользователь увидит при входе в систему). Даже поиск~/.profile
не полностью надежен, так как пользователь может использовать оболочку, чей файл запуска отличается от~/.profile
.~/.profile
. Но в любом случае поведениеsudo
может быть настроено довольно сильно/etc/sudoers
(см. Мое обсуждение с terdon), поэтому, когда наши системы ведут себя по-разному, это, вероятно, вызвано различиями в файлах конфигурации.Из root вы можете
su -
перейти к пользователю, а затем выполнить grep для переменной среды, которую хотите увидеть:su - <username> -c 'echo $PATH'
источник
runuser -l <username> -c "env | grep <var>" | cut -d '=' -f 2
отлично работает для меня. Если вы не root, нужно поставить префикс команды сsudo
.