'кто я' после 'su' не показывающий новый идентификатор пользователя?

Я записал функцию pvim который делает то, что Вы хотите. Если несколько строк передаются по каналу к pvim это игнорирует все кроме первого, это могло быть расширено, хотя открыть несколько файлов в энергии.

stu@sente ~ $ function pvim() { read -r somefile; exec < /dev/fd/1; vim "$somefile"; }
stu@sente ~ $ type pvim
pvim is a function
pvim ()
{
    read -r somefile;
    exec < /dev/fd/1;
    vi "$somefile"
}

Используйте его как:

stu@sente ~ $ find . -name "foo.txt" | pvim

который загрузит первый "foo.txt" в энергию так же, как если бы Вы ввели:

vim $(find . -name "foo.txt | head -n1")

9
20.08.2017, 22:59
4 ответа

Вы, вероятно, выполняете неправильную команду.

  • 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 для получения дополнительной информации.

13
27.01.2020, 20:05
  • 1
    Эти два аргумента am и i не проигнорированы, они даже указаны POSIX: "В локали POSIX ограничьте вывод описанием пользователя вызова, эквивалентного -m опция". –  xhienne 20.08.2017, 22:53

На мою страницу справочника Ubuntu 12.04.2 для, 'кто' управляет, 'кто я' (или кто с любыми двумя аргументами) совпадает с, 'кто-m' и должен дать Вам имя хоста и пользователя, связанного с STDIN. Однако я не получаю вывода с, 'кто я'. Или страница справочника является неправильной или команда, имеет ошибку. Независимо, как ранее отвечено ckhan, команда 'whoami' даст Вам имя пользователя для Вашего эффективного идентификатора пользователя. По крайней мере, в Ubuntu 12.04.2, ни один из идентификатора, 'то, кто я' или 'whoami', даст Вам просто имя пользователя человека, не вошел в систему на текущем терминале. Как обходное решение Вы могли получить это с:

who | sed 's/ .*//'
3
27.01.2020, 20:05
  • 1
    Обратите внимание, что это - конкретный Linux. Это возвращает исходное имя пользователя в Unix / SunOS. –  Underverse 09.11.2015, 01:16

Обходной путь:

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 из гнома -терминал (тот же компьютер, те же команды)

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…

3
27.01.2020, 20:05

В моем случае пользовательская оболочка была /bin/falseв /etc/passwd, поэтому su не возвращала ошибку. Другими словами, su somebodyзавершился без ошибок, и я все еще был пользователем root, а не кем-то еще.

Решение было su somebody -s /bin/bashили любой другой оболочкой, которую вы хотите. И тогда, очевидно, whoamiработает так, как ожидалось.

1
04.11.2021, 04:43

Теги

Похожие вопросы