Просмотр полного вывода команды PS

164

когда я бегу 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
150

Используя 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-columns/

darraghmurphy
источник
10
Это лучший ответ, чем принятое в настоящее время решение, потому что не все системы (встроенные в Linux) содержат пейджеры типа «большинство», «больше» или «меньше».
frakman1
илиps auxf > ps.log
Марсло
118

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

ps -efww

не будет усекать строку

Дельфин
источник
2
Это часть "ww", которая отвечает за полный вывод "
9ilsdx 9rvj 0lo
65

Просто бросьте это на кошку, которая автоматически переносит строки

ps aux | cat
Yoki
источник
Вы можете уточнить, но больше.
М.Зарагоса,
10
Хорошее решение для облегченных дистрибутивов Linux, таких как BusyBox, где недоступны продвинутые инструменты :)
Lion
также легко запомнить!
fzN
Очень очень просто catКоманда есть на каждом NIX-боксе.
Ligemer
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]
dshepherd
источник
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
ghostdog74
источник
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

Я надеюсь, что это все еще полезно для кого-то. Все остальные идеи казались слишком сложными :)

user1932577
источник
1

Если ни одно из вышеуказанных решений не сработало, вывод psне является вашей проблемой. Может быть, вам нужно установить шпаклевку, чтобы обернуть длинные строки ?

В противном случае нам нужно больше информации.

Алок Сингхал
источник
Ну что ж. Там происходит что-то странное.
Алок Сингхал
1

Если вы ищете grepкоманду с каналом из ps aux, она автоматически обернет текст. Я использовал много других ответов здесь, но иногда, если вы ищете что-то конкретное, это просто удобно использовать, grepи вы знаете, что оно будет переносить строки.

Например ps aux | grep ffmpeg.

carterh062
источник
1

Я нашел этот ответ, который прибил его ко мне, так как ни один из вышеупомянутых ответов не сработал

/unix/91561/ps-full-command-is-too-long

По сути, ядро ​​ограничивает мою строку cmd.

Дин Хиллер
источник
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

Так как я пробовал это на ноутбуке Docker jupyter, мне нужно было запустить это с новой силой, конечно ...

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

Удивительно, но ноутбуки Jupyter позволят вам выполнить даже это! Но я рад помочь найти ноутбук, который меня обидел, забрав всю мою память = D

HeyWatchThis
источник