Processus en cours d'exécution. Pourquoi afficher le numéro uid à la place du nom d'utilisateur? [fermé]
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 Nom d'utilisateur2
Uid=1466(nomdutilisateur2) gid=513(DomainUsers) groupes=513(DomainUsers)
Tous les utilisateurs dans LDAP (/etc / nsswitch.conf est correct, tout est correct - mais seul cet utilisateur ne s'affiche pas)
Pourquoi afficher le numéro uid (1466) à la place du nom d'utilisateur?
4 réponses
Il y a une limite de 8 caractères pour les noms d'utilisateur à lister dans ps -ef
(POSIX) ou ps aux
(BSD-derivatives). Explication des options
J'ai cherché des pages de manuel sur Mac et Linux et je n'ai pas vu cette limite enregistrée là.
La question apparaît régulièrement sur les forums avec la limite de 8 caractères comme réponse.
I did finally trébuché sur cette page dans laquelle le" bug " a été signalé contre Debian mais fermé comme étant not a bug . Ils font référence à cette page qui explique également comment les normes POSIX et UNIX nécessitent de revenir aux UID lorsque les noms sont trop longs. Aussi pas de la norme POSIX réelle.
Je ne sais pas si cela fait autorité, mais cela explique le comportement que vous voyez avec un nom d'utilisateur de 9 caractères. :)
Peut-être que quelqu'un d'autre peut poster une réponse à un lien plus autoritaire?
Comme le mentionne Ray Toal, il est limité à une limite de 8 caractères. Ce n'est pas un bug mais une partie de la norme comme mentionné par Ray. Si vous vérifiez le code source de ps
(partie du paquet procps
), l'un des commentaires dit
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 vous cochez la lien dans la section STDOUT, il dit que les champs (utilisateur, ruser, groupe, rgroup)sera imprimée si elle peut être obtenue et la largeur du champ de permis, ou une représentation décimale autrement.
La raison pour laquelle les largeurs de champ de nom d'utilisateur et de groupe sont limitées à 8 pourrait être pour legacy support mais ce n'est qu'une supposition.
ps -eo user:$(cut -d: -f1 /etc/passwd | wc -L),pid,ppid,c,stime,tname,time,cmd
Le -o
est utilisée pour spécifier un format défini par l'utilisateur pour la sortie de la ps
commande.
Le format défini par l'utilisateur spécifié indique de sortir les champs user, pid, ppid, stime, tname, time et cmd.
cut -d: -f1 /etc/passwd | wc -L
détermine le nombre de caractères dans le nom de connexion le plus long du fichier de mot de passe. Par conséquent, user:$(cut -d: -f1 /etc/passwd | wc -L)
indique à la commande ps de sortir le champ Utilisateur en utilisant la longueur maximale du nom de connexion le plus long.
Pour une sortie de longueur encore plus dynamique que la réponse de moosaka (par exemple, si vous avez peu de noms d'utilisateur très longs, mais qui sont très rarement utilisés et que vous ne voulez pas que l'écran soit gaspillé la plupart du temps), vous pouvez utiliser:
Utilisateur Ps-eo:$(ps axho uid / sort-u | xargs getent passwd / cut-f1-d | / wc-l), pid,ppid,c,stime,tname,time, cmd
Cela rendra la longueur de la colonne Nom d'utilisateur aussi longue que le nom d'utilisateur le plus long du processus en cours d'exécution. (Notez qu'il n'est pas bulletproof cependant, et si un nouveau processus avec un nom d'utilisateur plus long commence dans la fraction de seconde pendant que la commande est en cours d'exécution, vous pouvez toujours obtenir un numéro affiché. Mais pour 99,99% du temps, c'est beaucoup plus agréable)
Explication: $(ps axho uid [...] | wc -L)
calcule la longueur maximale du nom d'utilisateur du processus en cours d'exécution, puis nous exécutons ps normal avec cette longueur de nom d'utilisateur
Alternativement, si vous voulez que ps ressemble à d'habitude pour les noms d'utilisateur courts (
Ps ax -o utilisateur:40,pid,ppid,c,stime,tname,le temps,cmd | perl -pe 'if (/^(\S+)/ et la longueur $1 > 8) {s/^(\S+)\s+/$1 /} else { s/^(.{9})\s+/$1/}'
Ce que cela fait est de rendre la colonne de nom d'utilisateur de sortie très longue (-o user:40
), puis de post-traiter la sortie si les noms d'utilisateur longs (length $1 > 8
) ont juste un espace entre eux et la colonne suivante, et les noms d'utilisateur courts (else {
) sont ramenés à la valeur par défaut (jusqu'à 8 caractères le reste jusqu'au 9ème caractère sont des espaces)