Правильно найдите нужное поле из операции вырезания
У меня такие процессы запущены
me 26175 1.7 2.5 1483984 100148 tty2 Sl+ 12:49 0:04 /snap/electronic-wechat/7/dist/electronic-wechat-linux-x64/electronic-wechat
me 26237 0.0 0.7 311516 29176 tty2 S+ 12:49 0:00 /snap/electronic-wechat/7/dist/electronic-wechat-linux-x64/electronic-wechat --type=zygote --no-sandbox
me 26276 0.2 2.0 550496 81800 tty2 Sl+ 12:49 0:00 /snap/electronic-wechat/7/dist/electronic-wechat-linux-x64/electronic-wechat --type=gpu-process --channel=26175.0.1924433599 --mojo-application-channel-token=3E65B226573BBE452FCCE4212BC242ED --no-sandbox --window-depth=24 --x11-visual-id=33 --supports-dual-gpus=false --gpu-driver-bug-workarounds=5,18,56 --gpu-vendor-id=0x0000 --gpu-device-id=0x0000 --gpu-driver-vendor --gpu-driver-version --gpu-driver-date --v8-natives-passed-by-fd --v8-snapshot-passed-by-fd
me 26284 0.2 3.8 1085556 150812 tty2 Sl+ 12:49 0:00 /snap/electronic-wechat/7/dist/electronic-wechat-linux-x64/electronic-wechat --type=renderer --no-sandbox --primordial-pipe-token=85EEA61A3C800C4096858B6AE571B4EB --lang=en-US --node-integration=true --enable-pinch --num-raster-threads=2 --content-image-texture-target=3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553 --video-image-texture-target=3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553 --disable-accelerated-video-decode --mojo-channel-token=F13ADFBA9E2E351C09B10692D10BCFBE --mojo-application-channel-token=85EEA61A3C800C4096858B6AE571B4EB --channel=26175.1.78915562 --v8-natives-passed-by-fd --v8-snapshot-passed-by-fd
Я хочу получить столбец PID с помощью cut
а не продвинутые инструменты как gwak
ps -aux | grep wechat | sed "s/$USER/me/g" | cut -f 2 | head -n 4
me 26175 1.2 2.5 1483984 100220 tty2 Sl+ 12:49 0:05 /snap/electronic-wechat/7/dist/electronic-wechat-linux-x64/electronic-wechat
me 26237 0.0 0.7 311516 29176 tty2 S+ 12:49 0:00 /snap/electronic-wechat/7/dist/electronic-wechat-linux-x64/electronic-wechat --type=zygote --no-sandbox
me 26276 0.1 2.0 550496 81800 tty2 Sl+ 12:49 0:00 /snap/electronic-wechat/7/dist/electronic-wechat-linux-x64/electronic-wechat --type=gpu-process --channel=26175.0.1924433599 --mojo-application-channel-token=3E65B226573BBE452FCCE4212BC242ED --no-sandbox --window-depth=24 --x11-visual-id=33 --supports-dual-gpus=false --gpu-driver-bug-workarounds=5,18,56 --gpu-vendor-id=0x0000 --gpu-device-id=0x0000 --gpu-driver-vendor --gpu-driver-version --gpu-driver-date --v8-natives-passed-by-fd --v8-snapshot-passed-by-fd
me 26284 0.1 3.8 1085556 150812 tty2 Sl+ 12:49 0:00 /snap/electronic-wechat/7/dist/electronic-wechat-linux-x64/electronic-wechat --type=renderer --no-sandbox --primordial-pipe-token=85EEA61A3C800C4096858B6AE571B4EB --lang=en-US --node-integration=true --enable-pinch --num-raster-threads=2 --content-image-texture-target=3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553 --video-image-texture-target=3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553,3553 --disable-accelerated-video-decode --mojo-channel-token=F13ADFBA9E2E351C09B10692D10BCFBE --mojo-application-channel-token=85EEA61A3C800C4096858B6AE571B4EB --channel=26175.1.78915562 --v8-natives-passed-by-fd --v8-snapshot-passed-by-fd
Делается вывод, что выходные данные не разделены вкладками, а затем пробовал
me@host:~$ ps -aux | grep wechat | sed "s/$USER/me/g" | cut -d ' ' -f 2 | head -n 4
me@host:~$
Но получите большие объемы пространства, и пид загадочно находится в поле 4
me@host:~$ ps -aux | grep wechat | sed "s/$USER/me/g" | cut -d ' ' -f 4 | head -n 4
26175
26237
26276
26284
me@host~$
Я очень смущен здесь, как я могу решить, какое поле обрезать без "проб и ошибок"?
1 ответ
Вам не нужно использовать cut
или же awk
совсем. grep
также не рекомендуется использовать с ps
потому что неправильно создан grep
запрос также будет включать себя в вывод.
pgrep
Утилита может сделать эту работу, если вы заинтересованы только в PID.
$ pgrep -f wechat
8096
8115
Если вы заинтересованы в другой информации, ps
утилита принимает список столбцов, которые она должна выводить в -o
вариант. pgrep
утилита для поиска процессов по имени Таким образом, то, что я лично делаю довольно часто, таково:
pgrep -f wechat | xargs -I{} ps -o pid,ppid,user -p {}
pgrep
утилита будет искать процессы, которые имеют wechat
где-нибудь в их командной строке. xargs
передаст вывод (PID) ps
и поместите их в -p
флаг. -I
укажет, какой токен использовать и где в команде должен быть размещен вывод.
$ pgrep -f wechat | xargs -I{} ps -o pid,ppid,user -p {}
PID PPID USER
8096 6825 root
PID PPID USER
8115 8096 root
Есть также --no-header
возможность избавиться от имен столбцов
$ pgrep -f wechat | xargs -I{} ps -o pid,ppid,user --no-header -p {}
8096 6825 root
8115 8096 root
Если вы хотите посмотреть только на electronic-wechat
команда, вы можете использовать pgrep electronic-wechat
только без использования -f
Смотрите также man ps
в частности, раздел "СТАНДАРТНЫЕ ФОРМАТЫ" для списка доступных столбцов, которые вы можете передать -o
,
Если вы заинтересованы в постоянном наблюдении за процессами, то вы можете рассмотреть возможность использования top
Команда, с фильтром. Вы можете установить один с помощью клавиши o, просмотреть те, которые вы установили с помощью Ctrl + o, и сбросить фильтры с помощью клавиши +. Ниже приведен скриншот после того, как я установил фильтр, и этот фильтр отображается с помощью Ctrl + o