.png)
en el archivo /etc/passwd
tenemos el llamado GECOS fields
(que significa "Sistema Operativo Integral de General Electric"), es decir:
username:password:userid:groupid:gecos:home-dir:shell
Donde GECOS
se dividen como:
:FullName,RoomAddress,WorkPhone,HomePhone,Others:
Y Others
se dividen en tantas comas como quieras:
:FullName,RoomAddress,WorkPhone,HomePhone,Other1,Other2,Other3:
En las man chfn
páginas se puede leer:
El otro campo se utiliza para almacenar información contable utilizada por otras aplicaciones.
Ahora, para un desarrollador de aplicaciones (estoy interesado en C language
y system calls
/o bash script
), ¿cuál es la mejor manera de obtener esta información?
Y considerando solo el Bash
entorno, dado que el finger
comando no puede mostrar los others
campos (o al menos no veo cómo), ¿cuáles son otros comandos que pueden hacerlo? Sé que chfn
no sólo mostrarlos, sino permitir que se cambien. ¿Qué pasa si uno simplemente lo envía a stdout
?
Respuesta1
La mejor manera que he encontrado es usar getent
porque funcionará con LDAP/NIS u otros métodos de usuarios no locales.
getent passwd $UID| awk -F ":" '{print $5}'
Respuesta2
Por ejemplo, en un script bash puedes imprimir el quinto campo del archivo /etc/passwd
con awk/gawk:
awk -F ":" '{print $5}' /etc/passwd
La opción -F fs
usa fs para el separador de campo de entrada (en este caso :
).
Puede leer más, por ejemplo, en la página de inicio de GNU awk [1] .
Awk tiene la función split()
de dividir una cadena (donde en este caso usará el quinto campo como cadena y el ,
como separador). Inspírate con alguna otra respuesta al respecto [2]... .
Respuesta3
Puedes usar dos comandos de corte anidados:
- primero con ":" como separador de campo, corte los campos 1 y 5; y
- segundo con "," como separador de campos, corte los campos 1 y 5-N;