Yanıtlar:
-o
Bayrak 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 command
seç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 ps
kullanımı ve mevcut biçim seçenekleri hakkında daha fazla bilgi için
Programlama yaklaşımı biraz fazla olurdu, çünkü ps
zaten 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
, ps
listeden 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, -o
bayrağın çok daha fazla tercih edildiğini görebilirsiniz .
Yan not, sudo
tüm işlemleri listelemek için gerekli değildir.ps
comm
olduğu gibi AIX command
formatıdır. AIX başka bir * NIX benzeri sistemdir, bu nedenle uyumluluk için bu seçenek kullanılabilir. Aksi takdirde, fark yok
diff <(ps -eo comm) <(ps -eo command)
ve orada bir çıngırak var gibi görünüyor, açıklığa kavuşturabilir misin?
command
, args
ve cmd
hepsi tam komut veriyor. Aslında man sayfası , bayraklar ile birlikte belirtilir command
ve cmd
takma 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
-
comm
ucmd
ucomm
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}
[…]
Ben bu başarmak için bashy yolunu buldu burada
sudo ps aux | rev | cut -d ' ' -f 1 | rev
rev
çıkışını tersine çevirir ps
ve sonra kes, ilk alanı sınırlandırmanıza yardımcı olur (sonuncusu!) ve sonra tekrar ters çevirir ...
benim için çalıştı.
ps aux
kendisi olarak listelenir aux
.
sudo
için gerekli değildir ps
ve komut çok sayıda komutu kırpar, bu yüzden çok doğru değildir, sütunlarla çalışmak istiyorsanız, awk
bu 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" }'
awk
çalışması gerekir.
sudo ps
ve awk
bu 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?
ps
sadece körü körüne ayrıştırılamaz. Bence buradaki tek güvenli yöntem ps -e -o
.
ps -eo command
& Arasında herhangi bir fark varps -eo comm
mı? Bulunan tek fark vardıcommand
: çıkış gibi olduğu[kthreadd]
, oysacomm
çıkış bu gibi hidroliz edilmiştirkthreadd
. Bu bir şey ifade ediyor mu?