Geben Sie nur die Spalte unter BEFEHL des Befehls "ps" im Terminal aus

12

Ich weiß, dass wir leicht Folgendes finden können:

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

aller laufenden Prozesse mit dem Befehl:

sudo ps aux

Meine Frage ist, ist es möglich, die Ausgabe nur der Spalte unter COMMANDund sonst nichts zu zeigen ?

Raphael
quelle

Antworten:

18

Verwenden -oFlagge.

Um nur Ihre eigenen Prozesse aufzulisten

 ps -o command  

Um alle Systemprozesse aufzulisten

 ps -e -o command

Dies ist nicht die einzige Möglichkeit, Befehle aufzulisten. Sie können entweder mit Befehlszeilen-Flags oder nur als ausführbare Dateien gedruckt werden (was bei dieser commandOption der Fall ist).

Aus meinem Kommentar unten die Antwort:

befehl, args und cmd geben alle den vollen befehl. In der Tat sind Befehl und Befehl der man-Seite Aliase für args, einschließlich der - Flags. Das Komm gibt nur den Namen der ausführbaren Datei an. Aliase dazu sind ucmd und ucomm. Wenn ich AIX-Optionen falsch verstehe, können diese tatsächlich mit einem printf-ähnlichen Format angegeben werden,% a für args,% c für comm

Siehe man psfür mehr Informationen zur Verwendung und die verfügbaren Formatoptionen

Ein programmatischer Ansatz wäre ein bisschen redundant, da er psuns bereits die Formatierungsoptionen bietet, dies kann jedoch durchgeführt werden awk, was beim Umgang mit kolumnisierten Ausgaben sehr hilfreich ist.

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

Beachten Sie jedoch, dass dieser Code abbricht, wenn der Benutzername Leerzeichen enthält, z john doe. Dies kann durch Hinzufügen einer gsubFunktion geändert werden, die Ihren Benutzernamen aus der psListe entfernt. Wenn jedoch mehrere Benutzer am System angemeldet sind, ist es möglicherweise schwierig, alle Benutzernamen aus der Ausgabe zu löschen. Sie sehen also, dass die -oFlagge viel bevorzugter ist.

Randnotiz, sudoist nicht erforderlich, um alle Vorgänge mit aufzulistenps

Sergiy Kolodyazhnyy
quelle
Dankeschön! Gibt es Unterschiede zwischen ps -eo command& ps -eo comm? Der einzige Unterschied , den ich fand , war in commandder Ausgabe als solche war: [kthreadd]während in commder Ausgabe als dies: kthreadd. Bedeutet das etwas?
Raphael
@Raphael Laut der Manpage ist der Unterschied das commAIX-Format, wobei commandes sich um das Standard-GNU-Format handelt. AIX ist ein anderes * NIX-ähnliches System, daher kann diese Option aus Gründen der Kompatibilität verwendet werden. Ansonsten kein Unterschied
Sergiy Kolodyazhnyy
@Serg, ich habe gerade das ausgeführt diff <(ps -eo comm) <(ps -eo command)und da unten scheint es ein ziemliches Rasseln zu geben, kannst du das klarstellen?
Andrew
Achtung, die awkLösung bricht ab, wenn ein Benutzername Leerzeichen enthält ( hier ). auch vielleicht nur ps aux | awk '{ for(i=11;i<=NF;i++) {printf $i" "}; printf "\n" }'?
Kos
1
@ Andrew Also, ich habe das Handbuch ein bisschen mehr gelesen. Also command, argsund cmdalle geben das volle Kommando. In der Tat gibt die Manpage an commandund cmdist ein Alias ​​für args, wobei die -Flags enthalten sind. Der commgibt nur den Namen der ausführbaren Datei an. Aliase dazu sind ucmdund ucomm. Ich habe die AIX-Optionen falsch verstanden, diese können tatsächlich mit einem printf-ähnlichen Format angegeben werden,% a für args,% c für comm
Sergiy Kolodyazhnyy
4

Ein allgemeinerer Weg. Wir bestimmen die Spalte des Befehls. Auf diese Weise spielt es keine Rolle, für welche Schalter verwendet werden ps.

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

Beispielausgabe

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

Und worum geht es pstree?

Beispielausgabe

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

[…]
AB
quelle
Mehr generische Art und Weise hinzugefügt.
AB
Bravo, AB! Sie haben gelöst, was ich und @kos herauszufinden versuchten - den Benutzernamen zu eliminieren
Sergiy Kolodyazhnyy 18.11.15
1

Ich habe einen bescheidenen Weg gefunden, um dies von hier aus zu erreichen

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

revDurch Umkehren der Ausgabe von psund anschließendes Ausschneiden können Sie das erste Feld (welches das letzte ist!) eingrenzen und dann wieder umkehren ...

arbeitete für mich.

Andrew
quelle
2
Prozesse mit einem Leerzeichen im Namen werden von dieser Methode nicht korrekt aufgelistet: ps auxselbst wird als aufgeführt aux.
Kos
1
sudoist nicht notwendig für psund der Befehl schneidet viele der Befehle ab, daher ist es nicht sehr genau. Wenn Sie mit Spalten arbeiten möchten, verwenden Sie awkes viel besser für diese Aufgabe. In der Tat wäre der genaue Befehlps aux | awk '{ for(i=1;i<=NF;i++) {if ( i >= 11 ) printf $i" "}; printf "\n" }'
Sergiy Kolodyazhnyy
@kos ja, ich habe es gerade gemerkt, danke, dass du darauf hingewiesen hast, dass Serg's awkfunktionieren sollte.
Andrew
@ Serg +1, hatte OP angefordert sudo psund ich dachte, awkwäre zu kompliziert für diese Aufgabe und kam mit raus cut. Sollten Sie Ihre Antwort nicht mit diesem Code aktualisieren, damit das OP sie akzeptieren kann?
Andrew
Es ist besser, aber technisch gesehen können Benutzernamen unter Linux Leerzeichen enthalten, die dazu führen können, dass dieser Befehl ebenfalls durcheinander kommt. pses ist einfach nicht blindlings analysierbar. Ich denke, die einzig sichere Methode ist hier ps -e -o.
Kos