Bir dizindeki tüm dosya isimleri ile Grep


1

Belirli bir dizinde çalışan tüm hizmetler için işlem durumunu almak istiyorum. Şimdi tek tek kontrol edebilirim ps -ef | grep ServiceName. Fakat lsdizine ve psher hizmete giden bir yol var mı?

Gibi bir şey ps -ef | grep < ls?


1
Arıyor musun ps -ef | grep "$(ls)"?
incBrain

@incBrain Kesinlikle Teşekkürler! Cred istiyorsanız bir cevap atın
Fueled By Coffee

Yanıtlar:


2

Zaten bir yorum olarak yayınlanan, istediğini yapmalı:

ps -ef | grep "$(ls)"

2

Bash'te:

ps -ef | grep "$(ls)"

(Aynı satır incBrain'in yorumunda, cevabımın geri kalanını Debian / Bash'te oluştururken ve test ederken ortaya çıktı.)

Desen psçıktıda komut satırı argümanı (komut değil) veya komutun bir parçası olarak görünüyorsa, çöp oluşturur . Bunu azaltmak için tam yol almak findyerine kullanırım ls:

ps -ef | grep -f <(find -L "$(pwd)" -maxdepth 1 -type f)

Yine de bazı istenmeyen ekstra çıkışlar olabilir.

Bunların olmadığını unutmayın

Verilen bir dizinde çalışan servisler

yerine verilen bir dizindeki yürütülebilir dosyalar ile işlem yapar .

Bir işlemin geçerli çalışma dizinini anlatmak için okuyabilirsiniz /proc/<PID>/cwd. Bir sonraki örnek (hızlı ve kirli) bir psalternatiftir ve bilgileri istediğiniz biçimde alabileceğinizi gösterir /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)$"'

İhtiyacınız sudotüm süreçlerde erişmek için. Bu gerekli değilse ve normal kullanıcı olarak çalıştırmak istiyorsanız, 'sınırlayıcılar içindeki kısım yeterlidir.


0

Belki böyle bir şey:

processes="$(ps -ef)"
for file in *;do
  grep "$file" <<<"$processes"
done
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.