2008-09-18 7 views
5

Estoy tratando de encontrar el archivo virtual que contiene la id de usuario actual. Me dijeron que podía encontrarlo en el directorio de proc, pero no estoy seguro de qué archivo.Directorio de Proc. Unix

Respuesta

8

Usted realmente quiere /proc/self/status, que le dará información sobre el proceso actualmente en ejecución.

Aquí se muestra un ejemplo:

$ cat /proc/self/status 
Name: cat 
State: R (running) 
Tgid: 17618 
Pid: 17618 
PPid: 3083 
TracerPid:  0 
Uid: 500 500 500 500 
Gid: 500 500 500 500 
FDSize: 32 
Groups: 10 488 500 
VmPeak:  4792 kB 
VmSize:  4792 kB 
VmLck:   0 kB 
VmHWM:  432 kB 
VmRSS:  432 kB 
VmData:  156 kB 
VmStk:  84 kB 
VmExe:  32 kB 
VmLib:  1532 kB 
VmPTE:  24 kB 
Threads: 1 
SigQ: 0/32268 
SigPnd: 0000000000000000 
ShdPnd: 0000000000000000 
SigBlk: 0000000000000000 
SigIgn: 0000000000000000 
SigCgt: 0000000000000000 
CapInh: 0000000000000000 
CapPrm: 0000000000000000 
CapEff: 0000000000000000 
Cpus_allowed: 00000003 
Mems_allowed: 1 
voluntary_ctxt_switches: 0 
nonvoluntary_ctxt_switches: 3 

Es posible que desee mirar a los primeros números en las líneas de UID y GID. Puede consultar qué números de uid se asignan a qué nombre de usuario mirando /etc/passwd, o llamando a las funciones relevantes para asignar uid a nombre de usuario en cualquier idioma que esté utilizando.

Lo ideal sería llamar al sistema getuid() para buscar esta información, hacerlo al mirar /proc/ es contraproducente.

+1

Nunca debe analizar/etc/passwd usted mismo, porque la mayoría de los sistemas modernos usan PAM, y en ese caso la base de datos puede no ser/etc/passwd, pero podría estar en NIS, un servidor LDAP o algo completamente diferente. – jfs

3

No estoy seguro de que se puede encontrar en /proc. Podría intentar usar la función getuid() o la variable de entorno $USER.

2

Lo más probable es que desee comprobar la variable de entorno $USER. Otras opciones incluyen getuid y id -u, pero buscar /proc ciertamente no es el mejor método de acción.

3

Por lo que sé, /proc es específico de Linux, no está en UNIX en general. Si realmente quiere el UID actual, use la función getuid() o geteuid().

Si sabe que solo estará en Linux, puede explorar la jerarquía bajo /proc/self/*, que contiene diversa información sobre el proceso actual. Recuerde que /proc es "mágico", es un sistema de archivos virtual que el núcleo sirve y los contenidos se generan dinámicamente en el momento que lo solicita. Por lo tanto, puede devolver información específica para el proceso actual.

Por ejemplo, probar este comando: cat /proc/self/status

1

En /proc/process_id/status (al menos en Linux) encontrará una línea como la siguiente:

Uid:  1000 1000 1000 1000

Esto le indica el identificador de usuario del usuario bajo cuya cuenta el proceso se está ejecutando.

Sin embargo, para averiguar la identificación del proceso del proceso actual necesitaría una llamada al sistema, y ​​entonces también podría llamar al getuid para obtener el uid directamente.

Edit: ah, /proc/self/status ... aprendiendo algo nuevo todos los días!

0

Lo que está buscando puede estar en variables de entorno. Debe tener cuidado con qué shell está utilizando cuando verifica variables de entorno. bash usa "UID" mientras que tcsh usa "uid" y en el caso *nix. También encontré que tcsh establece "gid" pero no pude encontrar una variable coincidente en bash.

Cuestiones relacionadas