长字符用户名的ps aux显示加号


18

我试图从中获得输出,ps aux以便它看起来像:

giovanni     28331  4381  0 15:43 ?       00:00:00 sshd: giovanni@pts/1
giovanni     28346 28331  0 15:43 pts/1   00:00:00 -bash
giovanni     28646 28346  0 15:43 pts/1   00:00:00 ./example.sh

但是,在Ubuntu 14.04 LTS上运行此命令将提供以下内容:

giovan+     28331  4381  0 15:43 ?       00:00:00 sshd: giovanni@pts/1
giovan+     28346 28331  0 15:43 pts/1   00:00:00 -bash
giovan+     28646 28346  0 15:43 pts/1   00:00:00 ./example.sh

那么,如何删除这些加号并指示命令显示整个用户名呢?


1
有趣的是,我的用户名长度相同且未被截断
Jamie

Answers:


24

根据man psps -aux是“使用标准(UNIX)语法查看系统上的每个进程”。我发现没有办法设置用户定义的格式来显示输出。

但是,在BSD语法中,您可以设置列的宽度,例如:user:<width>。以下内容应为您提供相同的信息,将用户名列的宽度设置为20(或任何其他值):

ps axo user:20,pid,pcpu,pmem,vsz,rss,tty,stat,start,time,comm

输出(非常长的名字):

USER                   PID %CPU %MEM    VSZ   RSS TT       STAT  STARTED     TIME COMMAND

.........................................................................................

root                  3826  0.0  0.1  77828  4788 ?        Ss   08:15:55 00:00:00 cupsd
lp                    3831  0.0  0.0  63156  2224 ?        S    08:15:56 00:00:00 dbus
lp                    3832  0.0  0.0  63156  2220 ?        S    08:15:56 00:00:00 dbus
root                  4822  1.7  5.1 446964 210416 tty8    Ss+  08:38:00 00:03:27 Xorg
root                  4923  0.0  0.1 174652  4412 ?        Sl   08:38:02 00:00:00 lightdm
tantemarievanhier     5181  0.0  0.1 544216  4796 ?        Sl   08:38:08 00:00:00 gnome-keyring-d
tantemarievanhier     5228  0.0  0.0  40492  2740 ?        Ss   08:38:08 00:00:00 init
tantemarievanhier     5369  0.0  0.0  41816  3064 ?        Ss   08:38:09 00:00:02 dbus-daemon
tantemarievanhier     5376  0.0  0.0  10616   316 ?        Ss   08:38:09 00:00:00 ssh-agent

将列宽设置为7:

ps axo user:7,pid,pcpu,pmem,vsz,rss,tty,stat,start,time,comm

USER     PID  %CPU %MEM    VSZ   RSS TT       STAT  STARTED     TIME COMMAND

.........................................................................................

tantem+  6623  0.0  0.0 287228  3820 ?        Sl   08:39:00 00:00:00 unity-webapps-s
tantem+  6679  0.0  0.4 676856 18640 ?        Sl   08:39:20 00:00:00 update-notifier
tantem+  6721  0.0  0.1 541224  7056 ?        Sl   08:40:20 00:00:00 deja-dup-monito
tantem+  6743  0.0  0.5 810616 21888 ?        Sl   08:41:55 00:00:00 unity-scope-hom
tantem+  6758  0.0  0.2 717256 10352 ?        Sl   08:41:55 00:00:00 unity-files-dae
tantem+  6760  0.0  0.5 607208 22920 ?        Sl   08:41:55 00:00:00 unity-scope-loa
tantem+  6784  0.0  0.2 350676  9060 ?        Sl   08:41:56 00:00:00 unity-music-dae

为了方便起见,您可以将以下行添加到~/.bashrc

alias psaux='ps axo user:20,pid,pcpu,pmem,vsz,rss,tty,stat,start,time,comm'

因此这ps aux是“常规”输出,同时psaux为您提供完整的名称版本。

注意:

您还可以通过将名称列移动到最后一个位置来显示全名:

ps axo pid,pcpu,pmem,vsz,rss,tty,stat,start,time,comm,user

给出:

 PID %CPU %MEM    VSZ   RSS TT       STAT  STARTED     TIME COMMAND         USER


 5181  0.0  0.1 544216  4548 ?        Sl   08:38:08 00:00:00 gnome-keyring-d tantemarievanhier
 5228  0.0  0.0  40492  2668 ?        Ss   08:38:08 00:00:00 init            tantemarievanhier
 5369  0.0  0.0  41816  3032 ?        Ss   08:38:09 00:00:07 dbus-daemon     tantemarievanhier

如何显示输出,自动设置USER列的宽度

还有另一种更精细的方法来设置USER-列的宽度。如果我们以很高的USER列宽值运行命令,则可以使用一个小的脚本重新排列行,将列宽调整为最长的用户名。

这样做

  • 复制以下脚本,将其粘贴到一个空文件中,另存为psaux_alternative.py
  • 使它可执行
  • 在您的添加一行~/.bashrc

    alias psaux='/path/to/psaux_alternative.py`
    

然后,psaux在终端窗口中运行将显示带有USER列自动宽度的输出。

剧本:

#!/usr/bin/env python3

import subprocess

command = "ps axo user:30,pid,pcpu,pmem,vsz,rss,tty,stat,start,time,comm"
l = subprocess.check_output(["/bin/bash", "-c", command]).decode("utf-8").split("\n")
minlen = sorted(set([30-len(item.split(" ")[0]) for item in l]))[0]
for line in l:
    print(line[:30-minlen]+line[30:])

这是一个非常好的解决方法,非常感谢Jacob!但是,您认为有适当的方法吗?我的意思是我们只是在增加列宽,但是没有办法让Ubuntu根据最大的用户名长度自动增加该宽度吗?
Giovanni Mounir 2014年

@GiovanniMounir现在这是一个有趣的问题!是的,那应该是可能的。我最迟明天或后天再讲。
Jacob Vlijm 2014年

2
@GiovanniMounir我做了一个小脚本来完成这项工作。运行它会显示USER列的输出宽度自动宽度。
Jacob Vlijm 2014年

很棒的解决方法,Jacob!非常感谢你!
Giovanni Mounir 2014年

@JacobVlijm非常好一个!您的各种用途的脚本再一次给我留下了深刻的印象...; D
Byte Commander

1

我遇到了同样的问题。ps手册告诉我们有关WIDE-WCHAN-COLUMN的信息。使用并行形成的WIDE-RUSER-COLUMN的智能尝试以所需的结果告终:

$ ps -e -o ruser=WIDE-RUSER-COLUMN

您能否在答案中添加一些说明命令的上下文?欢迎和感谢
αғsнιη

@KasiyA已被编辑。
字节指挥官

我看到了@ByteCommander。顺便说一句,我不是
投票
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.