Câu trả lời:
Sử dụng -o
cờ.
Chỉ liệt kê các quy trình của riêng bạn
ps -o command
Để liệt kê tất cả các quy trình hệ thống
ps -e -o command
Đây không phải là cách duy nhất để liệt kê các lệnh, chúng có thể được in bằng cờ dòng lệnh hoặc chỉ có thể thực thi được (đó là command
tùy chọn nào).
Từ nhận xét của tôi dưới đây câu trả lời:
lệnh, args và cmd đều cung cấp lệnh đầy đủ. Trong thực tế trang man trạng thái lệnh và cmd là bí danh cho args, với các cờ - bao gồm. Các comm chỉ cho tên của exacutable. Bí danh cho đó là ucmd và ucomm. Tôi đã đọc sai về các tùy chọn AIX, chúng có thể được chỉ định thực sự với định dạng giống như printf,% a cho args,% c cho comm
Tham khảo để man ps
biết thêm thông tin về cách sử dụng và các tùy chọn định dạng có sẵn
Cách tiếp cận theo chương trình sẽ là một chút dư thừa, vì ps
đã cung cấp cho chúng ta các tùy chọn định dạng, nhưng nó có thể được thực hiện awk
, rất hữu ích khi xử lý đầu ra được cột.
ps aux | awk '{ for(i=1;i<=NF;i++) {if ( i >= 11 ) printf $i" "}; printf "\n" }'
Tuy nhiên, lưu ý rằng mã này bị hỏng nếu tên người dùng chứa khoảng trắng, vd john doe
. Điều này có thể được sửa đổi bằng cách thêm gsub
chức năng sẽ loại bỏ tên người dùng của bạn khỏi ps
danh sách. Tuy nhiên, nếu có nhiều người dùng đăng nhập vào hệ thống, điều đó có thể khó thực hiện sai tất cả tên người dùng từ đầu ra. Vì vậy, bạn có thể thấy rằng -o
cờ được ưa thích hơn nhiều.
Lưu ý bên, sudo
không cần thiết để liệt kê tất cả các quy trình vớips
comm
định dạng AIX, trong đó command
là định dạng kiểu GNU tiêu chuẩn. AIX là một hệ thống giống như * NIX khác, do đó tùy chọn đó có thể được sử dụng cho khả năng tương thích.
diff <(ps -eo comm) <(ps -eo command)
và dường như có một tiếng rít ở dưới đó, bạn có thể làm rõ?
command
, args
và cmd
tất cả đưa ra mệnh lệnh đầy đủ. Trong thực tế trang man trạng thái command
và cmd
là bí danh cho args
, với các -
cờ bao gồm. Tên comm
cho chỉ của exacutable. Bí danh cho điều đó là ucmd
và ucomm
. Tôi đã đọc sai về các tùy chọn AIX, những tùy chọn này thực sự có thể được chỉ định với định dạng giống như printf,% a cho args,% c cho comm
Một cách chung chung hơn. Chúng tôi xác định cột của lệnh. Theo cách này, việc chuyển đổi được sử dụng cho mục đích gì không quan trọng ps
.
ps ax | awk -v p='COMMAND' 'NR==1 {n=index($0, p); next} {print substr($0, n)}'
Sản lượng mẫu
% 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
[…]
Và những gì về pstree
?
Sản lượng mẫu
% 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}
[…]
Tôi tìm thấy một cách bashy để đạt được điều này từ đây
sudo ps aux | rev | cut -d ' ' -f 1 | rev
rev
đảo ngược đầu ra ps
và sau đó cắt có thể giúp bạn phân định trường đầu tiên (là trường cuối cùng!) và sau đó đảo ngược lại ...
đã làm cho tôi.
ps aux
chính nó sẽ được liệt kê dưới dạng aux
.
sudo
không cần thiết ps
và lệnh cắt rất nhiều lệnh, vì vậy nó không chính xác lắm, nếu bạn muốn làm việc với colums, hãy sử dụng awk
nó tốt hơn cho nhiệm vụ đó. Trên thực tế, mệnh lệnh chính xác sẽ làps aux | awk '{ for(i=1;i<=NF;i++) {if ( i >= 11 ) printf $i" "}; printf "\n" }'
awk
nên làm việc đó.
sudo ps
và tôi nghĩ awk
sẽ quá phức tạp cho nhiệm vụ này và đã xuất hiện cut
. Dù sao, bạn không nên cập nhật câu trả lời của mình với mã đó để OP có thể chấp nhận nó?
ps
nó chỉ không thể phân tích một cách mù quáng. Tôi nghĩ rằng phương pháp an toàn duy nhất ở đây là ps -e -o
.
ps -eo command
&ps -eo comm
? Sự khác biệt duy nhất tôi tìm thấy là ởcommand
đầu ra là như vậy:[kthreadd]
trong khi ởcomm
đầu ra là như sau :kthreadd
. Điều này có ý nghĩa gì không?