-perm flaga w znalezieniu
Próbuję owinąć głowę wokół tego polecenia:
find /home/ -type d \( -perm -0002 -a ! -perm -1000 \) 2>/dev/null
Rozumiem, że będzie szukał w katalogu 'home' wszystkich katalogów i przekierował wszystkie komunikaty stderr do pliku (aby je ukryć), jednak jestem zdezorientowany częścią w środku, w szczególności:
\( -perm -0002 -a ! -perm -1000 \)
Co oznaczają ukośniki? Zakładam, że ! -perm -1000oznacza to szukanie katalogów bez tych uprawnień i -perm -0002oznacza szukanie katalogów z tymi uprawnieniami, ale jestem przyzwyczajony tylko do oglądania uprawnień w postaci 644 (na przykład). Dlaczego są cztery cyfry? Co robi -aflaga?
Odpowiedzi
W instrukcji można znaleźć:
Operators
Operators join together the other items within the expression.
They include for example -o (meaning logical OR) and -a
(meaning logical AND). Where an operator is missing, -a is
assumed.
Czyli dosłownie \( -perm -0002 -a ! -perm -1000 \)oznacza: perm = 0002, a nie perm = 1000
perm = 0002 oznacza możliwość zapisu dla innych
perm = 1000 oznacza, że ustawiony jest lepki bit.
Więc to wyrażenie wyszukuje plik z możliwością zapisu dla innych i bez lepkich zestawów bitów.
Szukanie katalogu odbywa się za -type d dpomocą katalogu środków, więc znajdź obiekt typu look po katalog
Z instrukcji wyszukiwania -permma kilka form:
-perm 0002dopasuje wszystkie pliki z tym dokładnym ustawieniem uprawnień-perm -0002dopasuje wszystkie pliki, w których prawo to jest bit Setup (co oznacza0772,1752... cokolwiek kombinacja Jeśli plik jest zapisywany dla innych)
Po -type d \( -perm -0002 -a ! -perm -1000 \)pierwsze, ukośniki nie są nawiasami dla powłoki, więc mogą być przekazywane jako argument, zamiast być interpretowane przez powłokę jako operatory specjalne. (Potrzebowałbyś tego samego np. Z >oczywistych powodów). Mogą być zapisane jako '('lub "("też, ale ostatecznie findwidzi tylko (i ).
Nawias grupuje warunki i -ajest koniunkcją i . Jest to również niejawna wartość domyślna dla warunków nawrotnych, takich jak użyte tutaj z -type di wyrażenie w nawiasach, nie ma ich jawnego -apołączenia. Wyrażenie jest dokładnie równoważne z -type d -perm -0002 ! -perm -1000. Nawiasy są naprawdę potrzebne tylko w połączeniu z lub-o .
-type djest oczywiste i oznacza szukanie pliku z ustawionymi wszystkimi bitami uprawnień . Lub, w tym przypadku, katalogi z ustawionym uprawnieniem do zapisu dla innych ( ) i nieustawionym bitem sticky bit ( ) (z powodu negacji). Myślę, że kombinację tutaj można również zapisać jako . Zwróć uwagę na myślnik przed napisem zezwolenia, bez niego znaczenie byłoby inne. Zobacz na przykład stronę podręcznika Linux, aby znaleźć , poszukać "(wyraż)" i "-perm mode".-perm -NNNNNNNN00021000-perm -o+w ! -perm -o+t
Dostęp do zapisu w katalogu umożliwia tworzenie, usuwanie i zmianę nazw plików w nim zawartych, a lepki bit zapobiega usuwaniu i zmianie nazw plików będących własnością innych użytkowników. Całe wyrażenie szuka katalogów, w których każdy może usunąć lub zmienić nazwę dowolnego pliku.
-a: jest logicznym AND (-omoże być używane jako OR)\(,\): ponieważ nawiasy mają specjalne znaczenie w powłoce, ukośnik używany do ich ucieczki- Uprawnienia czterocyfrowe są związane
sticky bit,setuid,setgid