ps aux dla długich znakowanych nazw użytkowników pokazuje znak plus

18

Próbuję uzyskać dane wyjściowe ps aux, aby wyglądało to tak:

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

Jednak uruchomienie tego polecenia w systemie Ubuntu 14.04 LTS daje w zamian następujące informacje:

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

Jak mogę usunąć te znaki plus i poinstruować polecenie, aby zamiast tego wyświetlała mi całą nazwę użytkownika?

Giovanni Mounir
źródło
1
To ciekawe, moja nazwa użytkownika ma tę samą długość i nie jest obcięta
Jamie,

Odpowiedzi:

24

Według man ps, ps -auxjest „Aby zobaczyć wszystkie procesy w systemie, używając standardowej składni (UNIX) ”. Nie znalazłem sposobu, aby ustawić format zdefiniowany przez użytkownika do wyświetlania danych wyjściowych.

W BSD składni można jednak ustawić szerokość kolumny jak: user:<width>. Poniższe informacje powinny zawierać te same informacje, ustawiając szerokość kolumny nazwy użytkownika na 20 (lub dowolną inną wartość):

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

wyjście z (bardzo) długą nazwą:

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

ustawienie szerokości kolumny na 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

Ze względów wygody możesz dodać następujący wiersz ~/.bashrc:

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

więc to ps auxjest „normalne” wyjście, a jednocześnie psauxdaje pełną nazwę-wersję.

Uwaga:

Możesz także wyświetlić pełne imię i nazwisko, przesuwając kolumnę nazwy do ostatniej pozycji:

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

daje:

 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

Jak wyświetlić dane wyjściowe, automatycznie ustawiając szerokość kolumny USER

Istnieje inny, bardziej wyrafinowany sposób ustawiania szerokości kolumny USER. Jeśli uruchomimy polecenie z bardzo wysoką wartością dla szerokości kolumny USER, możemy użyć małego skryptu, aby zmienić kolejność linii, dostosowując szerokość kolumny do najdłuższej nazwy użytkownika.

Aby to zrobić

  • Skopiuj poniższy skrypt, wklej go do pustego pliku i zapisz jako psaux_alternative.py.
  • Zrób to
  • Dodaj wiersz do ~/.bashrc:

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

Następnie uruchomienie psauxw oknie terminala wyświetli dane wyjściowe z automatyczną szerokością kolumny USER.

Scenariusz:

#!/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
źródło
To bardzo miłe obejście, dziękuję bardzo Jakubowi! Czy jednak uważasz, że jest na to właściwy sposób? Chodzi mi o to, że właśnie zwiększyliśmy szerokość kolumny, ale czy nie ma sposobu, aby Ubuntu automatycznie zwiększał tę szerokość zgodnie z największą długością nazwy użytkownika?
Giovanni Mounir
@ GiovanniMounir to interesujące pytanie! I tak, to powinno być możliwe. Wrócę do tego jutro lub najpóźniej pojutrze.
Jacob Vlijm
2
@ GiovanniMounir Zrobiłem mały skrypt, aby wykonać zadanie. Uruchomienie go spowoduje wyświetlenie szerokości wyjściowej automatycznej szerokości kolumny USER.
Jacob Vlijm,
Cudowne obejście, Jacob! Dziękuję Ci bardzo!
Giovanni Mounir,
@JacobVlijm Very nice one! Po raz kolejny jestem pod wrażeniem twoich skryptów do każdego celu ...; D
Bajt Commander
1

Napotkałem ten sam problem. Podręcznik ps mówi nam o WIDE-WCHAN-COLUMN. Sprytna próba z równolegle uformowaną SZEROKĄ RUSERĄ zakończyła się pożądanym wynikiem:

$ ps -e -o ruser=WIDE-RUSER-COLUMN
furibund
źródło
Czy możesz dodać do odpowiedzi jakiś kontekst wyjaśniający polecenie? witamy i dziękuję
αғsнιη
@KasiyA Zostało edytowane.
Bajt Dowódca
@ByteCommander Rozumiem. BTW, nie jestem osobą, która oddała głos :( +1 dla niego.
αғsнιη