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

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

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

根据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:])

答案2

我遇到了同样的问题。ps 手册告诉我们有关 WIDE-WCHAN-COLUMN 的信息。使用并行形成的 WIDE-RUSER-COLUMN 的巧妙尝试最终得到了想要的结果:

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

答案3

以下解决方案对我有用:

ps -e --format user:20,cmd

相关内容