ps aux für Benutzernamen mit langen Zeichen zeigt ein Pluszeichen an

18

Ich versuche eine Ausgabe von zu bekommen, ps auxso dass es so aussieht:

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

Wenn Sie diesen Befehl jedoch unter Ubuntu 14.04 LTS ausführen, erhalten Sie stattdessen Folgendes:

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

Wie kann ich diese Pluszeichen entfernen und den Befehl anweisen, stattdessen den gesamten Benutzernamen anzuzeigen?

Giovanni Mounir
quelle
1
Das ist interessant, mein Benutzername ist gleich lang und wird nicht abgeschnitten
Jamie

Antworten:

24

Nach man ps, ps -auxist es, „alle Prozesse auf dem System unter Verwendung finden Standard (UNIX) Syntax “. Ich habe keine Möglichkeit gefunden, ein benutzerdefiniertes Format für die Anzeige der Ausgabe festzulegen.

In BSD - Syntax können Sie jedoch die Breite der Spalte wie festgelegt: user:<width>. Das Folgende sollte Ihnen dieselben Informationen geben und die Spaltenbreite des Benutzernamens auf 20 (oder einen anderen Wert) setzen:

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

Ausgabe mit (sehr) langem Namen:

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

Spaltenbreite auf 7 setzen:

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

Aus praktischen Gründen können Sie die folgende Zeile hinzufügen ~/.bashrc:

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

Das ps auxist also die "normale" Ausgabe, während psauxSie die vollständige Namensversion erhalten.

Hinweis:

Sie können auch den vollständigen Namen anzeigen, indem Sie die Namensspalte an die letzte Position verschieben:

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

gibt:

 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

So zeigen Sie die Ausgabe an, indem Sie die Breite der USER-Spalte automatisch einstellen

Es gibt eine andere, verfeinerte Möglichkeit, die Breite der USER-Spalte festzulegen. Wenn wir den Befehl mit einem sehr hohen Wert für die USER-Spaltenbreite ausführen, können wir ein kleines Skript verwenden, um die Zeilen neu anzuordnen und die Spaltenbreite an den längsten Benutzernamen anzupassen.

Um das zu tun

  • Kopieren Sie das folgende Skript, fügen Sie es in eine leere Datei ein und speichern Sie es unter psaux_alternative.py.
  • Mach es ausführbar
  • Fügen Sie eine Zeile zu Ihrem hinzu ~/.bashrc:

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

Wenn Sie dann psauxin einem Terminalfenster ausgeführt werden, wird die Ausgabe mit einer automatischen Breite der Spalte USER angezeigt.

Das Drehbuch:

#!/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:])
Jacob Vlijm
quelle
Dies ist eine sehr schöne Lösung, vielen Dank, Jacob! Glauben Sie jedoch, dass es einen geeigneten Weg gibt, dies zu tun? Ich meine, wir haben gerade die Spaltenbreite erhöht, aber gibt es keine Möglichkeit, Ubuntu diese Breite automatisch entsprechend der größten Benutzernamenlänge erhöhen zu lassen?
Giovanni Mounir
@GiovanniMounir nun das ist eine interessante frage! Und ja, das sollte möglich sein. Ich werde morgen oder spätestens übermorgen darauf zurückkommen.
Jacob Vlijm
2
@GiovanniMounir Ich habe ein kleines Skript erstellt, um den Job zu erledigen. Beim Ausführen wird die automatische Breite der Ausgabebreite der Spalte USER angezeigt.
Jacob Vlijm
Wunderbare Lösung, Jacob! Vielen Dank!
Giovanni Mounir
@JacobVlijm Sehr schön! Ich bin wieder einmal beeindruckt von Ihren Skripten für jeden Zweck ...; D
Byte Commander
1

Ich bin auf dasselbe Problem gestoßen. Das ps-Handbuch berichtet über WIDE-WCHAN-COLUMN. Ein kluger Versuch mit parallel gebildeter WIDE-RUSER-COLUMN endete mit dem gewünschten Ergebnis:

$ ps -e -o ruser=WIDE-RUSER-COLUMN
furibund
quelle
Könnten Sie Ihrer Antwort bitte einen Kontext hinzufügen, der den Befehl erklärt? willkommen und danke
αғsнιη
@ KasiyA Es wurde bearbeitet.
Byte Commander
@ ByteCommander Ich verstehe. BTW, ich bin nicht die Person, die downvoted :( +1 für ihn.
αғsнιη