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

Ответы:


24

Согласно man ps, ps -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:])

Это очень хороший обходной путь, большое спасибо, Джейкоб! Тем не менее, вы думаете, есть правильный способ сделать это? Я имею в виду, что мы только что увеличили ширину столбца, но нет ли способа позволить Ubuntu автоматически увеличить эту ширину в соответствии с наибольшей длиной имени пользователя?
Джованни Мунир

@GiovanniMounir теперь это интересный вопрос! И да, это должно быть возможно. Я вернусь к этому не позднее завтра или послезавтра.
Джейкоб Влейм

2
@GiovanniMounir Я сделал небольшой сценарий, чтобы сделать работу. Запустив его, вы увидите автоматическую ширину выходной ширины столбца USER.
Джейкоб Влейм

Замечательный обходной путь, Джейкоб! Большое спасибо!
Джованни Мунир

@JacobVlijm Очень хороший! Я снова впечатлен вашими сценариями для всех целей ...; D
Byte Commander

1

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

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

Не могли бы вы добавить в свой ответ какой-то контекст, объясняющий команду? Добро пожаловать и спасибо
αғsнιη

@KasiyA Это было отредактировано.
Byte Commander

@ByteCommander, я вижу. Кстати, я не тот человек, который проголосовал за :( +1 за него.
αғsнιη
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.