.png)
В файле /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;