830просмотров
88.1%от подписчиков
11 февраля 2026 г.
Score: 913
Добрый день!🐧 Продолжаем историю с полезными однострочниками Bash📱 📱 Bash однострочник №2 - Поиск всех процессов, работающих с файлами в указанной директории
lsof +D "/opt" 2> /dev/null | awk 'NR > 1 {print $2, $1}' | sort -u | while read pid p_name; do cmd=$(cat "/proc/$pid/cmdline" 2> /dev/null | tr '\0' ' '); echo "PID: $pid, NAME: $p_name, CMD: $cmd"; done ⚙️ Разбор команды:
- lsof +D "/opt" 2> /dev/null - ищет открытые файлы в директории /opt;
- awk 'NR > 1 {print $2, $1}' - пропускает заголовок вывода lsof и меняет местами столбцы: PID (второй столбец) и имя процесса (первый столбец);
- sort -u - сортирует строки и оставляет только уникальные (PID + имя процесса);
- while read pid p_name; do ... done - для каждой уникальной пары PID и имени процесса: - cmd=$(cat "/proc/$pid/cmdline" 2> /dev/null | tr '\0' ' ') - читает полную командную строку процесса из /proc, заменяя нулевые символы на пробелы; - echo "PID: $pid, NAME: $p_name, CMD: $cmd" - выводит PID, имя процесса и его командную строку. Тут всё завязано на выводе утилиты lsof (list open files), дальнейшая обработка выполняется скорее для удобочитаемости. 📱 Пример вывода: PID: 1522, NAME: rsyslogd, CMD: /usr/sbin/rsyslogd -n -iNONE
PID: 1557, NAME: virtlogd, CMD: /usr/sbin/virtlogd
PID: 1628, NAME: clamd, CMD: /usr/sbin/clamd --foreground=true
--- Как оптимизировать процесс поиска и запуска команд из заранее подготовленного списка рассказывал тут:
- rofi (универсальный вариант для GUI сеанса)
- tmux+fzf (на уровне CLI - сеанс tmux)
- Функции оболочки cmd (bash, zsh) Успехов! #oneliners #shell #bash
---
Сайт🐦⬛️ | Чат🧐 | GitHub📱