ps aux para nombres de usuario con caracteres largos muestra un signo más

18

Estoy tratando de obtener una salida ps auxpara que se vea así:

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

Sin embargo, al ejecutar este comando en Ubuntu 14.04 LTS, se obtiene lo siguiente:

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

Entonces, ¿cómo puedo eliminar estos signos más e indicarle al comando que me muestre el nombre de usuario completo?

Giovanni Mounir
fuente
1
Eso es interesante, mi nombre de usuario tiene la misma longitud y no está truncado
Jamie

Respuestas:

24

Según man ps, ps -auxes "Para ver todos los procesos en el sistema utilizando la sintaxis estándar (UNIX) ". No encontré ninguna manera de establecer un formato definido por el usuario para mostrar la salida.

En BSD sintaxis sin embargo, se puede ajustar el ancho de la columna como: user:<width>. Lo siguiente debería proporcionarle la misma información, estableciendo el ancho de columna del nombre de usuario en 20 (o cualquier otro valor):

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

salida con nombre (muy) largo:

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

establecer ancho de columna a 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

Por razones de conveniencia, puede agregar la siguiente línea a ~/.bashrc:

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

así que esa ps auxes la salida "normal", mientras psauxte da la versión completa del nombre.

Nota:

También puede mostrar el nombre completo moviendo la columna del nombre a la última posición:

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

da:

 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

Cómo mostrar la salida, configurando el ancho de la columna USUARIO automáticamente

Hay otra forma más refinada de establecer el ancho de la columna USUARIO. Si ejecutamos el comando con un valor muy alto para el ancho de columna USER, podemos usar un pequeño script para reorganizar las líneas, ajustando el ancho de la columna al nombre de usuario más largo.

Para hacerlo

  • Copie el script a continuación, péguelo en un archivo vacío, guárdelo como psaux_alternative.py.
  • Hazlo ejecutable
  • Agregue una línea a su ~/.bashrc:

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

Luego, al ejecutarse psauxen una ventana de terminal, se mostrará la salida con un ancho automático de la columna USUARIO.

La secuencia de comandos:

#!/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 Vlijm
fuente
Esta es una muy buena solución, ¡muchas gracias Jacob! Sin embargo, ¿crees que hay una manera adecuada de hacer esto? Quiero decir, lo que acabamos de hacer fue aumentar el ancho de la columna, pero ¿no hay forma de permitir que Ubuntu aumente automáticamente este ancho de acuerdo con la longitud de nombre de usuario más grande?
Giovanni Mounir
@GiovanniMounir ahora que es una pregunta interesante! Y sí, eso debería ser posible. Volveré a eso mañana o pasado mañana a más tardar.
Jacob Vlijm
2
@GiovanniMounir Hice un pequeño script para hacer el trabajo. Al ejecutarlo, se mostrará el ancho de salida del ancho automático de la columna USUARIO.
Jacob Vlijm
Maravillosa solución, Jacob! ¡Muchas gracias!
Giovanni Mounir
@JacobVlijm ¡Muy agradable! Una vez más estoy impresionado por sus guiones para cada propósito ...; D
Byte Commander
1

Encontré el mismo problema. El manual ps nos habla sobre WIDE-WCHAN-COLUMN. Un intento inteligente con WIDE-RUSER-COLUMN formado en paralelo terminó en el resultado deseado:

$ ps -e -o ruser=WIDE-RUSER-COLUMN
furibund
fuente
¿Podría agregar algún contexto en su respuesta que explique el comando? bienvenido y gracias
αғsнιη
@KasiyA Ha sido editado.
Byte Commander
@ByteCommander ya veo. Por cierto, no soy la persona que votó en contra :( +1 para él.
αғsнιη