Кроме того, будут ли эти переменные всегда соответствовать текущему имени пользователя, вошедшего в систему (они соответствуют моей системе Debian)? Могу ли я предположить их доступность в других Unix-подобных системах?
Мне также любопытно, почему можно было бы whoamiвместо того, чтобы просто читать любую из этих переменных.
USERи USERNAMEявляются обычными переменными среды, что означает, что, если вы хотите, вы можете установить для них произвольные значения Просто введите USER=xyz. Другими словами, даже если эти переменные существуют, нет гарантии, что их значения соответствуют текущему зарегистрированному имени пользователя.
guarantee, я имел в виду по умолчанию (т.е. предполагая, что пользователь не изменил их).
sudo whoamiиsudo echo $USER
sudo echo $USERоболочка расширяется $USER, затем вызывает sudo. Так что, конечно, он не выдает такой же результат, как whoami. Как sudo whoami, sudo sh -c 'echo $USER'делает (обычно) выход root. Что касается вашего комментария об whoamiиспользовании EUID , обратите внимание, что sudo whoamiбудет выводиться, rootдаже если whoamiиспользуется UID. sudoнаборы как EUID и UID для команды он работает ( за исключением очень необычной ситуации , что вы явно настроить его вести себя иначе). Сравните sudo id -uс sudo id -ru.
manстраницу,whoamiвыдает имя, связанное с вашим эффективным идентификатором пользователя. Это означает, что он вернет что-то другое, если вы используетеsudoили запускаете исполняемый файл setuid. Если выsudoнастроили, попробуйте,sudo whoamiнапример.