Affichage de la sortie complète de la commande PS


164

lorsque j'exécute la ps -auxcommande sur mon serveur Linux, auquel je me suis connecté en utilisant du mastic, peu de processus sont trop longs pour tenir dans la largeur de ma fenêtre actuelle. Y a-t-il une alternative?

-- Mettre à jour --

Je suis désolé pour la rétrogradation, je pensais que les autres ne trouveraient pas la réponse utile aussi, alors j'ai rétrogradé.

Voici les informations que vous avez demandées.

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

En passant, vous avez fourni très peu d'informations, vous ne devriez donc pas voter contre toutes les réponses que vous avez jusqu'à présent. Nous essayons de vous aider. Vous devez poster la sortie echo $TERM, stty -aet echo $COLUMNSdans votre question.
Alok Singhal le

Essayez stty ocrnlet / ou stty sane?
Alok Singhal le

29
ps axuwwC'est la réponse;) Du moins pour moi. Le doublé l'a wwfait.
brutuscat

Réponses:


145

Il est probable que vous utilisiez un téléavertisseur tel que lessou mostpuisque la sortie de ps auxest plus longue qu'un écran. Si tel est le cas, les options suivantes entraîneront (ou forceront) le bouclage des longues lignes au lieu d'être tronquées.

ps aux | less -+S

ps aux | most -w

Si vous utilisez l'une des commandes suivantes, les lignes ne seront pas encapsulées, mais vous pouvez utiliser vos touches fléchées ou d'autres touches de déplacement pour faire défiler vers la gauche et la droite.

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)

Les lignes sont toujours enveloppées pour moreet pg.

Lorsqu'elle ps auxest utilisée dans un tube, l' woption n'est pas nécessaire car elle psn'utilise la largeur de l'écran que lorsque la sortie est vers le terminal.


21
Veuillez noter que sous Linux, il y a toujours une limite de 4096 caractères codés en dur dans le code du noyau: voir stackoverflow.com/questions/199130/...
Mariano Paniga

3
@MarianoPaniga: Vous m'avez sauvé la vie avec ce commentaire.
stackular

plus? voulez-vous dire plus?
Mike Furlender

@MikeFurlender: Non, mostc'est un autre téléavertisseur. J'ai ajouté un lien dans ma réponse.
Suspendu jusqu'à nouvel ordre.

@DennisWilliamson Votre déclaration selon laquelle vous n'êtes wpas nécessaire lors de l'utilisation d'un tube semble dépendre du système. Sur openSUSE Leap 15.0 et Ubuntu 18.04, des commandes comme ps aux | grep <something>agissent sur la sortie de pstronquée par la largeur du terminal.
pkeller

150

En utilisant les auxwwindicateurs, vous verrez le chemin complet de sortie dans la fenêtre de votre terminal et à partir des scripts 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 auxrépertorie tous les processus exécutés par tous les utilisateurs. Voir man pspour plus de détails. Le wwdrapeau définit une largeur illimitée.

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

J'ai trouvé la réponse sur le blog suivant:
http://www.snowfrog.net/2010/06/10/solaris-ps-output-truncated-at-80-columns/


10
C'est une meilleure réponse que la solution actuellement acceptée car tous les systèmes (Linux embarqué) n'incluent pas «la plupart», «plus» ou «moins» de pagers.
frakman1

ou,ps auxf > ps.log
Marslo


65

Il suffit de le jeter sur le chat, qui s'enroule automatiquement

ps aux | cat

vous pouvez élaborer, mais plus.
MZaragoza

10
Bonne solution pour les distributions Linux légères comme BusyBox, où les outils avancés ne sont pas disponibles :)
Lion

facile à retenir aussi!
fzN

Très très simple. catLa commande est sur chaque boîte nix là-bas.
Ligemer le

15

Si vous passez quelques wsecondes, la largeur d'affichage sera ignorée.


Avez-vous essayé d'en ajouter plusieurs?
Ignacio Vazquez-Abrams

J'ai essayé d'ajouter plus de 5 .. mais d'une manière ou d'une autre, il ne montre pas la commande complète.
Booléen du

1
Une fois arrivé à 3, vous voyez tout ce qu'il y a. Rien au-delà de ce qu'il montre n'est visible pour aucun programme. Vous avez un problème différent.
Ignacio Vazquez-Abrams

11

Si vous spécifiez le format de sortie manuellement, vous devez également vous assurer que l' argsoption est la dernière dans la liste des champs de sortie, sinon elle sera tronquée.

ps -A -o args,pid,lstart donne

/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

mais ps -A -o pid,lstart,argsvous donne la ligne de commande complète:

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

vous pouvez définir le format de sortie, par exemple pour ne voir que la commande et l'identifiant du processus.

ps -eo pid,args

voir la page de manuel de ps pour plus de format de sortie. vous pouvez également utiliser le -wou--width n options .

Si tout le reste échoue, voici une autre solution de contournement, (juste pour voir vos longs cmds)

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

1
changez l'ordre et réessayez, pid, args
ghostdog74

3

Désolé d'être en retard à la fête, mais je viens de trouver cette solution au problème.

Les lignes sont tronquées car ps insiste pour utiliser la valeur de $ COLUMNS, même si la sortie n'est pas l'écran à ce moment. Ce qui est un bug, à mon humble avis. Mais facile à contourner, faites simplement croire à ps que vous avez un écran super-large, c'est-à-dire réglez COLUMNS sur une valeur élevée pendant la durée de la commande ps. Un exemple:

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

J'espère que cela est encore utile à quelqu'un. Toutes les autres idées semblaient beaucoup trop compliquées :)



1

Si vous greputilisez la commande que vous recherchez avec un tube de ps aux, elle enveloppera automatiquement le texte. J'ai utilisé beaucoup d'autres réponses ici, mais parfois si vous cherchez quelque chose de spécifique, il est agréable de l'utiliser grepet vous savez que cela encapsulera des lignes.

Par exemple ps aux | grep ffmpeg.



0

Preuve de troncature mentionnée par d'autres, (un exemple personnel)

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

Cela ^^ capture cette longue sortie dans une variable Par opposition à

ps -p 689 -o command

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

Puisque j'essayais cela à partir d'un notebook Docker Jupyter, je devais bien sûr l'exécuter avec le bang.

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

Étonnamment, les cahiers Jupyter vous permettent d'exécuter même cela! Mais heureux d'aider à trouver le cahier incriminé occupant toute ma mémoire = D

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.