Visualizzazione dell'output completo del comando PS


163

quando eseguo il ps -auxcomando sul mio server Linux, a cui mi sono connesso usando putty, pochi processi sono troppo lunghi per adattarsi alla larghezza della mia finestra corrente. C'è un'alternativa?

-- Aggiornare --

Mi dispiace per il downgrade, pensavo che anche gli altri non avrebbero trovato utile la risposta, quindi ho effettuato il downgrade.

Ecco le informazioni che hai chiesto.

hadoop-user@hadoop-desk:~$ echo $TERM
xterm

hadoop-user@hadoop-desk:~$ stty -a
speed 38400 baud; rows 47; columns 158; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke

hadoop-user@hadoop-desk:~$ echo $COLUMNS
158

A parte questo, hai fornito pochissime informazioni, quindi non dovresti minimizzare tutte le risposte che hai ottenuto finora. Stiamo cercando di aiutarti. Si consiglia di inviare l'output di echo $TERM, stty -ae echo $COLUMNSnella sua interrogazione.
Alok Singhal,

Prova stty ocrnle / o stty sane?
Alok Singhal,

29
ps axuwwQuesta è la risposta;) Almeno per me. Lo ha wwfatto il doppio .
brutuscat

Risposte:


145

È probabile che tu stia utilizzando un cercapersone come lesso mostpoiché l'output di ps auxè più lungo di uno schermo. In tal caso, le seguenti opzioni causeranno (o imposteranno) le linee lunghe da avvolgere anziché essere troncate.

ps aux | less -+S

ps aux | most -w

Se si utilizza uno dei seguenti comandi, le linee non verranno spostate, ma è possibile utilizzare i tasti freccia o altri tasti di spostamento per scorrere verso sinistra e verso destra.

ps aux | less -S    # use arrow keys, or Esc-( and Esc-), or Alt-( and Alt-) 

ps aux | most       # use arrow keys, or < and > (Tab can also be used to scroll right)

Le linee sono sempre racchiuse per moree pg.

Quando ps auxviene utilizzato in una pipe, l' wopzione non è necessaria poiché psutilizza la larghezza dello schermo solo quando l'output è verso il terminale.


21
Nota che in Linux esiste ancora un limite di 4096 caratteri hardcoded nel codice del kernel: vedi stackoverflow.com/questions/199130/…
Mariano Paniga

3
@MarianoPaniga: Mi hai salvato la vita con quel commento.
pila

maggior parte? vuoi dire di più?
Mike Furlender,

@MikeFurlender: No, mostè un altro cercapersone. Ho aggiunto un link nella mia risposta.
In pausa fino a nuovo avviso.

@DennisWilliamson La tua dichiarazione di wnon essere necessaria quando si utilizza una pipe sembra essere dipendente dal sistema. Sia su openSUSE Leap 15.0 sia su Ubuntu 18.04, comandi come ps aux | grep <something>agiscono sull'output di pstroncato dalla larghezza del terminale.
pkeller

149

Usando i auxwwflag, vedrai il percorso completo per l'output sia nella finestra del terminale che dagli script della shell.

darragh@darraghserver ~ $uname -a
SunOS darraghserver 5.10 Generic_142901-13 i86pc i386 i86pc

darragh@darraghserver ~ $which ps
/usr/bin/ps<br>

darragh@darraghserver ~ $/usr/ucb/ps auxww | grep ps
darragh 13680  0.0  0.0 3872 3152 pts/1    O 14:39:32  0:00 /usr/ucb/ps -auxww
darragh 13681  0.0  0.0 1420  852 pts/1    S 14:39:32  0:00 grep ps

ps auxelenca tutti i processi eseguiti da tutti gli utenti. Vedi man psper i dettagli. La wwbandiera imposta una larghezza illimitata.

-w         Wide output. Use this option twice for unlimited width.
w          Wide output. Use this option twice for unlimited width.

Ho trovato la risposta sul seguente blog:
http://www.snowfrog.net/2010/06/10/solaris-ps-output-truncated-at-80-columns/


10
Questa è una risposta migliore rispetto all'attuale soluzione accettata perché non tutti i sistemi (Linux incorporato) includono cercapersone "most", "more" o "less".
frakman1,

oppure,ps auxf > ps.log
Marslo,


64

Basta lanciarlo sul gatto, che si avvolge automaticamente

ps aux | cat

puoi elaborare, un ma di più.
MZaragoza,

10
Buona soluzione per le distribuzioni Linux leggere come BusyBox, dove gli strumenti avanzati non sono disponibili :)
Lion

facile anche da ricordare!
fzN,

Molto molto semplice. catil comando è su ogni casella nix là fuori.
Ligemer,

15

Passandolo per alcuni wsecondi ignorerà la larghezza del display.


Hai provato ad aggiungerne più di uno?
Ignacio Vazquez-Abrams,

Ho provato ad aggiungere più di 5 .. ma in qualche modo non mostra il comando completo.
Booleano il

1
Una volta arrivati ​​a 3 vedrai tutto quello che c'è. Nulla al di là di ciò che mostra è visibile a qualsiasi programma. Hai un problema diverso.
Ignacio Vazquez-Abrams,

11

Se si specifica manualmente il formato di output, è necessario assicurarsi che l' argsopzione sia l' ultima nell'elenco dei campi di output, altrimenti verrà troncata.

ps -A -o args,pid,lstart

/usr/lib/postgresql/9.5/bin 29900 Thu May 11 10:41:59 2017
postgres: checkpointer proc 29902 Thu May 11 10:41:59 2017
postgres: writer process    29903 Thu May 11 10:41:59 2017
postgres: wal writer proces 29904 Thu May 11 10:41:59 2017
postgres: autovacuum launch 29905 Thu May 11 10:41:59 2017
postgres: stats collector p 29906 Thu May 11 10:41:59 2017
[kworker/2:0]               30188 Fri May 12 09:20:17 2017
/usr/lib/upower/upowerd     30651 Mon May  8 09:57:58 2017
/usr/sbin/apache2 -k start  31288 Fri May 12 07:35:01 2017
/usr/sbin/apache2 -k start  31289 Fri May 12 07:35:01 2017
/sbin/rpc.statd --no-notify 31635 Mon May  8 09:49:12 2017
/sbin/rpcbind -f -w         31637 Mon May  8 09:49:12 2017
[nfsiod]                    31645 Mon May  8 09:49:12 2017
[kworker/1:0]               31801 Fri May 12 09:49:15 2017
[kworker/u16:0]             32658 Fri May 12 11:00:51 2017

ma ps -A -o pid,lstart,argsti procura l'intera riga di comando:

29900 Thu May 11 10:41:59 2017 /usr/lib/postgresql/9.5/bin/postgres -D /tmp/4493-d849-dc76-9215 -p 38103
29902 Thu May 11 10:41:59 2017 postgres: checkpointer process   
29903 Thu May 11 10:41:59 2017 postgres: writer process   
29904 Thu May 11 10:41:59 2017 postgres: wal writer process   
29905 Thu May 11 10:41:59 2017 postgres: autovacuum launcher process   
29906 Thu May 11 10:41:59 2017 postgres: stats collector process   
30188 Fri May 12 09:20:17 2017 [kworker/2:0]
30651 Mon May  8 09:57:58 2017 /usr/lib/upower/upowerd
31288 Fri May 12 07:35:01 2017 /usr/sbin/apache2 -k start
31289 Fri May 12 07:35:01 2017 /usr/sbin/apache2 -k start
31635 Mon May  8 09:49:12 2017 /sbin/rpc.statd --no-notify
31637 Mon May  8 09:49:12 2017 /sbin/rpcbind -f -w
31645 Mon May  8 09:49:12 2017 [nfsiod]
31801 Fri May 12 09:49:15 2017 [kworker/1:0]
32658 Fri May 12 11:00:51 2017 [kworker/u16:0]

9

è possibile impostare il formato di output, ad es. per vedere solo il comando e l'id del processo.

ps -eo pid,args

vedere la pagina man di ps per ulteriori formati di output. in alternativa, è possibile utilizzare le opzioni -wo --width n.

Se tutto il resto fallisce, ecco un'altra soluzione alternativa (solo per vedere i tuoi lunghi cmd)

awk '{ split(FILENAME,f,"/") ; printf "%s: %s\n", f[3],$0 }' /proc/[0-9]*/cmdline

1
cambia l'ordine e riprova, pid, args
ghostdog74,

3

Mi dispiace essere in ritardo alla festa, ma ho appena trovato questa soluzione al problema.

Le linee vengono troncate perché ps insiste sull'uso del valore di $ COLONNE, anche se l'output non è lo schermo in quel momento. Che è un bug, IMHO. Ma è facile aggirare il problema, basterà pensare a ps di avere uno schermo super-ampio, ovvero impostare COLONNE alte per la durata del comando ps. Un esempio:

$ ps -edalf                 # truncates lines to screen width
$ COLUMNS=1000 ps -edalf    # wraps lines regardless of screen width

Spero che sia ancora utile a qualcuno. Tutte le altre idee sembravano troppo complicate :)



1

Se sei grepil comando che stai cercando con una pipe da ps aux, avvolgerà automaticamente il testo. Ho usato molte altre risposte qui, ma a volte se stai cercando qualcosa di specifico, è bello da usare grepe sai che avvolgerà le linee.

Per esempio ps aux | grep ffmpeg.



0

Prove di troncamento menzionate da altri (un esempio personale)

foo=$(ps -p 689 -o command); echo "$foo"

COMMAND
/opt/conda/bin/python -m ipykernel_launcher -f /root/.local/share/jupyter/runtime/kernel-5732db1a-d484-4a58-9d67-de6ef5ac721b.json

Che ^^ cattura quell'output lungo in una variabile Al contrario di

ps -p 689 -o command

COMMAND
/opt/conda/bin/python -m ipykernel_launcher -f /root/.local/share/jupyter/runtim

Dato che stavo provando questo da un notebook jupyter Docker, ovviamente dovevo farlo con il botto.

!foo=$(ps -p 689 -o command); echo "$foo"

Notebook sorprendentemente gioviali ti permettono di eseguire anche quello! Ma felice di aiutarmi a trovare il taccuino offensivo che occupa tutta la mia memoria = D

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.