Чому так, що коли я перемикаю користувача, 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
параметру."