ps -ef | grep xyz

Polecenie w tytule dzisiejszego wpisu wyszukuje wszystkie procesy systemowe, które były uruchomione z tekstem “xyz”, przy czym owo xyz to może być zarówno sama nazwa polecenia (bądź jej fragment) jak też opcja lub parametr.

Bardziej konkretny przykład: załóżmy, że uruchomiliśmy wcześniej tunel ssh do jakiegoś zdalnego serwera i chcemy teraz sprawdzić, czy proces tunelu ciągle działa.

Tunel uruchomiliśmy poleceniem, dajmy na to:

ssh byniek@mojserwer.pl -L 1234:mojserwer.pl:1234

Jeżeli chcemy teraz wyświetlić listę procesów zawierających w wierszu poleceń słowo mojserwer, zrobimy tak:

ps -ef | grep mojserwer

Efekt? Lista procesów zgodnie z oczekiwaniem, plus jeden: powyższa komenda grep też zawiera słowo mojserwer (jako parametr), więc też się pojawi na liście. A tego przecież nie chcemy.

Przykład obrazujący o czym mówię:

Komenda listująca procesy zawierające słowo apache wyświetla m. in. samą siebie (ostatnia linijka, proces numer 43429)

W przypadku ogólnym nie jest to jakiś wielki problem. Ale czasem piszemy skrypt, który będzie modyfikował istniejące procesy (na przykład wyłączał je) i wtedy może się okazać, że ubijemy proces, którego nie powinniśmy.

Rozwiązanie?

Wyrażenia regularne!

A konkretnie jeden prosty trick:

Tutaj nie widzimy na liście procesu grep, bo wyszukujemy procesów zawierających słowo apache, a nie [a]pache. Ponieważ jednak grep traktuje swój pierwszy parametr jako wyrażenie regularne, znajdzie nam wszystkie procesy z apache w wierszu poleceń, bo apache pasuje do [a]pache.

Voila!

Zapisz się
Powiadom o
guest
1 Komentarz
Inline Feedbacks
Zobacz wszystkie komentarze
1
0
Zapraszam do skomentowania wpisu.x
()
x