<Poprzedni | Spis treści | Następne>
Operatorzy
Nawet ze wszystkimi testami, które odnaleźć zapewnia, że nadal możemy potrzebować lepszego sposobu na opisanie relacje logiczne między testami. Na przykład, co jeśli musielibyśmy ustalić, czy wszystkie pliki i podkatalogi w katalogu mają bezpieczne uprawnienia? Szukalibyśmy wszystkich plików z uprawnieniami innymi niż 0600 i katalogów z uprawnieniami innymi niż 0700. Na szczęście, odnaleźć zapewnia sposób łączenia testów przy użyciu operatory logiczne
aby stworzyć bardziej złożone relacje logiczne. Aby wyrazić wyżej wymieniony test, moglibyśmy zrobić to:
[ja@linuxbox ~]$ znajdź ~ \( -type f -not -perm 0600 \) -lub \( -type d
-nie -perm 0700 \)
[ja@linuxbox ~]$ znajdź ~ \( -type f -not -perm 0600 \) -lub \( -type d
-nie -perm 0700 \)
Ojej! To naprawdę wygląda dziwnie. Co to wszystko jest? Tak naprawdę operatorzy nie są tacy skomplikowani, gdy się ich pozna. Oto lista:
Tabela 17-4: znajdź operatory logiczne
Opis operatora
Opis operatora
-i Dopasuj, jeśli testy po obu stronach operatora są prawdziwe. Można skrócić do -a. Należy pamiętać, że gdy nie ma żadnego operatora, -i jest domyślnie dorozumiane.
![]()
Lub Dopasuj, jeśli test po obu stronach operatora jest prawdziwy. Można skrócić do -o.
![]()
-Niet Dopasuj, jeśli test następujący po operatorze jest fałszywy. Można skrócić za pomocą wykrzyknika (!).
![]()
() Grupuje testy i operatory, aby utworzyć większe wyrażenia. Służy do kontrolowania pierwszeństwa logicznych ocen. Domyślnie odnaleźć ocenia od lewej do prawej. Często konieczne jest zastąpienie domyślnej kolejności oceny w celu uzyskania pożądanego wyniku. Nawet jeśli nie jest to konieczne, czasami pomocne jest uwzględnienie znaków grupowania w celu poprawy czytelności polecenia. Należy pamiętać, że ponieważ znaki nawiasów mają specjalne znaczenie dla powłoki, muszą być one ujęte w cudzysłów podczas używania ich w wierszu poleceń, aby umożliwić przekazanie ich jako argumentów do odnaleźćZwykle znak ukośnika odwrotnego służy do ich uniknięcia.
![]()
Mając pod ręką tę listę operatorów, rozłóżmy nasze odnaleźć polecenie. Patrząc z najwyższego poziomu, widzimy, że nasze testy są ułożone jako dwie grupy oddzielone Lub operator:
( wyrażenie 1 ) -Lub ( wyrażenie 2 )
To ma sens, ponieważ szukamy plików z pewnym zestawem uprawnień i katalogów z innym zestawem. Jeśli szukamy zarówno plików, jak i katalogów, dlaczego
Używamy Lub zamiast -i? Ponieważ jako odnaleźć skanuje pliki i katalogi, każdy z nich jest oceniany, aby sprawdzić, czy pasuje do określonych testów. Chcemy wiedzieć, czy jest albo plik ze złymi uprawnieniami or katalog ze złymi uprawnieniami. Nie może być obydwoma jednocześnie. Więc jeśli rozwiniemy zgrupowane wyrażenia, możemy to zobaczyć w ten sposób:
(plik ze złymi uprawnieniami) -lub (katalog ze złymi uprawnieniami)
Naszym kolejnym wyzwaniem jest testowanie „złych uprawnień”. Jak to robimy? Właściwie nie robimy. Będziemy testować „niedobre uprawnienia”, ponieważ wiemy, czym są „dobre uprawnienia”. W przypadku plików definiujemy dobre jako 0600, a w przypadku katalogów jako 0700. Wyrażenie, które będzie testować pliki pod kątem „niedobrych” uprawnień, to:
-wpisz f -i -nie -perms 0600
i dla katalogów:
-wpisz d -i -nie -perms 0700
Jak zauważono w tabeli operatorów powyżej, -i operator może być bezpiecznie usunięty, ponieważ jest domyślnie domyślny. Więc jeśli złożymy to wszystko z powrotem, otrzymamy nasze ostateczne polecenie:
znajdź ~ ( -type f -not -perms 0600 ) -lub ( -type d -not
-perms 0700 )
Jednakże, ponieważ nawiasy mają szczególne znaczenie dla powłoki, musimy ich unikać, aby zapobiec próbom ich interpretacji przez powłokę. Poprzedzenie każdego z nich znakiem ukośnika odwrotnego załatwia sprawę.
Istnieje jeszcze jedna cecha operatorów logicznych, którą należy zrozumieć. Załóżmy, że mamy dwa wyrażenia rozdzielone operatorem logicznym:
wyr1 -operator wyr2
We wszystkich przypadkach wyr1 będzie zawsze wykonywane; jednak operator określi, czy
expr2 jest wykonywane. Oto jak to działa:
Tabela 17-5: znajdź logikę AND/OR
Wyniki z wyr1 | Operator | wyr2 Jest ... |
Prawdziwy | -i | Zawsze wykonywane |
Fałszywy | -i | Nigdy nie wykonano |
Prawdziwy | Lub | Nigdy nie wykonano |
Fałszywy | Lub | Zawsze wykonywane |
Dlaczego tak się dzieje? Robi się to w celu poprawy wydajności. Weź -ina przykład. Wiemy, że wyrażenie wyr1 -i wyr2 nie może być prawdą, jeśli wynik wyr1 is
false, więc nie ma sensu wykonywać expr2. Podobnie, jeśli mamy wyrażenie expr1 Lub expr2 i wynik expr1 jest prawdziwy, nie ma sensu wykonywać expr2, ponieważ już wiemy, że wyrażenie expr1 Lub expr2 jest prawdą.
OK, więc to pomaga mu iść szybciej. Dlaczego to jest ważne? Jest to ważne, ponieważ możemy polegać na tym zachowaniu, aby kontrolować, jak wykonywane są akcje, jak wkrótce zobaczymy.
Dokumenty