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
Booléen
la source
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.

Suspendu jusqu'à nouvel ordre.
la source
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/

darraghmurphy
la source
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
118

simple et parfait:

ps -efww

ne tronquera pas la ligne

le dauphin
la source
2
C'est la partie "ww" qui est responsable de la sortie complète "
9ilsdx 9rvj 0lo
65

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

ps aux | cat
yoki
la source
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.

Ignacio Vazquez-Abrams
la source
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]
dshepherd
la source
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
ghostdog74
la source
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 :)

user1932577
la source
1

Si aucune des solutions ci-dessus ne fonctionne, la sortie de psn'est pas votre problème. Peut-être avez-vous besoin de mettre du mastic pour envelopper de longues lignes ?

Sinon, nous avons besoin de plus d'informations.

Alok Singhal
la source
Tant pis. Il se passe quelque chose de bizarre.
Alok Singhal le
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.

carterh062
la source
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

HeyWatchThis
la source