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 เพิ่มความกว้างนี้โดยอัตโนมัติตามความยาวชื่อผู้ใช้ที่ใหญ่ที่สุด?
Giovanni Mounir

@GiovanniMounir ตอนนี้เป็นคำถามที่น่าสนใจ! และใช่ว่าควรจะเป็นไปได้ ฉันจะกลับไปพรุ่งนี้หรือวันรุ่งขึ้นหลังจากวันพรุ่งนี้
Jacob Vlijm

2
@GiovanniMounir ฉันทำสคริปต์เล็ก ๆ เพื่อทำงาน การรันมันจะแสดงความกว้างเอาท์พุทความกว้างอัตโนมัติของคอลัมน์ USER
Jacob Vlijm

วิธีแก้ปัญหาที่ยอดเยี่ยมจาค็อบ! ขอบคุณมาก!
Giovanni Mounir

@JacobVlijm เป็นคนดีมาก! ฉันประทับใจสคริปต์ของคุณอีกครั้งสำหรับทุกวัตถุประสงค์ ... ; D
ผู้บัญชาการ Byte

1

ฉันพบปัญหาเดียวกัน คู่มือ ps บอกเราเกี่ยวกับ WIDE-WCHAN-COLUMN การทดลองอย่างชาญฉลาดด้วยรูปแบบขนาน WIDE-RUSER-COLUMN สิ้นสุดลงในผลลัพธ์ที่ต้องการ:

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

คุณช่วยเพิ่มบริบทในคำตอบที่อธิบายคำสั่งได้ไหม ยินดีต้อนรับและขอบคุณ
αғsнιη

@KasiyA ได้รับการแก้ไขแล้ว
ผู้บัญชาการไบต์

@ ByteCommander ฉันเห็น BTW ฉันไม่ใช่คนที่ลงคะแนน :( +1 สำหรับเขา
αғsнιη
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.