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

В файле /etc/passwd у нас есть так называемый GECOS fields (что означает "Комплексная операционная система General Electric"), то есть:

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?

3 ответа

Решение

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

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

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

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

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

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

  • сначала с помощью «:» в качестве разделителя полей вырежьте поля 1 и 5; и
  • во-вторых, с помощью "," в качестве разделителя полей, вырежьте поля 1 и 5-N;
Другие вопросы по тегам