Keluarkan hanya kolom di bawah PERINTAH perintah `ps` di terminal


12

Saya tahu bahwa kami dapat dengan mudah menemukan yang berikut:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND

dari semua proses yang berjalan dengan menggunakan perintah:

sudo ps aux

Pertanyaan saya adalah, apakah mungkin untuk menampilkan output hanya kolom di bawah COMMANDdan tidak ada yang lain?

Jawaban:


18

Gunakan -obendera.

Untuk daftar hanya proses Anda sendiri

 ps -o command  

Untuk membuat daftar semua proses sistem

 ps -e -o command

Ini bukan satu-satunya cara untuk membuat daftar perintah, mereka dapat dicetak dengan bendera baris perintah, atau hanya sebagai executable (yang merupakan commandpilihan apa ).

Dari komentar saya di bawah ini jawabannya:

perintah, args, dan cmd semua memberikan perintah penuh. Sebenarnya man page menyatakan perintah dan cmd adalah alias untuk args, dengan - flags disertakan. Comm memberikan nama hanya exacutable. Alias ​​itu adalah ucmd dan ucomm. Saya salah membaca tentang opsi AIX, yang sebenarnya dapat ditentukan dengan format seperti printf,% a untuk args,% c untuk comm

Lihat man psuntuk info lebih lanjut tentang penggunaan dan opsi format yang tersedia

Pendekatan terprogram akan sedikit berlebihan, karena pssudah memberi kita opsi pemformatan, tetapi bisa dilakukan dengan awk, yang jauh berguna ketika berhadapan dengan output yang dikolomisasi.

ps aux | awk '{ for(i=1;i<=NF;i++) {if ( i >= 11 ) printf $i" "}; printf "\n" }'

Namun perlu dicatat, bahwa kode ini rusak jika nama pengguna berisi spasi, misalnya john doe. Ini dapat diubah dengan menambahkan gsubfungsi yang akan menghilangkan nama pengguna Anda dari psdaftar. Namun, jika ada banyak pengguna yang masuk ke sistem, itu mungkin sulit untuk menghapus semua nama pengguna dari output. Dengan demikian, Anda dapat melihat bahwa -obendera jauh lebih disukai.

Catatan tambahan, sudotidak perlu untuk mendaftar semua prosesps


Terima kasih! Apakah ada perbedaan antara ps -eo command& ps -eo comm? Satu-satunya perbedaan yang saya temukan adalah di commandoutput adalah seperti: [kthreadd]sedangkan di commoutput adalah sebagai berikut: kthreadd. Apakah ini menandakan sesuatu?
Raphael

@Raphael menurut halaman manual, perbedaannya adalah commformat AIX , sedangkan commandformat gaya GNU standar. AIX adalah sistem lain * seperti NIX, sehingga opsi tersebut dapat digunakan untuk kompatibilitas. Jika tidak, tidak ada perbedaan
Sergiy Kolodyazhnyy

@Serg, saya baru saja mengeksekusi diff <(ps -eo comm) <(ps -eo command)dan sepertinya ada keributan di sana, bisakah Anda mengklarifikasi?
Andrew

Awas, awksolusinya rusak jika nama pengguna berisi spasi (di sini ); mungkin juga adil ps aux | awk '{ for(i=11;i<=NF;i++) {printf $i" "}; printf "\n" }'?
kos

2
@Andrew Jadi, saya sudah membaca manual sedikit lagi. Jadi command,, argsdan cmdsemua memberi perintah penuh. Bahkan nyatanya halaman manual commanddan cmdalias untuk args, dengan -bendera disertakan. The commmemberi nama exacutable saja. Alias ​​untuk itu ucmddan ucomm. Saya salah membaca tentang opsi AIX, yang sebenarnya dapat ditentukan dengan format seperti printf,% a untuk args,% c untuk comm
Sergiy Kolodyazhnyy

4

Cara yang lebih umum. Kami menentukan kolom perintah. Dengan cara ini, tidak masalah sakelar mana yang digunakan ps.

ps ax | awk -v p='COMMAND' 'NR==1 {n=index($0, p); next} {print substr($0, n)}'

Output sampel

% ps aux | awk -v p='COMMAND' 'NR==1 {n=index($0, p); next} {print substr($0, n)}'
/sbin/init splash
[kthreadd]
[ksoftirqd/0]
[kworker/0:0H]
[rcu_sched]
[rcu_bh]
[migration/0]
[watchdog/0]
[watchdog/1]
[migration/1]
[ksoftirqd/1]
[kworker/1:0H]
[watchdog/2]
[migration/2]
[ksoftirqd/2]
[kworker/2:0H]
[khelper]
[kdevtmpfs]
[netns]
[perf]
[khungtaskd]
[writeback]
[ksmd]
[khugepaged]
[crypto]
[kintegrityd]
[bioset]
[kblockd]
[ata_sff]
[md]
[devfreq_wq]
[kswapd0]
[fsnotify_mark]
[ecryptfs-kthrea]
[kthrotld]
[acpi_thermal_pm]
[scsi_eh_0]
[scsi_tmf_0]
[scsi_eh_1]
[scsi_tmf_1]
[ipv6_addrconf]
[deferwq]
[charger_manager]
[kpsmoused]
[scsi_eh_2]
[scsi_tmf_2]
[kworker/0:1H]
[jbd2/sda1-8]
[ext4-rsv-conver]
[kauditd]
[kworker/0:2]
/lib/systemd/systemd-journald
/lib/systemd/systemd-udevd
[…]

Dan bagaimana pstree?

Output sampel

% pstree -alU
systemd splash
  ├─ModemManager
  │   ├─{gdbus}
  │   └─{gmain}
  ├─NetworkManager --no-daemon
  │   ├─dhclient -d -q -sf /usr/lib/NetworkManager/nm-dhcp-helper -pf /run/sendsigs.omit.d/network-manager.dhclient-eth0.pid -lf /var/lib/NetworkManager/dhclient-57cfb005-1dc6-410d-aebc-16d8d152abfd-eth0.lease -cf /var/lib/NetworkManager/dhclient-eth0.conf eth0
  │   ├─dnsmasq --no-resolv --keep-in-foreground --no-hosts --bind-interfaces --pid-file=/run/sendsigs.omit.d/network-manager.dnsmasq.pid --listen-address=127.0.1.1 --conf-file=/var/run/NetworkManager/dnsmasq.conf --cache-size=0 --proxy-dnssec --enable-dbus=org.freedesktop.NetworkManager.dnsmasq --conf-dir=/etc/NetworkManager/dnsmasq.d
  │   ├─{gdbus}
  │   └─{gmain}
  ├─VBoxClient --clipboard
  │   └─VBoxClient --clipboard
  │       └─{SHCLIP}
  ├─VBoxClient --display
  │   └─VBoxClient --display
  │       └─{VT_MONITOR}
  ├─VBoxClient --seamless
  │   └─VBoxClient --seamless
  │       └─{X11 events}
  ├─VBoxClient --draganddrop
  │   └─VBoxClient --draganddrop
  │       ├─{dndHGCM}
  │       └─{dndX11}
  ├─VBoxService --pidfile /var/run/vboxadd-service.pid
  │   ├─{automount}
  │   ├─{control}
  │   ├─{cpuhotplug}
  │   ├─{memballoon}
  │   ├─{timesync}
  │   ├─{vminfo}
  │   └─{vmstats}
  ├─VBoxService
  │   ├─{automount}
  │   ├─{control}
  │   ├─{cpuhotplug}
  │   ├─{timesync}
  │   ├─{vminfo}
  │   └─{vmstats}
  ├─accounts-daemon
  │   ├─{gdbus}
  │   └─{gmain}
  ├─agetty --noclear tty1 linux
  ├─apache2 -k start
  │   ├─apache2 -k start
  │   ├─apache2 -k start
  │   ├─apache2 -k start
  │   ├─apache2 -k start
  │   └─apache2 -k start
  ├─at-spi-bus-laun
  │   ├─dbus-daemon --config-file=/etc/at-spi2/accessibility.conf --nofork --print-address 3
  │   ├─{dconf worker}
  │   ├─{gdbus}
  │   └─{gmain}
  ├─at-spi2-registr --use-gnome-session
  │   ├─{gdbus}
  │   └─{gmain}
  ├─atd -f
  ├─avahi-daemon
  │   └─avahi-daemon
  ├─cgmanager -m name=systemd
  ├─colord
  │   ├─{gdbus}
  │   └─{gmain}
  ├─console-kit-dae --no-daemon
  │   ├─62*[{console-kit-dae}]
  │   ├─{gdbus}
  │   └─{gmain}
  ├─cron -f
  ├─cups-browsed
  │   ├─{gdbus}
  │   └─{gmain}
  ├─cupsd -l
  │   └─dbus dbus:// 
  ├─dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
  ├─dnsmasq -u lxc-dnsmasq --strict-order --bind-interfaces --pid-file=/run/lxc/dnsmasq.pid --listen-address 10.0.3.1 --dhcp-range 10.0.3.2,10.0.3.254 --dhcp-lease-max=253 --dhcp-no-override --except-interface=lo --interface=lxcbr0 --dhcp-leasefile=/var/lib/misc/dnsmasq.lxcbr0.leases --dhcp-authoritative
  ├─gdm
  │   ├─gdm-session-wor
  │   │   ├─gdm-x-session /usr/bin/gnome-session --autostart /usr/share/gdm/greeter/autostart
  │   │   │   ├─Xorg vt7 -displayfd 3 -auth /run/user/120/gdm/Xauthority -nolisten tcp -background none -noreset -keeptty -verbose 3
  │   │   │   │   ├─{llvmpipe-0}
  │   │   │   │   ├─{llvmpipe-1}
  │   │   │   │   └─{llvmpipe-2}
  │   │   │   ├─dbus-daemon --print-address 4 --session
  │   │   │   ├─gnome-session-b --autostart /usr/share/gdm/greeter/autostart
  │   │   │   │   ├─gnome-settings-
  │   │   │   │   │   ├─{dconf worker}
  │   │   │   │   │   ├─{gdbus}
  │   │   │   │   │   ├─{gmain}
  │   │   │   │   │   └─{pool}
  │   │   │   │   ├─gnome-shell --mode=gdm
  │   │   │   │   │   ├─ibus-daemon --xim --panel disable
  │   │   │   │   │   │   ├─ibus-dconf
  │   │   │   │   │   │   │   ├─{dconf worker}
  │   │   │   │   │   │   │   ├─{gdbus}
  │   │   │   │   │   │   │   └─{gmain}
  │   │   │   │   │   │   ├─ibus-engine-sim
  │   │   │   │   │   │   │   ├─{gdbus}
  │   │   │   │   │   │   │   └─{gmain}
  │   │   │   │   │   │   ├─{gdbus}
  │   │   │   │   │   │   └─{gmain}
  │   │   │   │   │   ├─{JS GC Helper}
  │   │   │   │   │   ├─{JS Sour~ Thread}
  │   │   │   │   │   ├─{Sync}
  │   │   │   │   │   ├─{dconf worker}
  │   │   │   │   │   ├─{gdbus}
  │   │   │   │   │   ├─{gmain}
  │   │   │   │   │   ├─{llvmpipe-0}
  │   │   │   │   │   ├─{llvmpipe-1}
  │   │   │   │   │   ├─{llvmpipe-2}
  │   │   │   │   │   └─{threaded-ml}
  │   │   │   │   ├─{dconf worker}
  │   │   │   │   ├─{gdbus}
  │   │   │   │   └─{gmain}
  │   │   │   ├─{gdbus}
  │   │   │   └─{gmain}
  │   │   ├─{gdbus}
  │   │   └─{gmain}

[…]

Cara yang lebih umum ditambahkan.
AB

Bravo, AB! Anda memecahkan apa yang saya dan @kos coba cari tahu - menghilangkan nama pengguna
Sergiy Kolodyazhnyy

1

Saya menemukan cara yang sulit untuk mencapai ini dari sini

sudo ps aux | rev | cut -d ' ' -f 1 | rev

revmembalikkan output psdan kemudian memotong dapat membantu Anda membatasi bidang pertama (yang merupakan yang terakhir!) dan kemudian membalikkannya lagi ...

bekerja untukku.


2
Proses dengan spasi dalam namanya tidak akan terdaftar dengan benar dengan metode ini: ps auxitu sendiri akan terdaftar sebagai aux.
kos

1
sudotidak diperlukan untuk psdan perintah memotong banyak perintah, jadi itu tidak terlalu akurat, jika Anda ingin bekerja dengan colum, gunakan awkitu jauh lebih baik untuk tugas itu. Bahkan, perintah yang tepat adalahps aux | awk '{ for(i=1;i<=NF;i++) {if ( i >= 11 ) printf $i" "}; printf "\n" }'
Sergiy Kolodyazhnyy

@kos ya, saya baru menyadarinya, terima kasih untuk menunjukkannya, Serg's awkharus bekerja.
Andrew

@Erg +1, OP telah meminta sudo psdan saya pikir awkakan terlalu rumit untuk tugas ini dan keluar bersama cut. Bagaimanapun, bukankah seharusnya Anda memperbarui jawaban Anda dengan kode itu sehingga OP dapat menerimanya?
Andrew

Itu lebih baik, tetapi secara teknis nama pengguna di Linux dapat berisi spasi, yang dapat menyebabkan perintah itu berantakan juga. psitu tidak bisa diurai secara membabi buta. Saya pikir satu-satunya metode yang aman di sini adalah ps -e -o.
kos
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.