J'essaie d'obtenir une sortie de ps aux
afin 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 les éléments suivants:
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?
Selon man ps
, ps -aux
est "Pour voir tous les processus du système utilisant syntaxe standard (UNIX)". J'ai trouvé aucun moyen de définir un format défini par l'utilisateur pour afficher la sortie.
Dans syntaxe BSD, vous pouvez toutefois définir la largeur de la colonne comme suit: user:<width>
. Ce qui suit devrait 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
réglage 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'
si ps aux
est la sortie "normale", alors que psaux
vous donne le nom complet-version.
Vous pouvez également afficher le nom complet en déplaçant la colonne du 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
Il existe un autre moyen, plus raffiné, 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 la colonne USER, nous pouvons utiliser un petit script pour réorganiser les lignes, en ajustant la largeur de la colonne au nom d'utilisateur le plus long.
Faire cela
psaux_alternative.py
.Ajoutez une ligne à votre ~/.bashrc
:
alias psaux='/path/to/psaux_alternative.py`
Ensuite, exécuter psaux
dans une fenêtre de terminal affichera la sortie avec une largeur automatique de la colonne USER.
Le scénario:
#!/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:])
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 a abouti au résultat souhaité:
$ ps -e -o ruser=WIDE-RUSER-COLUMN