Terminaldeki `ps` komutunun yalnızca COMMAND altındaki sütunu çıktılar


12

Aşağıdakileri kolayca bulabileceğimizi biliyorum:

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

komutunu kullanarak çalışan tüm işlemlerin:

sudo ps aux

Benim sorum şu, sadece altındaki sütunun çıktısını göstermek COMMANDve başka bir şey göstermek mümkün mü?

Yanıtlar:


18

-oBayrak kullanın .

Yalnızca kendi işlemlerinizi listelemek için

 ps -o command  

Tüm sistem işlemlerini listelemek

 ps -e -o command

Komutları listelemenin tek yolu bu değildir, komut satırı bayraklarıyla veya yalnızca yürütülebilir olarak yazdırılabilir (bu commandseçenek ne yapar).

Cevabımın altındaki yorumumdan:

command, args ve cmd tam komut verir. Aslında man sayfası durumları komutu ve cmd, - bayrakları dahil olmak üzere argümanlar için takma adlardır. Comm sadece kesin olanın adını verir. Bunun takma adları ucmd ve ucomm'dur. AIX seçenekleri hakkında yanlış okudum, bunlar aslında printf benzeri formatta, argümanlar için% a, comm için% c ile belirtilebilir

Bakın man pskullanımı ve mevcut biçim seçenekleri hakkında daha fazla bilgi için

Programlama yaklaşımı biraz fazla olurdu, çünkü pszaten biçimlendirme seçeneklerini sağlıyor, ancak yapılabilir awk, bu da sütunlu çıktı ile uğraşırken çok yararlıdır.

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

Ancak, kullanıcı adı boşluk içeriyorsa bu kodun kırıldığını unutmayın, örn john doe. Bu gsub, pslisteden kullanıcı adınızı kaldıracak işlev ekleyerek değiştirilebilir . Ancak, sistemde oturum açmış birden fazla kullanıcı varsa, çıktıdaki tüm kullanıcı adlarını silmek zor olabilir. Böylece, -obayrağın çok daha fazla tercih edildiğini görebilirsiniz .

Yan not, sudotüm işlemleri listelemek için gerekli değildir.ps


Teşekkür ederim! ps -eo command& Arasında herhangi bir fark var ps -eo commmı? Bulunan tek fark vardı command: çıkış gibi olduğu [kthreadd], oysa commçıkış bu gibi hidroliz edilmiştir kthreadd. Bu bir şey ifade ediyor mu?
Raphael

@Rephael man sayfasına göre, fark standart GNU stil formatı commolduğu gibi AIX commandformatıdır. AIX başka bir * NIX benzeri sistemdir, bu nedenle uyumluluk için bu seçenek kullanılabilir. Aksi takdirde, fark yok
Sergiy Kolodyazhnyy

@Serg, az önce idam ettim diff <(ps -eo comm) <(ps -eo command)ve orada bir çıngırak var gibi görünüyor, açıklığa kavuşturabilir misin?
Andrew

Dikkat edin, awkbir kullanıcı adı boşluk içeriyorsa çözüm kırılır ( burada ); ayrıca sadece ps aux | awk '{ for(i=11;i<=NF;i++) {printf $i" "}; printf "\n" }'?
kos

2
@Andrew Bu yüzden, kılavuzu biraz daha okudum. Yani command, argsve cmdhepsi tam komut veriyor. Aslında man sayfası , bayraklar ile birlikte belirtilir commandve cmdtakma adlardır . Sadece exacutable adını verir. Bunun takma adları ve . Ben AIX seçenekleri hakkında yanlış okudum, bu aslında printf benzeri bir format, args için% a, comm için% c ile belirtilebilirargs-commucmducomm
Sergiy Kolodyazhnyy

4

Daha genel bir yol. Komutun sütununu belirliyoruz. Bu şekilde, hangi anahtarların kullanıldığı önemli değildir ps.

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

Örnek çıktı

% 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
[…]

Peki ne olacak pstree?

Örnek çıktı

% 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}

[…]

Daha genel bir yol eklendi.
AB

Bravo, AB! Ben ve @kos'un anlamaya çalıştıklarını çözdün - kullanıcı adını ortadan kaldırarak
Sergiy Kolodyazhnyy

1

Ben bu başarmak için bashy yolunu buldu burada

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

revçıkışını tersine çevirir psve sonra kes, ilk alanı sınırlandırmanıza yardımcı olur (sonuncusu!) ve sonra tekrar ters çevirir ...

benim için çalıştı.


2
Adlarında boşluk bulunan işlemler bu yöntemle doğru bir şekilde listelenmez: ps auxkendisi olarak listelenir aux.
kos

1
sudoiçin gerekli değildir psve komut çok sayıda komutu kırpar, bu yüzden çok doğru değildir, sütunlarla çalışmak istiyorsanız, awkbu görev için çok daha iyi kullanın . Aslında, kesin komut olurdups aux | awk '{ for(i=1;i<=NF;i++) {if ( i >= 11 ) printf $i" "}; printf "\n" }'
Sergiy Kolodyazhnyy

@kos evet, farkettim, işaret ettiğiniz için teşekkürler, Serg'in awkçalışması gerekir.
Andrew

@Serg +1, OP talep etmişti sudo psve awkbu görev için çok karmaşık olacağını düşündüm ve ortaya çıktı cut. Her neyse, OP'nin kabul edebilmesi için cevabınızı bu kodla güncellememelisiniz?
Andrew

Daha iyi, ancak teknik olarak Linux üzerindeki kullanıcı adları, bu komutun da bozulmasına neden olabilecek boşluklar içerebilir. pssadece körü körüne ayrıştırılamaz. Bence buradaki tek güvenli yöntem ps -e -o.
kos
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.