Почему, когда я переключаю пользователя, su <username>
а затем выполняю who am i
, выводится предыдущий пользователь, на которого я вошел, а не тот, на которого я переключился?
Почему, когда я переключаю пользователя, su <username>
а затем выполняю who am i
, выводится предыдущий пользователь, на которого я вошел, а не тот, на которого я переключился?
Ответы:
Вы, вероятно, запускаете неправильную команду.
who
предназначен для того, чтобы показать, кто вошел в систему, т.е. какой пользователь владеет терминалом. Это возвращает строку как это:
ckhan pts/1 2012-11-05 03:06 (c-21-13-25-10.ddw.ca.isp.net)
whoami
это значит показать вам, каков эффективный идентификатор пользователя, который его запускает. Он возвращает только одно имя, как это (и эквивалентно выполнению id -un
):
ckhan
Я думаю, что вы, возможно, буквально набрали who am i
в терминале, который работал who
с двумя игнорируемыми аргументами ( am
, i
).
Смотрите man who
и man whoami
для более подробной информации.
На моей странице справки по Ubuntu 12.04.2 команда 'who', who is i (или who с любыми двумя аргументами) совпадает с 'who -m' и должна дать вам имя хоста и пользователя, связанные с STDIN. Однако я не получаю вывод с «кто я». Либо страница руководства неверна, либо в команде есть ошибка. Независимо от того, как ранее ответил ckhan, команда 'whoami' даст вам имя пользователя для вашего эффективного идентификатора пользователя. По крайней мере, в Ubuntu 12.04.2 ни один из идентификаторов, «кто я» или «whoami» не даст вам только имя пользователя, вошедшего в систему на текущем терминале. В качестве обходного пути вы можете получить это с:
who | sed 's/ .*//'
Обходной путь :
ls -l `tty` | awk '{print $3}'
это работает как замена от who am i | awk '{print $1}'
. Объяснение ниже:
Во многих системах " who am i
" эквивалентно " who -m
". Проблема здесь в том, что с некоторыми терминалами " who -m
" ничего не возвращает!
Пример # 1 запускается с терминала xfce4
Pegasus ~ # whoami
root
Pegasus ~ # who am i
thomas pts/1 2017-08-19 11:15 (:0.0)
Pegasus ~ # who -m
thomas pts/1 2017-08-19 11:15 (:0.0)
Pegasus ~ # who
thomas tty8 2017-08-19 10:18 (:0)
thomas pts/1 2017-08-19 11:15 (:0.0)
thomas pts/5 2017-08-19 16:16 (:0.0)
Pegasus ~ # who am i | awk '{print $1}'
thomas
Pegasus ~ #
но пример №2 с терминала gnome (тот же компьютер, те же команды)
Pegasus ~ # whoami
root
Pegasus ~ # who am i
Pegasus ~ # who -m
Pegasus ~ # who
thomas tty8 2017-08-19 10:18 (:0)
thomas pts/1 2017-08-19 11:15 (:0.0)
thomas pts/5 2017-08-19 16:16 (:0.0)
Pegasus ~ #
Похоже, это следствие того, что gnome-терминал не добавляет записи utmp…
stat
вместо этого: stat -c '%U' "$(tty)"
вы, вероятно, не должны анализировать who am i
либо, так как имена пользователей могут содержать пробелы в некоторых редких случаях.
am
иi
не игнорируются, они даже указаны POSIX: «В локали POSIX, ограничить выход для описания вызывающего пользователя, что эквивалентно-m
выбору.»