Различные выходы для `w`,` who`, `whoami` и` id`

9

На онлайн-платформах командной строки, как, например, на Codecademy, когда я запускаю

for cmd in w who whoami id
do
    echo $cmd
    $cmd
    echo =========================
    echo "             "
done

я получил

w                              
00:52:54 up 8 days, 14:10,  0 users,  load average: 3.78, 2.98, 2.69      
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT       
=========================                            

who
=========================                                                 

whoami                          
ccuser                          
=========================                              
  
id
uid=1000(ccuser) gid=1000(ccuser) groups=1000(ccuser)     
=========================                   

Обратите внимание, что только whoamiи idвыводить что-то. Когда я запускаю одно и то же на своем компьютере, я вижу похожие результаты для всех команд.

Почему Codecademy не отображает пользователя для wи who? Чем отличаются эти команды?

кто я
источник

Ответы:

13
  • id отчеты
    • текущие полномочия своего собственного процесса; или
    • учетные данные именованного пользователя, считанные из базы данных системной учетной записи .
  • whoami сообщает текущие учетные данные своего собственного процесса.
  • whoи wсообщить таблицу активных сеансов входа в систему из базы данных входа .

BSD doco отмечает, что whoamiвыполняет часть работы idи idделает ее устаревшей.

Система не должна иметь таблицу активных сеансов входа в систему. В операционных системах Linux и на BSD, если таблица не была создана при начальной загрузке или с тех пор была удалена, система будет работать без таковой. Более того, вход в систему и выход из нее не создает ее в операционных системах Linux.

Кроме того, таблица не должна быть доступна для чтения непривилегированным пользователям, и ни команда, whoни wкоманда не сообщат об этом как об ошибке.

дальнейшее чтение

JdeBP
источник