.png)
no arquivo /etc/passwd
temos o chamado GECOS fields
(que significa “General Electric Comprehensive Operating System”), ou seja:
username:password:userid:groupid:gecos:home-dir:shell
Onde GECOS
estão divididos como:
:FullName,RoomAddress,WorkPhone,HomePhone,Others:
E Others
estão divididos em quantas vírgulas desejar:
:FullName,RoomAddress,WorkPhone,HomePhone,Other1,Other2,Other3:
Nas man chfn
páginas pode-se ler:
O outro campo é usado para armazenar informações contábeis usadas por outros aplicativos.
C language
Agora, para um desenvolvedor de aplicativos ( estou interessado em system calls
e/ou bash script
), qual é a melhor maneira de obter essas informações?
E considerando apenas o Bash
ambiente, dado que o finger
comando não pode exibir os others
campos (ou pelo menos não vejo como), quais são os outros comandos que podem? Sei que chfn
não apenas mostrar, mas permitir que sejam mudados. E se alguém apenas enviar para stdout
?
Responder1
A melhor maneira que encontrei é usar getent
porque funcionará com LDAP/NIS ou outros métodos de usuários não locais
getent passwd $UID| awk -F ":" '{print $5}'
Responder2
Por exemplo, em um script bash você pode imprimir o quinto campo do arquivo /etc/passwd
com awk/gawk:
awk -F ":" '{print $5}' /etc/passwd
A opção -F fs
usa fs para o separador do campo de entrada (neste caso :
).
Você pode ler mais, por exemplo, na página inicial do GNU awk [1] .
O Awk tem a função split()
de dividir uma string (onde neste caso você usará o 5º campo como string e o ,
como separador). Inspire-se em alguma outra resposta sobre isso [2]... .
Responder3
Você pode usar apenas dois comandos de corte aninhados:
- primeiro com ":" como separador de campo, corte os campos 1 e 5; e
- segundo com "," como separador de campo, corte os campos 1 e 5-N;