Кто устанавливает переменные среды $USER и $USERNAME?

У Вас есть ответ на связанном ТАК вопрос, на который указывает jw013, для extX, на размонтированном диске:

# Update ctime
debugfs -w -R 'set_inode_field /tmp/foo ctime 201001010101' /dev/sda1

# Drop vm cache so ctime update is reflected
echo 2 > /proc/sys/vm/drop_caches
36
26.05.2014, 13:03
3 ответа

Это - вход в систему.

Вход в систему Linux (1) страница справочника говорит:

Значение за $HOME, $USER, $SHELL, $PATH, $LOGNAME и $MAIL установлено согласно соответствующим полям во вводе пароля.

Вход в систему FreeBSD (1) страница справочника говорит:

Утилита входа в систему вводит информацию в среду (см., окружают (7)), определение корневого каталога пользователя (ДОМОЙ), интерпретатор команд (SHELL), путь поиска (ПУТЬ), терминальный тип (ТЕРМИН) и имя пользователя (и LOGNAME и ПОЛЬЗОВАТЕЛЬ).

NetBSD, OpenBSD и страницы справочника OS X заявляют то же самое.

Вот исходный код от входа в систему util-linux:

setenv("HOME", pwd->pw_dir, 0); /* legal to override */
setenv("USER", pwd->pw_name, 1);
setenv("SHELL", pwd->pw_shell, 1);
/* ... */
setenv("LOGNAME", pwd->pw_name, 1);

Вот исходный код от входа в систему FreeBSD:

(void)setenv("LOGNAME", username, 1);
(void)setenv("USER", username, 1);
(void)setenv("PATH", rootlogin ? _PATH_STDPATH : _PATH_DEFPATH, 0);
31
27.01.2020, 19:36
  • 1
    На моем поле Fedora 16 у меня есть оба USER и USERNAME набор и Ваша команда только возвращаются LOGNAME. –  Joseph R. 19.05.2013, 14:50
  • 2
    @JosephR., к сожалению, у меня нет Fedora на руках, но я изучил источники FreeBSD также, см. UPD.. –  poige 19.05.2013, 15:43
  • 3
    Но это - очевидно, не случай на Fedora. Все, что я говорю, login кажется, не единственная вещь, устанавливающая эти переменные. –  Joseph R. 19.05.2013, 17:10
  • 4
    Обратите внимание, что Linux является просто ядром, он не имеет a login команда. Ose, которые используют Linux в качестве их ядра, свободны использовать любую реализацию, которую они любят. Например, Debian базировался, системы имеют тенденцию использовать ту от тени-utils, не util-linux. –  Stéphane Chazelas 07.01.2017, 11:34
  • 5
    Отметьте это login часто не вызывается при входе в систему ssh или большинством графических менеджеров по входу в систему. –  Stéphane Chazelas 07.01.2017, 11:35

Нет никакого правила. Некоторые оболочки как tcsh или zsh набор $LOGNAME. zsh наборы $USER.

Это может быть установлено некоторыми вещами, которые регистрируют Вас в подобном login (как вызвано getty когда вход в систему на терминале и иногда другими вещами как in.rlogind), cron, su, sudo, sshd, rshd, графические менеджеры по входу в систему или не могут.

Если был вход в систему хотя, по моему опыту, $USER обычно устанавливается (но это не может быть обновлено после изменения идентификатора пользователя (через команды setuid) в рамках той сессии входа в систему. POSIX требует этого $LOGNAME будьте установлены после входа в систему (и cron).

Для получения имени для входа в систему портативно, лучше всего должен использовать logname команда (если не было никакого входа в систему, она ничего не может возвратить). Для получения идентификатора пользователя использовать id -u. Получить одно имя пользователя, соответствующее текущему эффективному идентификатору пользователя: id -un. Для получения всех их (большую часть времени существует только одно имя пользователя на идентификатор пользователя, но это не гарантируется):

perl -le 'while ($n = getpwent()) {print $n if getpwnam($n) == $>}'

Хотя это не может работать над системами, где пользовательская база данных не может быть перечислена (как это иногда происходит с сетевыми пользовательскими базами данных, например).

12
27.01.2020, 19:36

Если вы хотите использовать переменные среды (вместо whoamiили getpwentиgetpwnam)и не уверены, всегда ли они установлены одинаково во всех *системах NIX, попробуйте это в баш:

THIS_USER=${USER:-${USERNAME:-${LOGNAME}}}
echo ${THIS_USER}

Если после всего этого он по-прежнему пуст, то вы находитесь в довольно эзотерической системе. ;)

4
27.01.2020, 19:36

Теги

Похожие вопросы