Odpowiedzi:
Użyj -o
flagi.
Aby wyświetlić listę tylko własnych procesów
ps -o command
Aby wyświetlić listę wszystkich procesów systemowych
ps -e -o command
Nie jest to jedyny sposób wyświetlania poleceń, mogą być drukowane z flagami wiersza poleceń lub tylko jako pliki wykonywalne (co command
robi ta opcja).
Z mojego komentarza poniżej odpowiedź:
polecenia, argumenty i cmd dają pełne polecenie. W rzeczywistości polecenia man page Stany i cmd są aliasami argumentów, z dołączonymi flagami. Comm podaje tylko nazwę egzacutable. Pseudonimy to ucmd i ucomm. Źle przeczytałem o opcjach systemu AIX, można je określić za pomocą formatu podobnego do printf,% a dla argumentów,% c dla komunikatora
Patrz man ps
uzyskać więcej informacji na temat użytkowania i dostępnych opcji formatowania
Podejście programowe byłoby nieco zbędne, ponieważ ps
już zapewnia nam opcje formatowania, ale można to zrobić awk
, co jest bardzo przydatne, gdy mamy do czynienia ze skumulowanymi danymi wyjściowymi.
ps aux | awk '{ for(i=1;i<=NF;i++) {if ( i >= 11 ) printf $i" "}; printf "\n" }'
Należy jednak pamiętać, że ten kod łamie się, jeśli nazwa użytkownika zawiera spacje, np john doe
. Można to zmienić, dodając gsub
funkcję, która usunie twoją nazwę użytkownika z ps
listy. Jeśli jednak do systemu zalogowanych jest wielu użytkowników, usunięcie wszystkich nazw użytkowników z danych wyjściowych może być trudne. W ten sposób widać, że -o
flaga jest znacznie bardziej preferowana.
Uwaga dodatkowa: sudo
nie jest konieczne wylistowanie wszystkich procesówps
comm
jest to format AIX, gdzie podobnie jak command
standardowy format GNU. AIX jest kolejnym systemem podobnym do * NIX, więc można użyć tej opcji dla zapewnienia zgodności. W przeciwnym razie nie ma różnicy
diff <(ps -eo comm) <(ps -eo command)
i wydaje się, że jest tam dość grzechotka, czy możesz to wyjaśnić?
command
, args
i cmd
wszystkie dają pełną kontrolę. W rzeczywistości strona man stanów command
i cmd
są aliasy args
, z -
flagami zawartych. comm
Podaje nazwę tylko exacutable. Pseudonimy to ucmd
i ucomm
. Źle przeczytałem o opcjach systemu AIX, można je tak naprawdę określić za pomocą formatu podobnego do printf,% a dla argumentów,% c dla komunikatora
Bardziej ogólny sposób. Określamy kolumnę polecenia. W ten sposób nie ma znaczenia, które przełączniki są używane ps
.
ps ax | awk -v p='COMMAND' 'NR==1 {n=index($0, p); next} {print substr($0, n)}'
Próbka wyjściowa
% 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
[…]
I co o pstree
?
Próbka wyjściowa
% 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}
[…]
Znalazłem odważny sposób na osiągnięcie tego stąd
sudo ps aux | rev | cut -d ' ' -f 1 | rev
rev
odwraca dane wyjściowe, ps
a następnie wycinanie może pomóc ci wytyczyć pierwsze pole (które jest ostatnie!), a następnie odwrócić je ponownie ...
pracował dla mnie.
ps aux
samo będzie na liście jako aux
.
sudo
nie jest konieczne, ps
a polecenie przycina wiele poleceń, więc nie jest zbyt dokładne, jeśli chcesz pracować z kolumnami, użyj awk
go znacznie lepiej do tego zadania. W rzeczywistości dokładne polecenie ps aux | awk '{ for(i=1;i<=NF;i++) {if ( i >= 11 ) printf $i" "}; printf "\n" }'
awk
powinien to załatwić .
sudo ps
i pomyślałem awk
, że będzie to zbyt skomplikowane do tego zadania i wyszło cut
. W każdym razie, czy nie powinieneś zaktualizować swojej odpowiedzi tym kodem, aby PO mógł ją zaakceptować?
ps
po prostu nie można go ślepo przetwarzać. Myślę, że jedyną bezpieczną metodą jest tutaj ps -e -o
.
ps -eo command
&ps -eo comm
? Jedyną różnicą znalazłem wcommand
wyjście było jako takie:[kthreadd]
podczas gdy wcomm
wyjście było jak ten:kthreadd
. Czy to coś znaczy?