Перегляд повного виводу команди PS


163

коли я запускаю ps -auxкоманду на своєму сервері Linux, до якого я підключився за допомогою putty, кілька процесів занадто довгі, щоб вписатись у мою поточну ширину вікна. Чи є альтернатива?

- Оновлення -

Мені шкода за пониження рівня, я думав, що інші також не знайдуть відповідь корисною, тому я погіршив.

Ось інформація, яку ви попросили.

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

В сторону ви надали дуже мало інформації, тому не варто намагатися уникати всіх відповідей, які ви отримали до цих пір. Ми намагаємось допомогти вам. Ви повинні опублікувати висновок echo $TERM, stty -aі echo $COLUMNSв вашому питанні.
Алок Сінгал

Спробуйте stty ocrnlта / або stty sane?
Алок Сінгал

29
ps axuwwЦе відповідь;) Принаймні для мене. Подвійний wwце зробив.
brutuscat

Відповіді:


145

Цілком ймовірно, що ви використовуєте пейджер, такий як lessабо mostоскільки вихідний ps auxфайл довший, ніж екранний. Якщо так, наступні параметри призведуть (або змусять) загортати довгі рядки, а не обрізати.

ps aux | less -+S

ps aux | most -w

Якщо ви використовуєте будь-яку з наведених нижче команд, рядки не будуть загортатися, але ви можете використовувати клавіші зі стрілками або інші клавіші руху для прокрутки вліво та вправо.

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)

Лінії завжди загорнуті для moreта pg.

При ps auxвикористанні в трубі wпараметр непотрібний, оскільки psвикористовує ширину екрану лише тоді, коли вихід на термінал.


21
Будь ласка , зверніть увагу , що в Linux є ще межа 4096 символів жорстко закодованих в коді ядра: см stackoverflow.com/questions/199130 / ...
Маріано Paniga

3
@MarianoPaniga: Ти врятував мені життя цим коментарем.
stackular

найбільше? ти маєш на увазі більше?
Майк Фурлендер

@MikeFurlender: Ні, mostце ще один пейджер. Я додав посилання у своїй відповіді.
Призупинено до подальшого повідомлення.

@DennisWilliamson Ваше твердження про те, що wне потрібно використовувати трубку, здається, залежить від системи. Як у openSUSE Leap 15.0, так і Ubuntu 18.04 команди, як-от, ps aux | grep <something>діють на висновок psусіченої шириною терміналу.
pkeller

149

Використовуючи auxwwпрапори, ви побачите повний шлях до виводу як у вікні вашого терміналу, так і зі скриптів оболонки.

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 auxперелічує всі процеси, виконані всіма користувачами. Детальніше man psдив. wwПрапор встановлює необмежену ширину.

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

Відповідь я знайшов у такому блозі:
http://www.snowfrog.net/2010/06/10/solaris-ps-output-truncated-at-80-column/


10
Це краща відповідь, ніж прийняте рішення, оскільки не всі системи (вбудований Linux) містять "більшість", "більше" або "менше" пейджерів.
frakman1

або,ps auxf > ps.log
Марсло

118

простий та ідеальний:

ps -efww

не буде усічена лінія


2
Це "ww" частина, яка відповідає за повний вихід "
9ilsdx 9rvj 0lo

64

Просто киньте його на кота, який автоматично загортає лінію

ps aux | cat

ви можете детальніше, але більше.
MZaragoza

10
Гарне рішення для легких дистрибутивів Linux, таких як BusyBox, де сучасні інструменти недоступні :)
Lion

легко запам'ятовується також!
fzN

Дуже дуже просто. catкоманда є на кожному nix вікні там.
Лігемер

15

Пройшовши його через кілька wс, ігноруйте ширину дисплея.


Ви намагалися додати більше одного?
Ігнасіо Васкес-Абрамс

Я спробував додати більше 5 .. але якимось чином не відображається повна команда.
Булевий

1
Як тільки ви дістаєтесь до 3, ви бачите все, що є. Ніщо, крім того, що там показано, не видно жодній програмі. У вас інша проблема.
Ігнасіо Васкес-Абрамс

11

Якщо ви вказуєте формат виводу вручну, вам також потрібно переконатися, що argsопція остання в списку полів виводу, інакше вона буде усічена.

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

але ps -A -o pid,lstart,argsотримує повний командний рядок:

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

Ви можете встановити формат виводу, наприклад, щоб побачити лише команду та ідентифікатор процесу.

ps -eo pid,args

перегляньте головну сторінку PS для отримання додаткового формату виводу. або ви можете скористатися параметрами -wабо --width n.

Якщо все інше не вдається, ось ще один спосіб вирішити, (щоб побачити ваші довгі cmds)

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

1
змінити порядок і спробувати ще раз, pid, args
ghostdog74

3

Вибачте, що запізнилися на вечірку, але я просто знайшов це рішення проблеми.

Рядки обрізані, тому що ps наполягає на використанні значення $ COLUMNS, навіть якщо вихідний момент не є екраном. Що таке помилка, ІМХО. Але легко обійти, просто змусьте PS думати, що у вас є надзвичайно широкий екран, тобто встановіть COLUMNS високим протягом тривалості команди ps. Приклад:

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

Сподіваюся, це все-таки комусь корисно. Всі інші ідеї видалися занадто складними :)



1

Якщо ви grepвкажете команду, яку ви шукаєте, з трубою від ps aux, вона автоматично перегортає текст. Я використовував багато інших відповідей тут, але іноді, якщо ви шукаєте щось конкретне, приємно просто скористатися, grepі ви знаєте, що це буде обертати лінії.

Наприклад ps aux | grep ffmpeg.



0

Докази про усічення, згадані іншими, (особистий приклад)

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

Це ^^ захоплює цей довгий вихід у змінну На відміну від

ps -p 689 -o command

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

Оскільки я пробував це з ноутбука докерів з Докера, мені, звичайно, потрібно було це запустити.

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

Дивно, зошити юпітера дозволяють вам виконати навіть це! Але радимо допомогти знайти блокнот-образник, який займає всю мою пам'ять = D

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.