터미널에서`ps` 명령의 명령 하의 열만 출력


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옵션이 수행하는 작업).

내 의견에서 대답은 다음과 같습니다.

command, args 및 cmd는 모두 전체 명령을 제공합니다. 실제로 man page states command 및 cmd는-플래그가 포함 된 args의 별명입니다. 통신은 실행 가능한 이름 만 제공합니다. 이에 대한 별명은 ucmd 및 ucomm입니다. AIX 옵션에 대해 잘못 읽었습니다. 실제로 printf와 같은 형식, args의 경우 % a, comm의 경우 % c로 지정할 수 있습니다

man ps사용법 및 사용 가능한 형식 옵션에 대한 자세한 내용은 참조하십시오

프로그래밍 방식은 ps이미 중복 옵션 이 될 것입니다. 이미 서식 옵션을 제공했지만 열 awk처리 된 출력을 처리 할 때 매우 유용합니다.

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

그러나 username에 공백이 포함되어 있으면이 코드가 작동하지 않습니다 (예 :) john doe. 이것은 목록 gsub에서 사용자 이름을 제거하는 기능을 추가하여 수정 될 수 있습니다 ps. 그러나 시스템에 여러 사용자가 로그인 한 경우 출력에서 ​​모든 사용자 이름을 지우는 것이 어려울 수 있습니다. 따라서 -o플래그가 훨씬 선호 된다는 것을 알 수 있습니다 .

참고로 sudo모든 프로세스를 나열 할 필요는 없습니다.ps


감사합니다! ps -eo command& 사이에 차이점이 ps -eo comm있습니까? 내가 찾은 유일한 차이점 command은 출력과 [kthreadd]같았습니다 comm. 출력은 다음과 같습니다 kthreadd. 이것이 무엇을 의미합니까?
Raphael

매뉴얼 페이지에 따르면 @Raphael의 차이점 은 표준 GNU 스타일 형식 comm과 마찬가지로 AIX 형식 command입니다. AIX는 시스템과 같은 또 다른 * NIX이므로 옵션을 호환성에 사용할 수 있습니다. 그렇지 않으면, 차이가 없습니다
Sergiy Kolodyazhnyy

@ Serg, 나는 방금 실행 diff <(ps -eo comm) <(ps -eo command)했고 거기에 꽤 딸랑이가있는 것 같습니다. 설명 할 수 있습니까?
앤드류

는 조심 awk이름에 공백 (포함 된 경우 솔루션 휴식을 여기에 ); 또한 어쩌면 ps aux | awk '{ for(i=11;i<=NF;i++) {printf $i" "}; printf "\n" }'?
kos

2
@Andrew 그래서 매뉴얼을 조금 더 읽었습니다. 따라서 command, argscmd모두가 전체 명령을 제공합니다. 사실 매뉴얼 페이지 상태에서 commandcmd앨리어스 (alias) args와, -포함 플래그. 는 comm단지 exacutable의 이름을 제공합니다. 에 대한 별칭은 ucmducomm입니다. AIX 옵션에 대해 잘못 읽었습니다. 실제로 printf와 같은 형식, args의 경우 % a, comm의 경우 % c로 지정할 수 있습니다
Sergiy Kolodyazhnyy

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

브라보, AB! 당신은 나와 @kos가 알아 내려고 노력한 것을 해결했습니다-사용자 이름 제거
Sergiy Kolodyazhnyy

1

여기 에서 이것을 달성 할 수있는 bashy 방법을 찾았 습니다

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

rev출력을 뒤집은 ps다음 cut을 사용하면 첫 번째 필드 (마지막입니다!)를 구분하고 다시 뒤집을 수 있습니다 ...

나를 위해 일했다.


2
이름에 공백이있는 프로세스는이 방법으로 올바르게 나열되지 않습니다. ps aux자체는로 표시됩니다 aux.
kos

1
sudo필요하지 않으며 ps명령이 많은 명령을 자르기 때문에 매우 정확하지 않습니다. colums로 작업하려면 awk해당 작업에 훨씬 좋습니다. 실제로, 정확한 명령은 다음과 같습니다ps aux | awk '{ for(i=1;i<=NF;i++) {if ( i >= 11 ) printf $i" "}; printf "\n" }'
Sergiy Kolodyazhnyy

@ kos 예, 방금 깨달았습니다. 지적 해 주셔서 감사 awk합니다. Serg 가 작동해야합니다.
앤드류

@ Serg +1, OP가 요청 했으며이 작업에 너무 복잡 sudo ps하다고 생각 awk하여 나왔습니다 cut. 어쨌든 OP가 수락 할 수 있도록 해당 코드로 답변을 업데이트해서는 안됩니까?
앤드류

더 낫지 만 Linux의 기술적으로 사용자 이름에는 공백이 포함될 수 있으므로 해당 명령이 엉망이 될 수 있습니다. ps그것은 맹목적으로 분석 할 수 없습니다. 여기서 유일한 안전한 방법은 ps -e -o입니다.
kos
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.