-perm flag dans find

Sep 05 2020

J'essaye de comprendre cette commande:

find /home/ -type d \( -perm -0002 -a ! -perm -1000 \) 2>/dev/null

Je comprends qu'il va chercher dans le répertoire 'home' tous les répertoires et rediriger tous les messages stderr vers un fichier (pour les supprimer), mais je suis confus par la partie du milieu, en particulier:

\( -perm -0002 -a ! -perm -1000 \)

Que signifient les barres obliques? Je suppose que cela ! -perm -1000signifie rechercher des répertoires sans ces autorisations, et des -perm -0002moyens de rechercher des répertoires avec ces autorisations, mais je suis uniquement habitué à voir les autorisations sous la forme 644 (par exemple). Pourquoi y a-t-il quatre chiffres? Aussi, que fait le -adrapeau?

Réponses

4 netmonk Sep 05 2020 at 17:45

Dans le manuel, vous pouvez trouver:

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.

Donc littéralement \( -perm -0002 -a ! -perm -1000 \)signifie: perm = 0002 et non perm = 1000

perm = 0002 signifie inscriptible pour Autres
perm = 1000 signifie que le bit sticky est activé.

Donc, cette expression recherche un fichier inscriptible pour Autre et sans ensembles de bits persistants.

La recherche d'un répertoire se fait avec un -type d drépertoire de moyens, donc recherchez un objet de recherche de type répertoire

À partir du manuel de recherche, -perma plusieurs formes:

  • -perm 0002 correspondra à tous les fichiers avec ce paramètre d'autorisation exact
  • -perm -0002correspond à tous les fichiers où ce bit droit est configuré, ( ce qui signifie 0772, 1752... quelle que soit la combinaison si le fichier est accessible en écriture pour les autres)
5 ilkkachu Sep 05 2020 at 22:23

Dans -type d \( -perm -0002 -a ! -perm -1000 \), tout d'abord, les barres obliques échappent aux parenthèses du shell, afin qu'elles puissent être passées comme argument, au lieu d'être interprétées comme des opérateurs spéciaux par le shell. (Vous auriez besoin de la même chose par exemple >, pour des raisons évidentes.) Ils pourraient être écrits comme '('ou "(", aussi, mais finalement findne voit que (et ).

Les parenthèses regroupent les conditions et -asont une conjonction et . C'est aussi la valeur implicite par défaut pour les conditions dos à dos, comme utilisé ici avec -type det l'expression entre parenthèses, il n'y a pas de -aconnexion explicite . L'expression est exactement équivalente à -type d -perm -0002 ! -perm -1000. Les parenthèses ne sont vraiment nécessaires qu'avec la conjonction ou-o .

-type dest évident et signifie rechercher un fichier avec tous les bits d'autorisation définis. Ou, dans ce cas, les répertoires avec l'autorisation d'écriture pour les autres ( ) définie et le bit sticky ( ) non défini (à cause de la négation). Je pense que la combinaison ici pourrait également être écrite comme . Notez le tiret devant la chaîne d'autorisation, sans lui, la signification serait différente. Voir par exemple la page de manuel Linux pour trouver , rechercher "(expr)" et "-perm mode".-perm -NNNNNNNN00021000-perm -o+w ! -perm -o+t

L'accès en écriture à un répertoire permet de créer, de supprimer et de renommer des fichiers à l'intérieur, et le sticky bit empêche de supprimer et de renommer les fichiers appartenant à d'autres utilisateurs. L'expression entière recherche des répertoires dans lesquels n'importe qui peut supprimer ou renommer n'importe quel fichier.

2 binarysta Sep 05 2020 at 17:47
  • -a: est un ET logique ( -opeut être utilisé pour OU)
  • \(, \): parce que les parenthèses ont une signification particulière dans le shell, la barre oblique utilisée pour les échapper
  • autorisations à quatre chiffres sont liés à sticky bit, setuid,setgid