टर्मिनल में 'ps` कमांड के COMMAND के तहत केवल कॉलम आउटपुट करें


12

मुझे पता है कि हम आसानी से निम्नलिखित पा सकते हैं:

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

कमांड का उपयोग करके सभी चल रही प्रक्रियाएं:

sudo ps aux

मेरा, सवाल यह है कि, क्या केवल कॉलम के आउटपुट को दिखाना संभव है COMMANDऔर कुछ नहीं?

जवाबों:


18

-oध्वज का प्रयोग करें ।

केवल अपनी प्रक्रियाओं को सूचीबद्ध करने के लिए

 ps -o command  

सभी सिस्टम प्रक्रियाओं को सूचीबद्ध करने के लिए

 ps -e -o command

यह कमांडों को सूचीबद्ध करने का एकमात्र तरीका नहीं है, उन्हें या तो कमांड लाइन के झंडे के साथ मुद्रित किया जा सकता है, या केवल निष्पादन योग्य के रूप में (जो कि commandविकल्प क्या करता है)।

मेरी टिप्पणी से उत्तर का जवाब:

कमांड, आर्ग्स, और cmd सभी पूरी कमांड देते हैं। वास्तव में मैन पेज में कमांड और सीएमडी आर्ग के लिए उपनाम हैं - जिसमें झंडे शामिल हैं। कॉम केवल एक्ज़ीक्यूटेबल का नाम देता है। इसके लिए उपनाम ucmd और ucomm हैं। मैं AIX विकल्पों के बारे में गलत हूं, जिन्हें वास्तव में प्रिंटफ जैसे प्रारूप के साथ निर्दिष्ट किया जा सकता है, आर्ग्स के लिए%, कॉम के लिए% c

man psउपयोग और उपलब्ध प्रारूप विकल्पों पर अधिक जानकारी के लिए देखें

प्रोग्रामेटिक दृष्टिकोण थोड़ा बेमानी होगा, क्योंकि psपहले से ही हमें फ़ॉर्मेटिंग विकल्प प्रदान करता है, लेकिन इसके साथ किया जा सकता है awk, जो स्तंभित आउटपुट से निपटने के दौरान बहुत उपयोगी है।

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

लेकिन ध्यान दें, कि इस कोड टूट जाता है, तो उपयोगकर्ता नाम, रिक्त स्थान हैं जैसे john doe। यह gsubफ़ंक्शन जोड़ने के साथ संशोधित किया जा सकता है जो psसूची से आपके उपयोगकर्ता नाम को हटा देगा । हालाँकि, अगर कई उपयोगकर्ता सिस्टम में लॉग इन हैं, तो आउटपुट से सभी उपयोगकर्ता नाम को गलत करना मुश्किल हो सकता है। इस प्रकार, आप देख सकते हैं कि -oझंडा अधिक पसंदीदा है।

साइड नोट, sudoसभी प्रक्रियाओं को सूचीबद्ध करने के लिए आवश्यक नहीं हैps


धन्यवाद! वहाँ के बीच कोई अंतर है ps -eo commandऔर ps -eo comm? मुझे केवल इतना अंतर मिला commandकि आउटपुट में ऐसा था: [kthreadd]जबकि commआउटपुट इस प्रकार था kthreadd:। क्या यह कुछ भी दर्शाता है?
राफेल

@ पेज मैन पेज के अनुसार, अंतर यह है कि commAIX प्रारूप है, जहां commandमानक GNU शैली प्रारूप है। AIX सिस्टम की तरह एक और * NIX है, ताकि विकल्प को कॉम्पेटिबिलिटी के लिए इस्तेमाल किया जा सके। अन्यथा, कोई अंतर नहीं
सेर्गेई कोलोडियाज़नी

@ शेर, मैंने अभी-अभी अमल किया है diff <(ps -eo comm) <(ps -eo command)और लगता है कि नीचे काफी खड़खड़ाहट हो रही है, क्या आप स्पष्ट कर सकते हैं?
एंड्रयू

बाहर देखो, awkसमाधान टूट जाता है अगर एक उपयोगकर्ता नाम रिक्त स्थान ( यहाँ ); शायद भी बस ps aux | awk '{ for(i=11;i<=NF;i++) {printf $i" "}; printf "\n" }'?
कोस

2
@ और फिर, मैंने मैनुअल को थोड़ा और पढ़ा है। तो command, argsऔर cmdसभी पूर्ण आदेश देते हैं। वास्तव में मैन पेज बताता है commandऔर इसमें शामिल झंडे के साथ cmdउपनाम हैं। केवल exacutable का नाम देता है। उस के लिए उपनाम और हैं । मैं AIX विकल्पों के बारे में गलत हूं, जिन्हें वास्तव में प्रिंटफ जैसे प्रारूप के साथ निर्दिष्ट किया जा सकता है, आर्ग्स के लिए%, कॉम के लिए% cargs-commucmducomm
सेर्गेई कोलोडियाज़नी

4

एक अधिक सामान्य तरीका है। हम कमांड के कॉलम को निर्धारित करते हैं। इस तरह, यह कोई फर्क नहीं पड़ता कि कौन से स्विच का उपयोग किया जाता है ps

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

नमूना उत्पादन

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

और किस बारे में है pstree?

नमूना उत्पादन

% 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

ब्रावो, एबी! तुम मुझे और @kos क्या यह पता लगाने की कोशिश कर रहे थे हल - नष्ट उपयोगकर्ता नाम
सर्गी Kolodyazhnyy

1

मुझे यहां से इसे हासिल करने का एक बड़ा रास्ता मिल गया

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

revके उत्पादन को उलट देता है psऔर फिर कटौती आपको पहले क्षेत्र को परिसीमित करने में मदद कर सकती है (जो कि अंतिम है!) और फिर इसे उल्टा करें ...

मेरे लिए काम किया।


2
उनके नाम के स्थान वाली प्रक्रियाएँ इस विधि से सही ढंग से सूचीबद्ध नहीं होंगी: ps auxखुद को इस प्रकार सूचीबद्ध किया जाएगा aux
कोस

1
sudoके लिए आवश्यक नहीं है psऔर कमांड फसलों को बहुत सारी कमांड देता है, इसलिए यह बहुत सटीक नहीं है, यदि आप कॉलम्स के साथ काम करना चाहते हैं, तो awkयह उस कार्य के लिए बहुत बेहतर है। वास्तव में, सटीक कमान होगीps aux | awk '{ for(i=1;i<=NF;i++) {if ( i >= 11 ) printf $i" "}; printf "\n" }'
सर्गी कोलोडियाज़नी

@ हाँ, मुझे बस इसका एहसास हुआ, इसे इंगित करने के लिए धन्यवाद, सर्ग awkको यह काम करना चाहिए।
एंड्रयू

@Serg +1, ओपी ने अनुरोध किया था sudo psऔर मुझे लगा कि awkइस कार्य के लिए बहुत जटिल होगा और साथ आया था cut। वैसे भी, क्या आपको उस कोड के साथ अपना जवाब अपडेट नहीं करना चाहिए ताकि ओपी इसे स्वीकार कर सके?
एंड्रयू

यह बेहतर है, लेकिन तकनीकी रूप से लिनक्स पर उपयोगकर्ता नाम में रिक्त स्थान हो सकते हैं, जो उस आदेश को भी गड़बड़ कर सकते हैं। psयह सिर्फ आंख मूंदने योग्य नहीं है। मुझे लगता है कि यहां एकमात्र सुरक्षित तरीका है ps -e -o
कोस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.