ps phụ cho tên người dùng dài đặc trưng cho thấy một dấu cộng


18

Tôi đang cố gắng để có được một đầu ra từ ps auxđó để nó trông giống như:

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

Tuy nhiên, chạy lệnh này trên Ubuntu 14.04 LTS, thay vào đó sẽ đưa ra các điều sau:

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

Vì vậy, làm thế nào tôi có thể loại bỏ các dấu cộng này và hướng dẫn lệnh hiển thị cho tôi toàn bộ tên người dùng thay thế?


1
Điều đó thật thú vị, tên người dùng của tôi có cùng độ dài và không bị cắt ngắn
Jamie

Câu trả lời:


24

Theo man ps, ps -auxlà "Để xem mọi quy trình trên hệ thống sử dụng cú pháp chuẩn (UNIX) ". Tôi không tìm thấy cách nào để đặt định dạng do người dùng xác định để hiển thị đầu ra.

Trong BSD cú pháp tuy nhiên, bạn có thể thiết lập độ rộng của cột như: user:<width>. Sau đây sẽ cung cấp cho bạn thông tin tương tự, đặt chiều rộng cột tên người dùng thành 20 (hoặc bất kỳ giá trị nào khác):

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

đầu ra với (rất) tên dài:

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

thiết lập độ rộng cột thành 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

Vì lý do thuận tiện, bạn có thể thêm dòng sau vào ~/.bashrc:

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

vì vậy đó ps auxlà đầu ra "bình thường", trong khi psauxcung cấp cho bạn phiên bản tên đầy đủ.

Ghi chú:

Bạn cũng có thể hiển thị tên đầy đủ bằng cách di chuyển cột tên đến vị trí cuối cùng:

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

cho:

 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ách hiển thị đầu ra, tự động đặt độ rộng của cột USER

Có một cách khác, tinh tế hơn để đặt chiều rộng của cột USER-. Nếu chúng ta chạy lệnh với giá trị rất cao cho chiều rộng cột USER, chúng ta có thể sử dụng một tập lệnh nhỏ để sắp xếp lại các dòng, điều chỉnh độ rộng của cột thành tên người dùng dài nhất.

Làm như vậy

  • Sao chép tập lệnh bên dưới, dán nó vào một tập tin trống, lưu nó dưới dạng psaux_alternative.py.
  • Làm cho nó thực thi
  • Thêm một dòng vào ~/.bashrc:

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

Sau đó, chạy psauxtrong cửa sổ terminal sẽ hiển thị đầu ra với chiều rộng tự động của cột USER.

Kịch bản:

#!/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:])

Đây là một cách giải quyết rất hay, cảm ơn Jacob rất nhiều! Tuy nhiên, bạn có nghĩ rằng có một cách thích hợp để làm điều này? Ý tôi là những gì chúng ta vừa làm là tăng chiều rộng cột, nhưng không có cách nào để Ubuntu tự động tăng chiều rộng này theo độ dài tên người dùng lớn nhất?
Giovanni Mounir

@GiovanniMounir bây giờ là một câu hỏi thú vị! Và vâng, điều đó nên có thể. Tôi sẽ quay lại với nó vào ngày mai hoặc ngày mốt.
Jacob Vlijm

2
@GiovanniMounir Tôi đã tạo một kịch bản nhỏ để thực hiện công việc. Chạy nó sẽ hiển thị chiều rộng tự động chiều rộng của cột USER.
Jacob Vlijm

Cách giải quyết tuyệt vời, Jacob! Cảm ơn rât nhiều!
Giovanni Mounir

@JacobVlijm Rất đẹp! Tôi một lần nữa bị ấn tượng bởi các kịch bản của bạn cho mọi mục đích ...; D
Chỉ huy Byte

1

Tôi gặp phải vấn đề tương tự. Hướng dẫn ps cho chúng tôi biết về WIDE-WCHAN-COLUMN. Một thử thông minh với WIDE-RUSER-COLUMN được hình thành song song đã kết thúc trong kết quả mong muốn:

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

Bạn có thể vui lòng thêm một số bối cảnh trong câu trả lời của bạn để giải thích lệnh? chào mừng và cảm ơn
12:51

@KasiyA Nó đã được chỉnh sửa.
Chỉ huy Byte

@ByteCommander tôi thấy. BTW, tôi không phải là người đánh giá thấp :( +1 cho anh ta.
αғsнι
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.