Grep по всем именам файлов в каталоге
Я хочу получить статус процесса для всех служб, работающих в данном каталоге. Прямо сейчас я могу проверить один за другим ps -ef | grep ServiceName
, Но есть ли способ ls
каталог и ps
каждый сервис?
Что-то вроде ps -ef | grep < ls
?
3 ответа
Уже опубликовано в качестве комментария, это должно делать то, что вы хотите:
ps -ef | grep "$(ls)"
В Баш:
ps -ef | grep "$(ls)"
(Та же самая строка появилась в комментарии incBrain, когда я составлял и тестировал оставшуюся часть моего ответа в Debian/Bash.)
Он будет генерировать мусор, если шаблон появляется в ps
вывод в качестве аргумента командной строки (не команды) или как часть команды. Чтобы уменьшить это, я бы использовал find
вместо ls
чтобы получить полный путь:
ps -ef | grep -f <(find -L "$(pwd)" -maxdepth 1 -type f)
Тем не менее, могут быть некоторые нежелательные дополнительные результаты.
Обратите внимание, что это не
сервисы, работающие в данном каталоге
скорее процессы с исполняемыми файлами в данном каталоге.
Чтобы узнать текущую рабочую директорию процесса, вы можете прочитать /proc/<PID>/cwd
, Следующий пример (быстрый и грязный) ps
альтернатива, и это показывает, что вы можете извлечь информацию из /proc
в форме, которую вы хотите:
sudo bash -c 'for i in /proc/[1-9]* ; do PID=$(basename "$i"); E=$(readlink "${i}/exe"); D=$(readlink "${i}/cwd"); echo -e "PID=${PID}\tEXE=${E}\tCWD=${D}" ; done | grep "CWD=$(pwd)$"'
Тебе нужно sudo
получить доступ ко всем процессам. Если в этом нет необходимости, и вы хотите запустить его как обычный пользователь, часть внутри '
разделителей достаточно.
Может быть, что-то вроде этого:
processes="$(ps -ef)"
for file in *;do
grep "$file" <<<"$processes"
done