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 (nom d'utilisateur2) gid = 513 (DomainUsers) groupes = 513 (DomainUsers)
Tous les utilisateurs de LDAP (/etc/nsswitch.conf est correct, tout est correct - mais seul cet utilisateur ne s'affiche pas)
Pourquoi affiché le numéro d'utilisateur (1466) à la place du nom d'utilisateur?
Il existe une limite de 8 caractères pour que les noms d'utilisateur soient listés dans ps -ef
(POSIX) ou ps aux
(dérivés BSD). Explication des options
J'ai cherché des pages de manuel sur les ordinateurs Mac et Linux et je n'ai pas vu cette limite enregistrée là-bas.
La question apparaît régulièrement sur les forums avec la limite de 8 caractères.
Je Est-ce que est finalement tombé sur cette page dans laquelle le "bogue" a été rapporté contre Debian mais fermé comme étant pas un bogue Ils font référence à cette page , qui affirme également que les normes POSIX et UNIX exigent le recours aux uids lorsque les noms sont trop longs. Pas non plus du standard POSIX actuel.
Je ne sais pas si cela fait autorité, mais cela explique le comportement que vous observez avec un nom d'utilisateur à 9 caractères. :)
Peut-être que quelqu'un d'autre peut poster une réponse à un lien plus fiable?
Comme Ray Toal le mentionne, il est limité à 8 caractères. Ce n'est pas un bug mais une partie de la norme à nouveau 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 case link dans la section STDOUT, cela indique que les champs (user, ruser, group, rgroup) seront imprimé s'il est possible de l'obtenir et si la largeur du champ le permet, ou une représentation décimale sinon.
La raison pour laquelle la largeur des champs de noms d'utilisateurs et de groupes est limitée à 8 pourrait être due à support hérité mais ce n'est qu'une supposition.
Pour une longueur encore plus dynamique que la réponse de moosaka (par exemple, si vous avez peu de noms d'utilisateurs 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:
ps -eo utilisateur: $ (ps axho uid | sort -u | xargs getent passewd | cut -f1 -d: | wc -L), pid, ppid, c, temps, nom, heure, cmd
Cela fera la longueur de la colonne de nom d'utilisateur aussi longtemps que le nom d'utilisateur le plus long du processus en cours d'exécution. (Notez que ce n'est pas pareil, cependant, et si un nouveau processus avec un nom d'utilisateur plus long commence dans la fraction de seconde lorsque la commande est en cours d'exécution, vous pouvez toujours afficher un numéro. Mais pour 99,99% du temps, la sortie est bien meilleure)
Explication: $(ps axho uid [...] | wc -L)
calcule la longueur maximale du nom d'utilisateur du processus en cours d'exécution, puis exécute le ps normal avec cette longueur de nom d'utilisateur
Alternativement, si vous voulez que ps apparaisse comme d'habitude pour les noms d'utilisateur courts (<= 8 caractères), et que peu de noms d'utilisateur longs en sortie soient mal alignés avec les en-têtes, vous pouvez faire quelque chose comme:
ps ax -o utilisateur: 40, pid, ppid, c, stime, tname, time, cmd | Perl -pe 'if (/ ^ (\ S +)/et longueur $ 1> 8) {s/^ (\ S +)\s +/$ 1 /} sinon {s/^ (. {9})\s +/$ 1 /} '
ce qui fait que la colonne nom_utilisateur de sortie est très longue (-o user:40
), puis post-traite la sortie si longtemps que les noms d'utilisateur (length $1 > 8
) ont juste un espace entre eux et la colonne suivante, et que les noms d'utilisateur courts (else {
) sont ramenés à leur valeur par défaut (jusqu'à 8). Caract username, et le reste jusqu'au 9ème caractère sont des espaces)