ps aux для длиннозначных имен пользователей показывает знак плюса

10

Я пытаюсь получить выход из ps aux , чтобы он выглядел так:

giovanni     28331  4381  0 15:43 ?       00:00:00 sshd: [email protected]/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: [email protected]/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

Итак, как я могу удалить эти плюсовые знаки и указать команде, чтобы показать мне все имя пользователя?

    
задан Giovanni Mounir 13.09.2014 в 19:52
источник

2 ответа

10

В соответствии с man ps , ps -aux - «Чтобы увидеть каждый процесс в системе с помощью синтаксиса BS . Я не нашел способа установить пользовательский формат для вывода вывода.

В стандартном синтаксисе , однако, вы можете установить ширину столбца, например: 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 Vlijm 14.09.2014 в 09:57
источник
1

Я столкнулся с той же проблемой. В руководстве ps рассказывается о WIDE-WCHAN-COLUMN. Умная попытка с параллельным формированием WIDE-RUSER-COLUMN закончилась желаемым результатом:

$ ps -e -o ruser=WIDE-RUSER-COLUMN
    
ответ дан furibund 26.03.2015 в 12:49