32

I'm trying to get an output from ps aux so that it looks like:

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

However, running this command on Ubuntu 14.04 LTS, gives the following instead:

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

So how can I remove these plus signs and instruct the command to show me the whole username instead?

Giovanni Mounir
  • 423
  • 1
  • 4
  • 7
  • 2
    That's interesting, my username is the same length and isn't truncated – Jamie Sep 13 '14 at 22:18
  • Yes interesting indeed. Using Red Hat Linux, the ps output only shows 6 characters and the + sign to indicate that it is clipped. I had read elsewhere that the ps output was supposed to have up to 8 characters, but it isn't consistent across distributions. – shawn1874 Jul 29 '22 at 18:31

2 Answers2

38

According to man ps, ps -aux is "To see every process on the system using standard (UNIX) syntax". I found no way to set a user-defined format to display the output.

In BSD syntax however, you can set the width of the column like: user:<width>. The following should give you the same information, setting the username column width to 20 (or any other value):

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

output with (very) long name:

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

setting column width to 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

For convenience reasons, you could add the following line to ~/.bashrc:

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

so that ps aux is the "normal" output, while psaux gives you the full name- version.

Note:

You can also show the full name by moving the name column to the last position:

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

gives:

 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

How to display the output, setting the width of the USER column automatically

There is another, more refined way to set the width of the USER- column. If we run the command with a very high value for the USER column width, we can use a small script to rearrange the lines, adjusting the column width to the longest user name.

To do so

  • Copy the script below, paste it into an empty file, save it as psaux_alternative.py.
  • Make it executable
  • Add a line to your ~/.bashrc:

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

Then, running psaux in a terminal window will display the output with an automatic width of the USER column.

The script:

#!/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:])
Starfish
  • 142
  • 9
Jacob Vlijm
  • 82,471
  • 12
  • 195
  • 299
  • This is a very nice workaround, thank you very much Jacob! However, do you think there's a proper way to do this? I mean what we just did was increasing the column width, but is there no way to let Ubuntu automatically increase this width according to the largest username length? – Giovanni Mounir Sep 14 '14 at 21:19
  • @GiovanniMounir now that is an interesting question! And yes, that should be possible. I'll get back to it tomorrow or day after tomorrow at latest. – Jacob Vlijm Sep 14 '14 at 21:22
  • 2
    @GiovanniMounir I made a small script to do the job. Running it will display the output width automatic width of the USER column. – Jacob Vlijm Sep 15 '14 at 08:15
  • Wonderful workaround, Jacob! Thank you very much! – Giovanni Mounir Sep 15 '14 at 22:46
  • @JacobVlijm Very nice one! I'm once again impressed by your scripts for every purpose... ;D – Byte Commander Mar 26 '15 at 15:15
  • @ByteCommander Wow I am truly honoured :) – Jacob Vlijm Mar 26 '15 at 15:16
  • This is nice, however the "comm" column does not show the actual full path and command being run as -axu shows. How can I see the exact same "COMMAND" column output that -aux shows? – Dave Mar 18 '22 at 13:42
3

I encountered the same problem. The ps manual tells us about WIDE-WCHAN-COLUMN. A smart try with parallel formed WIDE-RUSER-COLUMN ended in the wanted result:

$ ps -e -o ruser=WIDE-RUSER-COLUMN
furibund
  • 41
  • 2
  • Could you please add some context in your answer that explain the command? welcome and thanks – αғsнιη Mar 26 '15 at 12:52
  • @KasiyA It has been edited. – Byte Commander Mar 26 '15 at 14:34
  • @ByteCommander I see. BTW, I'm not the person who downvoted :( +1 for him. – αғsнιη Mar 26 '15 at 14:44
  • 1
    More useful with the capital-O option, which includes all the default columns: `ps -e -O ruser=WIDE-RUSER-COLUMN` – tanius Oct 17 '21 at 21:33
  • This came close to working for me. However it still doesn't show the full username in some cases. I encountered a username with about 19 characters and it was still clipped using this option. Still, I appreciate the idea of trying it this way. In my case it was also on RHEL7 that it happened so maybe this does work on ubuntu. – shawn1874 Aug 05 '22 at 19:35