`хто я` після` su` не показує новий ідентифікатор користувача?


9

Чому так, що коли я перемикаю користувача, su <username>а потім виконую who am i, виводить попередній користувач, на який я був зареєстрований, а не той, на який я перейшов?

Відповіді:


13

Ви, ймовірно, виконуєте неправильну команду.

  • 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для отримання більш детальної інформації.


2
Два аргументи amі iне ігноруються, вони навіть визначені POSIX: "У локалі POSIX обмежте вихід на опис користувача, що викликає, еквівалентному -mпараметру."
xhienne

3

Згідно з моєю сторінкою Ubuntu 12.04.2 для команди "хто", "хто я" (або хто з будь-якими двома аргументами) - це те саме, що "хто -m", і має дати вам ім'я хоста та користувача, пов'язані зі STDIN. Однак я не отримую результатів із "хто я". Або сторінка man неправильна, або в команді є помилка. Незалежно від того, як раніше відповів ckhan, команда 'whoami' дасть вам ім’я користувача для вашого ефективного ідентифікатора користувача. Принаймні, в Ubuntu 12.04.2 ніхто із id, "хто я" чи "whoami" не дасть вам лише ім'я користувача, який увійшов у поточний термінал. Як вирішення, ви могли б отримати це за допомогою:

who | sed 's/ .*//'

Зауважте, що це специфічно для Linux. Це повертає початкове ім'я користувача в Unix / SunOS.
Підземний

3

Обхід :

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, оскільки імена користувачів можуть містити пробіли в деяких рідкісних випадках.
wjandrea
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.