Risposte:
Usa la -o
bandiera.
Per elencare solo i tuoi processi
ps -o command
Per elencare tutti i processi di sistema
ps -e -o command
Questo non è l'unico modo per elencare i comandi, possono essere stampati con flag della riga di comando o solo come eseguibili (che è l' command
opzione che fa).
Dal mio commento sotto la risposta:
command, args e cmd danno tutti il comando completo. In effetti man page state command e cmd sono alias per args, con i flag - inclusi. La comunicazione dà solo il nome dell'esacutabile. Gli alias di questo sono ucmd e ucomm. Ho letto male le opzioni AIX, quelle possono essere effettivamente specificate con un formato simile a printf,% a per args,% c per comm
Fare riferimento a man ps
per maggiori informazioni sull'utilizzo e sulle opzioni di formato disponibili
L'approccio programmatico sarebbe un po 'ridondante, poiché ps
già ci fornisce le opzioni di formattazione, ma può essere fatto awk
, il che è molto utile quando si tratta di output in colonne.
ps aux | awk '{ for(i=1;i<=NF;i++) {if ( i >= 11 ) printf $i" "}; printf "\n" }'
Si noti tuttavia che questo codice si interrompe se il nome utente contiene spazi bianchi, ad es john doe
. Questo può essere modificato con l'aggiunta della gsub
funzione che eliminerà il tuo nome utente ps
dall'elenco. Tuttavia, se vi sono più utenti connessi al sistema, potrebbe essere difficile cancellare tutti i nomi utente dall'output. Quindi, puoi vedere che la -o
bandiera è molto più preferita.
Nota a margine, sudo
non è necessario per elencare tutti i processi conps
comm
è il formato AIX, dove command
è il formato standard in stile GNU. AIX è un altro sistema simile a * NIX, quindi questa opzione può essere utilizzata per la compatibilità. Altrimenti, nessuna differenza
diff <(ps -eo comm) <(ps -eo command)
e sembra che ci sia un po 'di rumore laggiù, puoi chiarire?
command
, args
e cmd
tutti danno il pieno comando. In effetti la pagina man indica command
e cmd
sono alias per args
, con le -
bandiere incluse. Il comm
dà il nome del solo exacutable. Gli alias di questo sono ucmd
e ucomm
. Ho letto male le opzioni AIX, quelle possono essere effettivamente specificate con un formato simile a printf,% a per args,% c per comm
Un modo più generico. Determiniamo la colonna del comando. In questo modo, non importa per quali interruttori vengono utilizzati ps
.
ps ax | awk -v p='COMMAND' 'NR==1 {n=index($0, p); next} {print substr($0, n)}'
Uscita campione
% 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
[…]
E di cosa si tratta pstree
?
Uscita campione
% 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}
[…]
Ho trovato un modo timido per raggiungere questo obiettivo da qui
sudo ps aux | rev | cut -d ' ' -f 1 | rev
rev
inverte l'output di ps
e quindi taglia può aiutarti a delimitare il primo campo (che è l'ultimo!) e quindi invertire di nuovo ...
ha funzionato per me.
ps aux
stesso verrà elencato come aux
.
sudo
non è necessario ps
e il comando ritaglia molti comandi, quindi non è molto preciso, se vuoi lavorare con le colonne, usa awk
è molto meglio per quel compito. In effetti, il comando esatto sarebbeps aux | awk '{ for(i=1;i<=NF;i++) {if ( i >= 11 ) printf $i" "}; printf "\n" }'
awk
dovrebbe funzionare.
sudo ps
e pensavo che awk
sarebbe stato troppo complicato per questo compito e ne sono uscito cut
. Ad ogni modo, non dovresti aggiornare la tua risposta con quel codice in modo che l'OP possa accettarla?
ps
non è semplicemente analizzabile alla cieca. Penso che l'unico metodo sicuro qui sia ps -e -o
.
ps -eo command
&ps -eo comm
? L'unica differenza che ho trovato era incommand
uscita è stato in quanto tale:[kthreadd]
mentre incomm
uscita è stato come questo:kthreadd
. Questo significa qualcosa?