ps aux pour les noms d'utilisateur à long caractère montre un signe plus


18

J'essaie d'obtenir une sortie ps auxpour qu'elle ressemble à:

giovanni     28331  4381  0 15:43 ?       00:00:00 sshd: giovanni@pts/1
giovanni     28346 28331  0 15:43 pts/1   00:00:00 -bash
giovanni     28646 28346  0 15:43 pts/1   00:00:00 ./example.sh

Cependant, l'exécution de cette commande sur Ubuntu 14.04 LTS donne à la place ce qui suit:

giovan+     28331  4381  0 15:43 ?       00:00:00 sshd: giovanni@pts/1
giovan+     28346 28331  0 15:43 pts/1   00:00:00 -bash
giovan+     28646 28346  0 15:43 pts/1   00:00:00 ./example.sh

Alors, comment puis-je supprimer ces signes plus et demander à la commande de me montrer le nom d'utilisateur complet à la place?


1
C'est intéressant, mon nom d'utilisateur est de la même longueur et n'est pas tronqué
Jamie

Réponses:


24

Selon man ps, ps -auxest "Pour voir chaque processus sur le système en utilisant la syntaxe standard (UNIX) ". Je n'ai trouvé aucun moyen de définir un format défini par l'utilisateur pour afficher la sortie.

Dans BSD syntaxe cependant, vous pouvez définir la largeur de la colonne comme: user:<width>. Les informations suivantes devraient vous donner les mêmes informations, en définissant la largeur de colonne du nom d'utilisateur sur 20 (ou toute autre valeur):

ps axo user:20,pid,pcpu,pmem,vsz,rss,tty,stat,start,time,comm

sortie avec (très) nom long:

USER                   PID %CPU %MEM    VSZ   RSS TT       STAT  STARTED     TIME COMMAND

.........................................................................................

root                  3826  0.0  0.1  77828  4788 ?        Ss   08:15:55 00:00:00 cupsd
lp                    3831  0.0  0.0  63156  2224 ?        S    08:15:56 00:00:00 dbus
lp                    3832  0.0  0.0  63156  2220 ?        S    08:15:56 00:00:00 dbus
root                  4822  1.7  5.1 446964 210416 tty8    Ss+  08:38:00 00:03:27 Xorg
root                  4923  0.0  0.1 174652  4412 ?        Sl   08:38:02 00:00:00 lightdm
tantemarievanhier     5181  0.0  0.1 544216  4796 ?        Sl   08:38:08 00:00:00 gnome-keyring-d
tantemarievanhier     5228  0.0  0.0  40492  2740 ?        Ss   08:38:08 00:00:00 init
tantemarievanhier     5369  0.0  0.0  41816  3064 ?        Ss   08:38:09 00:00:02 dbus-daemon
tantemarievanhier     5376  0.0  0.0  10616   316 ?        Ss   08:38:09 00:00:00 ssh-agent

définition de la largeur de colonne à 7:

ps axo user:7,pid,pcpu,pmem,vsz,rss,tty,stat,start,time,comm

USER     PID  %CPU %MEM    VSZ   RSS TT       STAT  STARTED     TIME COMMAND

.........................................................................................

tantem+  6623  0.0  0.0 287228  3820 ?        Sl   08:39:00 00:00:00 unity-webapps-s
tantem+  6679  0.0  0.4 676856 18640 ?        Sl   08:39:20 00:00:00 update-notifier
tantem+  6721  0.0  0.1 541224  7056 ?        Sl   08:40:20 00:00:00 deja-dup-monito
tantem+  6743  0.0  0.5 810616 21888 ?        Sl   08:41:55 00:00:00 unity-scope-hom
tantem+  6758  0.0  0.2 717256 10352 ?        Sl   08:41:55 00:00:00 unity-files-dae
tantem+  6760  0.0  0.5 607208 22920 ?        Sl   08:41:55 00:00:00 unity-scope-loa
tantem+  6784  0.0  0.2 350676  9060 ?        Sl   08:41:56 00:00:00 unity-music-dae

Pour des raisons de commodité, vous pouvez ajouter la ligne suivante à ~/.bashrc:

alias psaux='ps axo user:20,pid,pcpu,pmem,vsz,rss,tty,stat,start,time,comm'

c'est ps auxdonc la sortie "normale", tandis que psauxvous donne la version complète du nom.

Remarque:

Vous pouvez également afficher le nom complet en déplaçant la colonne de nom à la dernière position:

ps axo pid,pcpu,pmem,vsz,rss,tty,stat,start,time,comm,user

donne:

 PID %CPU %MEM    VSZ   RSS TT       STAT  STARTED     TIME COMMAND         USER


 5181  0.0  0.1 544216  4548 ?        Sl   08:38:08 00:00:00 gnome-keyring-d tantemarievanhier
 5228  0.0  0.0  40492  2668 ?        Ss   08:38:08 00:00:00 init            tantemarievanhier
 5369  0.0  0.0  41816  3032 ?        Ss   08:38:09 00:00:07 dbus-daemon     tantemarievanhier

Comment afficher la sortie, définir automatiquement la largeur de la colonne USER

Il existe une autre façon, plus raffinée, de définir la largeur de la colonne USER. Si nous exécutons la commande avec une valeur très élevée pour la largeur de colonne USER, nous pouvons utiliser un petit script pour réorganiser les lignes, en ajustant la largeur de colonne au nom d'utilisateur le plus long.

Faire cela

  • Copiez le script ci-dessous, collez-le dans un fichier vide, enregistrez-le sous psaux_alternative.py.
  • Rendez-le exécutable
  • Ajoutez une ligne à votre ~/.bashrc:

    alias psaux='/path/to/psaux_alternative.py`
    

Ensuite, l'exécution psauxdans une fenêtre de terminal affichera la sortie avec une largeur automatique de la colonne USER.

Le script:

#!/usr/bin/env python3

import subprocess

command = "ps axo user:30,pid,pcpu,pmem,vsz,rss,tty,stat,start,time,comm"
l = subprocess.check_output(["/bin/bash", "-c", command]).decode("utf-8").split("\n")
minlen = sorted(set([30-len(item.split(" ")[0]) for item in l]))[0]
for line in l:
    print(line[:30-minlen]+line[30:])

C'est une très bonne solution de contournement, merci beaucoup Jacob! Cependant, pensez-vous qu'il existe une bonne façon de procéder? Je veux dire ce que nous venons de faire était d'augmenter la largeur de la colonne, mais n'y a-t-il aucun moyen de laisser Ubuntu augmenter automatiquement cette largeur en fonction de la plus grande longueur de nom d'utilisateur?
Giovanni Mounir

@GiovanniMounir maintenant c'est une question intéressante! Et oui, cela devrait être possible. J'y reviendrai demain ou après-demain au plus tard.
Jacob Vlijm

2
@GiovanniMounir J'ai fait un petit script pour faire le travail. L'exécuter affichera la largeur automatique de la largeur de sortie de la colonne USER.
Jacob Vlijm

Contournement merveilleux, Jacob! Merci beaucoup!
Giovanni Mounir

@JacobVlijm Très sympa! Je suis encore une fois impressionné par vos scripts pour tous les usages ...; D
Byte Commander

1

J'ai rencontré le même problème. Le manuel ps nous parle de WIDE-WCHAN-COLUMN. Un essai intelligent avec WIDE-RUSER-COLUMN formé en parallèle s'est terminé par le résultat souhaité:

$ ps -e -o ruser=WIDE-RUSER-COLUMN

Pourriez-vous ajouter un peu de contexte dans votre réponse qui explique la commande? bienvenue et merci
αғsнιη

@KasiyA Il a été modifié.
Byte Commander

@ByteCommander je vois. BTW, je ne suis pas la personne qui a voté contre :( +1 pour lui.
αғsнιη
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.