Emette solo la colonna sotto COMANDO del comando `ps` nel terminale


12

So che possiamo facilmente trovare quanto segue:

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

di tutti i processi in esecuzione utilizzando il comando:

sudo ps aux

La mia domanda è che è possibile mostrare l'output della sola colonna sotto COMMANDe nient'altro?

Risposte:


18

Usa la -obandiera.

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' commandopzione 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 psper maggiori informazioni sull'utilizzo e sulle opzioni di formato disponibili

L'approccio programmatico sarebbe un po 'ridondante, poiché psgià 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 gsubfunzione che eliminerà il tuo nome utente psdall'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 -obandiera è molto più preferita.

Nota a margine, sudonon è necessario per elencare tutti i processi conps


Grazie! Ci sono differenze tra ps -eo command& ps -eo comm? L'unica differenza che ho trovato era in commanduscita è stato in quanto tale: [kthreadd]mentre in commuscita è stato come questo: kthreadd. Questo significa qualcosa?
Raffaello,

@Raphael secondo la pagina man, la differenza è che 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
Sergiy Kolodyazhnyy,

@Serg, ho appena eseguito il file diff <(ps -eo comm) <(ps -eo command)e sembra che ci sia un po 'di rumore laggiù, puoi chiarire?
Andrew,

Attenzione, la awksoluzione si interrompe se un nome utente contiene spazi ( qui ); anche forse solo ps aux | awk '{ for(i=11;i<=NF;i++) {printf $i" "}; printf "\n" }'?
kos,

2
@Andrew Quindi, ho letto un po 'di più il manuale. Quindi command, argse cmdtutti danno il pieno comando. In effetti la pagina man indica commande cmdsono alias per args, con le -bandiere incluse. Il commdà il nome del solo exacutable. Gli alias di questo sono ucmde ucomm. Ho letto male le opzioni AIX, quelle possono essere effettivamente specificate con un formato simile a printf,% a per args,% c per comm
Sergiy Kolodyazhnyy

4

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}

[…]

Modo più generico aggiunto.
AB

Bravo, AB! Hai risolto quello che io e @kos stavamo cercando di capire - eliminando il nome utente
Sergiy Kolodyazhnyy

1

Ho trovato un modo timido per raggiungere questo obiettivo da qui

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

revinverte l'output di pse quindi taglia può aiutarti a delimitare il primo campo (che è l'ultimo!) e quindi invertire di nuovo ...

ha funzionato per me.


2
I processi con uno spazio nel loro nome non verranno elencati correttamente con questo metodo: esso ps auxstesso verrà elencato come aux.
kos,

1
sudonon è necessario pse 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" }'
Sergiy Kolodyazhnyy il

@kos, sì, l'ho appena realizzato, grazie per averlo sottolineato, Serg awkdovrebbe funzionare.
Andrew,

@Serg +1, OP aveva richiesto sudo pse pensavo che awksarebbe 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?
Andrew,

È meglio, ma tecnicamente i nomi utente su Linux possono contenere spazi, il che potrebbe portare anche a quel comando a rovinare. psnon è semplicemente analizzabile alla cieca. Penso che l'unico metodo sicuro qui sia ps -e -o.
kos,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.