Как я могу объединить эти две команды ps aux | head -n1 ; ps aux | grep vlc в одну команду? Я попытался использовать команду tee (ps aux | tee >(head -n1) >(grep vlc)), но это не сработало!
Вы можете ps напечатать только идентификаторы процесса vlc с помощью -C.
Из man ps:
-C cmdlist
Select by command name. This selects the processes whose
executable name is given in cmdlist.
Пример:
$ ps u -C vlc
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
sylvain 12586 0.1 0.3 1076848 60908 ? Sl 20:10 0:00 /usr/bin/vlc
Использовать подстановку bash и cat:
cat <(ps aux | head -1) <(ps aux | grep '[v]lc')
Шаблон замещения процесса <() заменяет вывод команды внутри него как файла. cat будет просто конкатенировать файлы как обычно.
Пример:
$ cat <(ps aux | head -1) <(ps aux | grep '[v]lc')
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
chayan 26031 2.3 0.4 1098532 38556 pts/31 Sl 20:45 0:00 vlc
Я бы использовал
ps aux | grep -E '^USER|vlc'
, вы можете добавить | grep -v grep, чтобы исключить строку grep
Просто скажите ps, чтобы показывать только вывод для vlc:
$ ps -P $(pgrep vlc)
PID PSR TTY STAT TIME COMMAND
6728 2 pts/0 Sl 0:00 vlc
pgrep перечисляет PID любых процессов, имя которых соответствует указанному шаблону. Переключатель ps -P позволяет вам указывать информацию только для определенных PID. Объединение двух дает вам заголовок ps и только те строки, которые вам интересны.