-perm flaga w znalezieniu

Sep 05 2020

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

4 netmonk Sep 05 2020 at 17:45

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 0002 dopasuje wszystkie pliki z tym dokładnym ustawieniem uprawnień
  • -perm -0002dopasuje wszystkie pliki, w których prawo to jest bit Setup (co oznacza 0772, 1752... cokolwiek kombinacja Jeśli plik jest zapisywany dla innych)
5 ilkkachu Sep 05 2020 at 22:23

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.

2 binarysta Sep 05 2020 at 17:47
  • -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