«Другой» палец (поля GECOS в /etc/passwd)

«Другой» палец (поля GECOS в /etc/passwd)

В файле /etc/passwdу нас есть так называемая GECOS fields(что расшифровывается как «General Electric Comprehensive Operating System»), а именно:

username:password:userid:groupid:gecos:home-dir:shell 

Где GECOSделятся как:

:FullName,RoomAddress,WorkPhone,HomePhone,Others:

И Othersразделены любым количеством запятых:

:FullName,RoomAddress,WorkPhone,HomePhone,Other1,Other2,Other3:

На man chfnстраницах можно прочитать:

Другое поле используется для хранения учетной информации, используемой другими приложениями.

Теперь, для разработчика приложений (меня интересует C language, system callsи/или bash script) какой лучший способ получить эту информацию?

И учитывая только Bashсреду, учитывая, что эта fingerкоманда не может отображать othersполя (или, по крайней мере, я не вижу, как), какие еще команды могут? Я знаю, что chfnне только показывают, но и позволяют их изменять. А что, если просто вывести это в stdout?

решение1

Лучший способ, который я нашел, это использовать , getentпотому что он будет работать с LDAP/NIS или другими методами нелокальных пользователей

getent passwd $UID| awk -F ":" '{print $5}'

решение2

Например, в скрипте bash вы можете вывести пятое поле файла /etc/passwdс помощью awk/gawk:

awk -F ":" '{print $5}' /etc/passwd

Опция -F fsиспользует fs для разделителя полей ввода (в данном случае :).
Подробнее можно прочитать, например, на домашней странице GNU awk [1] .
В Awk есть функция split()для разделения строки (где в этом случае вы будете использовать 5-е поле как строку и ,как разделитель). Черпайте вдохновение из какого-нибудь другого ответа об этом [2]... .

решение3

Вы можете просто использовать две вложенные команды вырезания:

  • сначала с ":" в качестве разделителя полей, вырезать поля 1 и 5; и
  • во-вторых, с разделителем полей "," вырезаем поля 1 и 5-N;

Связанный контент