grep -v "grep"
pobiera dane wejściowe linia po linii i wyświetla tylko te linie, w których grep
się nie pojawia. Bez -v
tego wyświetlałby tylko linie, w których grep
się pojawia. Zobacz man grep
szczegóły.
Jeśli chodzi o samo grep
narzędzie, nie ma znaczenia, że wzorzec grep
przekazany mu jako argument jest taki sam jak jego nazwa. Ale w większości przypadków, gdy grep -v grep
faktycznie się pojawia, nie jest to przypadek.
grep -v grep
(lub grep -v 'grep'
lub grep -v "grep"
) często pojawia się po prawej stronie potoku, którego lewa strona jest ps
poleceniem. Prawdopodobnie tam, gdzie to widziałeś. Na przykład mogę szukać programów, których nazwy, ścieżki lub argumenty wiersza poleceń sugerują, że są one powiązane z Xfce:
ek@Io:~$ ps x | grep xfce
2955 ? Ssl 0:10 xfce4-power-manager
2958 ? S 0:00 /usr/lib/x86_64-linux-gnu/xfce4/xfconf/xfconfd
31901 pts/1 S+ 0:00 grep --color=auto xfce
Moje grep
polecenie pojawiło się w danych wyjściowych, ale nie tego szukam. Szukam informacji o procesach, które już działały, gdy sprawdzałem, co się dzieje, a nie o procesie, który działał tylko z powodu mojego wysiłku, aby zbadać, co się dzieje.
Jednym z powszechnych sposobów na usunięcie tego rozproszenia jest dodanie kolejnej potoku do grep -v grep
:
ek@Io:~$ ps x | grep xfce | grep -v grep
2955 ? Ssl 0:10 xfce4-power-manager
2958 ? S 0:00 /usr/lib/x86_64-linux-gnu/xfce4/xfconf/xfconfd
grep
bez -F
traktuje wzorzec jako wyrażenie regularne, a nie stały ciąg . Tak więc innym podejściem jest napisanie wyrażenia regularnego, które pasuje dokładnie, xfce
ale jest napisane inaczej. Na przykład:
ek@Io:~$ ps x | grep '[x]fce'
2955 ? Ssl 0:10 xfce4-power-manager
2958 ? S 0:00 /usr/lib/x86_64-linux-gnu/xfce4/xfconf/xfconfd
Działa [x]
to, ponieważ jest to klasa znaków, która dokładnie pasuje do litery x
.
Wadą tych popularnych metod jest to, że odfiltrowują linie zawierające grep
nawet te, które nie są grep
poleceniem, które sam wykonałeś. Mogą to nawet nie być grep
polecenia - tylko polecenia, których nazwy, ścieżki lub argumenty wiersza poleceń zawierają grep
. Tak więc, jak zauważył Sergiy Kolodyazhnyy , często żaden z tych sposobów (ani żadne inne podejście obejmujące potokowanie wyników ps
) nie jest naprawdę idealny i, jak wspomniał Nic Hartley , inne sposoby często wykorzystują pgrep
. Na przykład:
ek@Io:~$ pgrep -af xfce
2955 xfce4-power-manager
2958 /usr/lib/x86_64-linux-gnu/xfce4/xfconf/xfconfd
-a
pokazuje pełną linię poleceń. Pomiń, aby wyświetlić tylko numer identyfikacyjny procesu.
-f
wyszukuje w pełnym wierszu poleceń. Pomiń, aby wyszukać tylko nazwy.
man grep
przeczytać referencyjną stronę instrukcji dla polecenia lub uzyskać więcej informacji na temat niektórych poleceń (w tym grep), które możeszinfo grep
.... tj. twój system ma dokumentację, która często jest bardzo przydatna.