trouver tous les fichiers avec des permissions spécifiques

0

J'ai essayé pendant des heures de comprendre la syntaxe de commande pour trouver les fichiers qui se rencontraient tout de ces critères, mais je n'arrive pas à comprendre.

  • l'utilisateur n'a pas lu
  • l'utilisateur n'a pas d'écriture
  • le groupe n'a pas lu
  • le groupe n'a pas écrit
  • autre n'a pas lu
  • autre a ecrit
  • autre a exécuter

J'ai commencé avec cela, mais cela ne trouve pas tous les fichiers attendus. Par exemple, il ne trouve pas les fichiers où l’autre a lu mais aussi s’il s’exécute.

find /path -type f \( ! -perm /u=rw,g=rw -or ! -perm /o=r \) -print
IMTheNachoMan
la source
IMHO le problème n'est pas la syntaxe mais la logique: -perm /u=rw,g=rw vous permet d’obtenir tous les fichiers contenant l’un de ces indicateurs, ! -perm / u = rw, g = rw` vous permet d'obtenir les fichiers dans lesquels aucun de ces indicateurs n'est défini. Alors peut-être que tu veux ! -perm / u = rw, g = rw` (c'est-à-dire, pas {tous les indicateurs définis}, ce qui est identique à {au moins un indicateur non défini}.
xenoid
Avez-vous une faute de frappe? On dirait que tu as tapé la même chose la dernière fois ...
IMTheNachoMan
Effectivement. Signifiait -perm -u=rw,g=rw. Merci.
xenoid

Réponses:

2

Réponse courte

 find ./ -type f ! \( -perm -u=rw -and -perm -g=rw -and -perm -o=r -and ! -perm /o=wx \)

Longue réponse

Comme il semble plus facile de spécifier ce que nous voulons ( X a y permission) dans find, essayons de conjuguer l'expression: nous pouvons voir qu'un fichier qui devrait ne pas match a tout de ces conditions vérifiées:

  • l'utilisateur a lu et écrit
  • groupe a lu et écrit
  • autre a lu
  • autre n'a pas (écrire ou exécuter)

Alors maintenant nous avons plus a qu'auparavant (5 vs 2). J'ai écrit la commande qui trouve les fichiers que vous faites ne pas vouloir:

find ./ -type f -perm -u=rw -and -perm -g=rw -and -perm -o=r -and ! -perm /o=wx

Pour le comprendre, vous devez faire attention au fait que - veux dire toutes les autorisations et / veux dire l'une des autorisations .

Puis je l'ai conjugué avec! et parenthèse pour obtenir la commande en haut de cette réponse.

Des tests

Créons des fichiers qui vérifient un seul de chacun de ces critères:

mkdir demo && cd demo
touch     a b c d e f g
chmod 777 a b c d e f g
chmod u-r a
chmod u-w   b
chmod g-r     c
chmod g-w       d
chmod o-r         e
chmod o-w a b c d e g
chmod o-x a b c d e f

Ensuite, créons tous les fichiers qui ne doivent pas correspondre: Nous avons des libertés sur

  • droits d'exécution de l'utilisateur
  • droits d'exécution de groupe

Ce qui donne exactement 2 ^ 2 = 4 types d'autorisations complètes qui ne doivent pas correspondre. Créons 4 fichiers avec ces critères:

touch     h i j k
chmod 664 h i j k
chmod u+x h i
chmod g+x h   j

La commande fournie doit correspondre aux fichiers a à e mais pas aux fichiers h à k. Bien entendu, ce test n’est pas exhaustif car il existe 256 types d’autorisations à tester.

Gabriel Devillers
la source