web-dev-qa-db-fra.com

Comment trouver des fichiers sans autorisations de groupe?

Je veux juste savoir comment trouver, dans un dossier, les fichiers qui n'ont aucune autorisation d'utilisateur de groupe (pas de lecture/écriture/exécution) du tout, en utilisant le terminal.

11
Rebi Khalifa

Vous pouvez utiliser:

find . \! -perm /070

Ou:

find . \! -perm /g+rwx

Cela fonctionne parce que:

  • Lorsque l'opérande du -perm le test commence par /, cela implique -perm pour tester si l'une des autorisations spécifiées est présente.

    (Si vous avez utilisé - au lieu de /, il testerait si tous étaient présents. Sans un préfixe, il testerait exactement l'autorisation spécifiée, c'est-à-dire tous et aucun autre présent.)

  • C'est l'opposé de ce que vous recherchez - aucun est l'opposé de tout - et l'opérateur pas \! annule le résultat du test qui le suit.

    (L'opérateur est vraiment !, et vous pouvez probablement l'écrire de cette façon, mais il est généralement écrit comme \! pour s'assurer que son Shell le transmet à find plutôt que de le traiter spécialement.)

Quant à la signification des chaînes spécifiques après /, voir FilePermissions , cet article Wikipedia , et/ou man chmod . En résumé, comme appliqué aux commandes ci-dessus:

  • 070 est une chaîne d'autorisations octale, spécifiant les autorisations pour l'utilisateur (c'est-à-dire le propriétaire), le groupe et les autres (c'est-à-dire tout le monde), respectivement. 7 est lu (4), écrit (2) et exécute (1) les autorisations (c'est-à-dire 111 a la 1 bits dans 100, 010, et 001).
  • g+rwx est une chaîne d'autorisations symboliques, spécifiant que le groupe (g) a lu (r), écrit (w) et exécuté (x ) autorisations.

Quelle que soit la notation que vous utilisez, rappelez-vous que vous exprimez le contraire de ce que vous voulez finalement, car le résultat du test est annulé par !.

14
Eliah Kagan

Pour rechercher un fichier dans le répertoire en cours ou ses sous-répertoires pour lesquels aucun groupe de bits de lecture, d'écriture ou d'exécution n'est défini, exécutez:

find . ! -perm /g+rwx
7
John1024

Avec des commandes simples depuis votre terminal privé, exécutez:

Sudo df --local -P | awk {'if (NR!=1) print $6'} | xargs -I '{}' find '{}' -xdev -nogroup -ls
0
user643653