Почему, когда я переключаю пользователя, su <username>
а затем выполняю who am i
, выводится предыдущий пользователь, на которого я вошел, а не тот, на которого я переключился?
9
Вы, вероятно, запускаете неправильную команду.
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
для более подробной информации.
am
иi
не игнорируются, они даже указаны POSIX: «В локали POSIX, ограничить выход для описания вызывающего пользователя, что эквивалентно-m
выбору.»На моей странице справки по Ubuntu 12.04.2 команда 'who', who is i (или who с любыми двумя аргументами) совпадает с 'who -m' и должна дать вам имя хоста и пользователя, связанные с STDIN. Однако я не получаю вывод с «кто я». Либо страница руководства неверна, либо в команде есть ошибка. Независимо от того, как ранее ответил ckhan, команда 'whoami' даст вам имя пользователя для вашего эффективного идентификатора пользователя. По крайней мере, в Ubuntu 12.04.2 ни один из идентификаторов, «кто я» или «whoami» не даст вам только имя пользователя, вошедшего в систему на текущем терминале. В качестве обходного пути вы можете получить это с:
источник
Обходной путь :
это работает как замена от
who am i | awk '{print $1}'
. Объяснение ниже:Во многих системах "
who am i
" эквивалентно "who -m
". Проблема здесь в том, что с некоторыми терминалами "who -m
" ничего не возвращает!Пример # 1 запускается с терминала xfce4
но пример №2 с терминала gnome (тот же компьютер, те же команды)
Похоже, это следствие того, что gnome-терминал не добавляет записи utmp…
источник
stat
вместо этого:stat -c '%U' "$(tty)"
вы, вероятно, не должны анализироватьwho am i
либо, так как имена пользователей могут содержать пробелы в некоторых редких случаях.