Чому так, що коли я перемикаю користувача, 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 для команди "хто", "хто я" (або хто з будь-якими двома аргументами) - це те саме, що "хто -m", і має дати вам ім'я хоста та користувача, пов'язані зі STDIN. Однак я не отримую результатів із "хто я". Або сторінка man неправильна, або в команді є помилка. Незалежно від того, як раніше відповів ckhan, команда 'whoami' дасть вам ім’я користувача для вашого ефективного ідентифікатора користувача. Принаймні, в Ubuntu 12.04.2 ніхто із id, "хто я" чи "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-terminal не додає записи utmp…
statзамість цього: stat -c '%U' "$(tty)"Ви, ймовірно, також не повинні розбирати who am i, оскільки імена користувачів можуть містити пробіли в деяких рідкісних випадках.
amіiне ігноруються, вони навіть визначені POSIX: "У локалі POSIX обмежте вихід на опис користувача, що викликає, еквівалентному-mпараметру."