linux - servicios - Procesos corriendo. ¿Por qué se muestra el número de uid en lugar de nombre de usuario?
ver servicios corriendo en linux (4)
ps -eaf
..
kude 22593 12078 0 09:06 ? 00:00:02 smbd -D hasi 22929 12078 0 09:12 ? 00:00:00 someprog.pl root 22950 43 0 Sep08 ? 00:00:19 [nfsiod] root 24558 43 0 Sep09 ? 00:00:28 [pdflush] root 25320 1 0 00:00 ? 00:00:01 /usr/bin/atop -a -w /var/log/atop/atop_20110916 600 1466 25757 12078 0 10:12 ? 00:00:00 smbd -D root 26752 12078 0 10:32 ? 00:00:01 smbd -D
..
ID username2
uid = 1466 (username2) gid = 513 (DomainUsers) grupos = 513 (DomainUsers)
Todos los usuarios en LDAP (/etc/nsswitch.conf es correcto, todo es correcto, pero solo este usuario no se muestra)
¿Por qué se muestra el número de uid (1466) en lugar de nombre de usuario?
Como lo menciona Ray Toal, está restringido a un límite de 8 caracteres. Esto no es un error sino parte de la norma nuevamente como lo menciona Ray. Si verifica el código fuente de ps
(parte del paquete procps
), uno de los comentarios dice:
The Open Group Base Specifications Issue 6 (IEEE Std 1003.1, 2004 Edition)
requires that user and group names print as decimal numbers if there is
not enough room in the column, so tough luck if you don''t like it.
The UNIX and POSIX way to change column width is to rename it:
ps -o pid,user=CumbersomeUserNames -o comm
The easy way is to directly specify the desired width:
ps -o pid,user:19,comm
Si verifica el link en la sección STDOUT , dice que los campos ( usuario , ruser , group , rgroup ) se imprimirán si pueden obtenerse y el ancho del campo lo permite, o una representación decimal de lo contrario.
La razón por la que los anchos de campo de nombre de usuario y grupo están restringidos a 8 podría ser por compatibilidad heredada, pero eso es solo una suposición
Hay un límite de 8 caracteres para que los nombres de usuario se enumeren en ps -ef
(POSIX) o ps aux
(BSD-derivados). Explicación de opciones
He buscado páginas de manual tanto en Mac como en Linux y no he visto ese límite registrado allí.
La pregunta aparece habitualmente en los foros con el límite de 8 caracteres como respuesta.
Finalmente me topé con esta página en la que se reportó el "error" contra Debian pero se cerró por no ser un error . Hacen referencia a esta página, que también hace una afirmación acerca de cómo los estándares POSIX y UNIX requieren que los usuarios vuelvan a caer cuando los nombres son demasiado largos. Tampoco de la norma POSIX real.
No sé si esto es autoritario, pero explica el comportamiento que está viendo con un nombre de usuario de 9 caracteres. :)
Tal vez alguien más puede publicar una respuesta a un enlace más autorizado?
Para una salida de longitud aún más dinámica que la respuesta de moosaka (por ejemplo, si tiene pocos nombres de usuario muy largos, pero que rara vez se usan y no quiere que la pantalla se desperdicie la mayor parte del tiempo), puede usar:
ps -eo usuario: $ (ps axho uid | sort -u | xargs getent passwd | cortar -f1 -d: | wc -L), pid, ppid, c, stime, tname, time, cmd
Hará que la longitud de la columna de nombre de usuario sea tan larga como el nombre de usuario más largo del proceso actualmente en ejecución. (Sin embargo, tenga en cuenta que no es a prueba de balas, y si el nuevo proceso con un nombre de usuario más largo comienza en la fracción de segundo mientras se ejecuta el comando, es posible que aún se muestre un número. Pero para el 99,99% del tiempo es mucho más agradable)
Explicación: $(ps axho uid [...] | wc -L)
calcula la longitud máxima de nombre de usuario del proceso ACTUALMENTE en ejecución, y luego ejecutamos ps normal con esa longitud de nombre de usuario
Alternativamente, si quiere que ps se vea como es habitual en los nombres de usuario cortos (<= 8 caracteres), y no le importa que los nombres de usuario largos en la salida estén desalineados con los encabezados, puede hacer algo como:
ps ax -o usuario: 40, pid, ppid, c, stime, tname, time, cmd | perl -pe ''if (/ ^ (/ S +) / y longitud $ 1> 8) {s / ^ (/ S +) / s + / $ 1 /} else {s / ^ (. {9}) / s + / $ 1 /} ''
lo que hace es hacer que la columna de nombre de usuario de salida sea muy larga ( -o user:40
), y luego postprocese la salida de manera que los nombres de usuario largos ( length $1 > 8
) tengan solo un espacio entre ellos y la siguiente columna, y los nombres de usuario cortos (de lo else {
) son recortado al valor predeterminado (hasta 8 caracteres nombre de usuario, y el resto hasta el noveno carácter son espacios)
ps -eo user:$(cut -d: -f1 /etc/passwd | wc -L),pid,ppid,c,stime,tname,time,cmd
La opción -o
se usa para especificar un formato definido por el usuario para la salida del comando ps
.
El formato definido por el usuario especificado dice que se generen los campos usuario, pid, ppid, stime, tname, time y cmd.
cut -d: -f1 /etc/passwd | wc -L
cut -d: -f1 /etc/passwd | wc -L
determina el número de caracteres en el nombre de inicio de sesión más largo en el archivo de contraseña. Por lo tanto, el user:$(cut -d: -f1 /etc/passwd | wc -L)
le dice al comando ps que envíe el campo de usuario usando la longitud máxima del nombre de inicio de sesión más largo.