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
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.
No estoy seguro de que se puede encontrar en /proc
. Podría intentar usar la función getuid()
o la variable de entorno $USER
.
¿Por qué no usar "id -u
"?
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.
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
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!
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.
- 1. cambiar al directorio superior en UNIX
- 2. Cuando un directorio de UNIX cambia su marca de tiempo
- 3. Interpretar datos de/proc/[id]/mountstats o/proc/self/mountstats
- 4. Sub directorio de descompresión de Unix sin incluir el directorio padre
- 5. Crear código postal del directorio en Unix m/c
- 6. Cuándo utilizar/proc y cuándo/dev
- 7. Entradas en/proc/meminfo
- 8. Linux/proc/loadavg
- 9. Comando Unix para eliminar todos los archivos en un directorio pero conservar el directorio
- 10. Splitting/proc/cmdline con espacios
- 11. Diferencias entre Proc y Lambda
- 12. diferencia xp_sendmail y sp_send_dbmail proc
- 13. mmap en/proc/pid/mem
- 14. Stored Proc y SqlCommand Timeout
- 15. ¿Funcionará esto en Unix?
- 16. Biblioteca de Python para monitoreo/proc/diskstats?
- 17. Descripción de Linux/proc/id/maps
- 18. ¿Cómo desarrollar un SAS PROC de terceros?
- 19. ¿Cómo crear una entrada de proceso en/proc/driver?
- 20. CakePHP: Ningún archivo o directorio (tratando de conectarse a través de unix: ///var/mysql/mysql.sock)
- 21. En SAS, ¿cuál es la diferencia entre Proc Means y Proc Summary?
- 22. En Unix, ¿cómo se elimina todo en el directorio actual y debajo de él?
- 23. Cambiar el nombre de los archivos en un directorio UNIX - shell scripting
- 24. Unix find: lista de archivos de stdin
- 25. Linux/UNIX instalar archivos de datos
- 26. Verifica si existe proc almacenado en DB?
- 27. Linux C++: archivos apis vs/proc?
- 28. SAS: Limitar variables en PROC EXPORT
- 29. enviando el comando para procesar usando/proc
- 30. Entender los contadores en/proc/[pid]/io
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