Afficher uniquement la colonne sous COMMANDE de la commande `ps` dans le terminal


12

Je sais que nous pouvons facilement trouver ce qui suit:

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

de tous les processus en cours d'exécution à l'aide de la commande:

sudo ps aux

Mon, la question est que, est-il possible d'afficher la sortie de la colonne uniquement COMMANDet rien d'autre?

Réponses:


18

Utilisez le -odrapeau.

Pour répertorier uniquement vos propres processus

 ps -o command  

Pour répertorier tous les processus système

 ps -e -o command

Ce n'est pas la seule façon de lister les commandes, elles peuvent être imprimées avec des drapeaux de ligne de commande, ou en tant qu'exécutables uniquement (c'est ce que fait l' commandoption).

De mon commentaire ci-dessous la réponse:

command, args et cmd donnent tous la commande complète. En fait, la commande et la cmd des états de page de manuel sont des alias d'arg, avec les indicateurs - inclus. La comm ne donne que le nom de l'exacutable. Les alias qui sont ucmd et ucomm. J'ai mal lu les options AIX, celles-ci peuvent en fait être spécifiées au format printf-like,% a pour args,% c pour comm

Reportez-vous à man pspour plus d'informations sur l'utilisation et les options de format disponibles

L'approche programmatique serait un peu redondante, car elle psnous fournit déjà les options de formatage, mais cela peut être fait avec awk, ce qui est très utile lorsqu'il s'agit de sortie en colonnes.

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

Notez cependant que ce code se casse si le nom d'utilisateur contient des espaces, par exemple john doe. Cela peut être modifié en ajoutant une gsubfonction qui éliminera votre nom d'utilisateur de la psliste. Cependant, s'il y a plusieurs utilisateurs connectés au système, il peut être difficile d'effacer tous les noms d'utilisateur de la sortie. Ainsi, vous pouvez voir que le -odrapeau est beaucoup plus préféré.

Remarque, il sudon'est pas nécessaire de répertorier tous les processus avecps


Merci! Y a-t-il des différences entre ps -eo command& ps -eo comm? La seule différence que j'ai trouvé dans commandla sortie en tant que telle était: [kthreadd]alors que dans commla sortie était comme ceci: kthreadd. Est-ce que cela signifie quelque chose?
Raphael

@Raphael selon la page de manuel, la différence est qu'il comms'agit du format AIX, alors que commandc'est le format standard de style GNU. AIX est un autre système de type * NIX, de sorte que cette option peut être utilisée pour la compatibilité. Sinon, aucune différence
Sergiy Kolodyazhnyy

@Serg, je viens d'exécuter le diff <(ps -eo comm) <(ps -eo command)et il semble y avoir un hochet là-bas, pouvez-vous clarifier?
Andrew

Attention, la awksolution se casse si un nom d'utilisateur contient des espaces ( ici ); peut-être aussi juste ps aux | awk '{ for(i=11;i<=NF;i++) {printf $i" "}; printf "\n" }'?
kos

2
@Andrew Alors, j'ai lu un peu plus le manuel. Alors command, argset cmdtous donnent le plein commandement. En fait, la page de manuel indique commandet cmdsont des alias pour args, avec les -indicateurs inclus. Le commdonne le nom de l'exacutable seulement. Les alias qui sont ucmdet ucomm. J'ai mal lu les options AIX, celles-ci peuvent en fait être spécifiées avec un format semblable à printf,% a pour args,% c pour comm
Sergiy Kolodyazhnyy

4

Une manière plus générique. Nous déterminons la colonne de la commande. De cette façon, peu importe pour quels commutateurs sont utilisés ps.

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

Exemple de sortie

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

Et de quoi s'agit-il pstree?

Exemple de sortie

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

[…]

Ajout d'une manière plus générique.
AB

Bravo, AB! Vous avez résolu ce que moi et @kos essayions de comprendre - en éliminant le nom d'utilisateur
Sergiy Kolodyazhnyy

1

J'ai trouvé un moyen timide pour y parvenir à partir d' ici

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

revinverse la sortie de pspuis couper peut vous aider à délimiter le premier champ (qui est le dernier!) puis à l'inverser à nouveau ...

travaillé pour moi.


2
Les processus avec un espace dans leur nom ne seront pas répertoriés correctement par cette méthode: eux- ps auxmêmes seront répertoriés comme aux.
kos

1
sudon'est pas nécessaire pset la commande recadre un grand nombre de commandes, donc ce n'est pas très précis, si vous souhaitez travailler avec des colonnes, utilisez awk-le beaucoup mieux pour cette tâche. En fait, le commandement exact seraitps aux | awk '{ for(i=1;i<=NF;i++) {if ( i >= 11 ) printf $i" "}; printf "\n" }'
Sergiy Kolodyazhnyy

@kos ouais, je viens de m'en rendre compte, merci de l'avoir signalé, Serg awkdevrait le faire.
Andrew

@Serg +1, OP avait demandé sudo pset je pensais que ce awkserait trop compliqué pour cette tâche et je suis sorti avec cut. Quoi qu'il en soit, ne devriez-vous pas mettre à jour votre réponse avec ce code afin que le PO puisse l'accepter?
Andrew

C'est mieux, mais techniquement, les noms d'utilisateur sous Linux peuvent contenir des espaces, ce qui pourrait également conduire à une erreur de cette commande. psce n'est pas aveuglément analysable. Je pense que la seule méthode sûre ici est ps -e -o.
kos
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.