ps aux per nomi utente a carattere lungo mostra un segno più


18

Sto cercando di ottenere un output in ps auxmodo che assomigli a:

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

Tuttavia, eseguendo questo comando su Ubuntu 14.04 LTS, si ottiene invece quanto segue:

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

Quindi, come posso rimuovere questi segni più e dare istruzioni al comando di mostrarmi l'intero nome utente invece?


1
È interessante, il mio nome utente ha la stessa lunghezza e non è troncato
Jamie,

Risposte:


24

Secondo man ps, ps -auxè "Per vedere ogni processo sul sistema usando la sintassi standard (UNIX) ". Non ho trovato alcun modo per impostare un formato definito dall'utente per visualizzare l'output.

In BSD sintassi tuttavia, è possibile impostare la larghezza della colonna come: user:<width>. Quanto segue dovrebbe fornire le stesse informazioni, impostando la larghezza della colonna nome utente su 20 (o qualsiasi altro valore):

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

output con un nome (molto) lungo:

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

impostazione della larghezza della colonna su 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

Per motivi di praticità, è possibile aggiungere la seguente riga a ~/.bashrc:

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

in modo che ps auxsia l'output "normale", mentre psauxti dà il nome completo-versione.

Nota:

Puoi anche mostrare il nome completo spostando la colonna del nome sull'ultima posizione:

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

dà:

 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

Come visualizzare l'output, impostando automaticamente la larghezza della colonna USER

Esiste un altro modo più raffinato per impostare la larghezza della colonna USER. Se eseguiamo il comando con un valore molto elevato per la larghezza della colonna USER, possiamo usare un piccolo script per riorganizzare le linee, regolando la larghezza della colonna sul nome utente più lungo.

Fare così

  • Copia lo script qui sotto, incollalo in un file vuoto, salvalo come psaux_alternative.py.
  • Renderlo eseguibile
  • Aggiungi una linea al tuo ~/.bashrc:

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

Quindi, l'esecuzione psauxin una finestra di terminale visualizzerà l'output con una larghezza automatica della colonna USER.

Il copione:

#!/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:])

Questa è una soluzione molto bella, grazie mille Jacob! Tuttavia, pensi che ci sia un modo corretto per farlo? Voglio dire, quello che abbiamo appena fatto è stato aumentare la larghezza della colonna, ma non c'è modo di lasciare che Ubuntu aumenti automaticamente questa larghezza in base alla lunghezza del nome utente più grande?
Giovanni Mounir,

@GiovanniMounir ora che è una domanda interessante! E sì, dovrebbe essere possibile. Ci tornerò domani o dopodomani al più tardi.
Jacob Vlijm,

2
@GiovanniMounir Ho realizzato una piccola sceneggiatura per fare il lavoro. Eseguendolo visualizzerà la larghezza automatica della larghezza di output della colonna USER.
Jacob Vlijm,

Ottima soluzione, Jacob! Grazie mille!
Giovanni Mounir,

@JacobVlijm Molto bello! Sono di nuovo colpito dai tuoi copioni per ogni scopo ...; D
Comandante di byte

1

Ho riscontrato lo stesso problema. Il manuale di ps ci parla di WIDE-WCHAN-COLUMN. Un tentativo intelligente con WIDE-RUSER-COLUMN formato parallelamente si è concluso con il risultato desiderato:

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

Potresti aggiungere un contesto alla tua risposta che spieghi il comando? benvenuto e grazie
αғsнιη il

@KasiyA È stato modificato.
Byte Commander

@ByteCommander che vedo. A proposito, non sono la persona che ha effettuato il downgrade :( +1 per lui.
αғsнιη,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.