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
Це цікаво, моє ім’я користувача однакової довжини і не врізане
Джеймі,

Відповіді:


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
Байт-командир

1

Я зіткнувся з тією ж проблемою. Посібник ps розповідає нам про WIDE-WCHAN-COLUMN. Розумна спроба з паралельно сформованими WIDE-RUSER-COLUMN закінчилася бажаним результатом:

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

Чи можете ви додайте у відповідь якийсь контекст, який пояснює команду? ласкаво просимо і дякуємо
αғsnιη

@KasiyA Це було відредаговано.
Байт командир

@ByteCommander Я бачу. До речі, я не та людина, яка виступала проти :( +1 для нього.
αғsnιη
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.