查看PS命令的完整输出


163

当我ps -aux在使用腻子连接的Linux服务器上运行命令时,很少有进程太长而无法容纳当前的窗口宽度。有其他选择吗?

-更新-

很抱歉降级,我以为其他人也找不到答案,所以我降级了。

这是您要求的信息。

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 $TERMstty -a以及echo $COLUMNS在你的问题。
阿洛克·辛哈尔

尝试stty ocrnl和/或stty sane
Alok Singhal'1

29
ps axuww那就是答案;)至少对我来说。加倍ww做到了。
brutuscat 2012年

Answers:


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:你用那句话挽救了我的性命。
堆叠

最?你的意思更多吗?
Mike Furlender

@MikeFurlender:不,most是另一个寻呼机。我在答案中添加了一个链接。
暂停,直到另行通知。

@DennisWilliamson您关于w使用管道时不需要的声明似乎与系统有关。在openSUSE Leap 15.0和Ubuntu 18.04上,类似的命令ps aux | grep <something>ps将根据终端宽度被截断。
pkeller

149

使用这些auxww标志,您将在终端窗口和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 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.n​​et/2010/06/10/solaris-ps-output-truncated-at-80-columns/


10
这是比当前公认的解决方案更好的答案,因为并非所有系统(嵌入式linux)都包括“最多”,“更多”或“更少”的寻呼机。
frakman1 '16

ps auxf > ps.log
Marslo


64

只需将它放在猫身上,它就会自动换行

ps aux | cat

您可以详细说明,但更多。
萨拉戈萨2014年

10
对于像BusyBox这样的轻量级Linux发行版的好解决方案,在这些版本中,高级工具不可用:)
Lion

容易记住!
fzN

非常非常简单。cat该命令位于每个nix框上。
Ligemer '18


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

您可以设置输出格式,例如仅查看命令和进程ID。

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认为您拥有超宽屏幕,即可在ps命令期间将COLUMNS设置为高。一个例子:

$ 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

由于我是从Docker jupyter笔记本上尝试此操作的,因此我需要在运行过程中大放异彩..

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

出乎意料的是,jupyter笔记本甚至可以让您执行!但是很高兴帮助找到有问题的笔记本占用了我所有的内存= D

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.