Stations de travail en ligne OnWorks Linux et Windows

Logo

Hébergement gratuit en ligne pour les postes de travail

<Précédent | Table des matières | Suivant>

Les opérateurs

Même avec tous les tests qui trouver fournit, nous avons peut-être encore besoin d'une meilleure façon de décrire le relations logiques entre les épreuves. Par exemple, et si nous devions déterminer si tous les fichiers et sous-répertoires d'un répertoire disposaient d'autorisations sécurisées ? Nous chercherions tous les fichiers avec des permissions qui ne sont pas 0600 et les répertoires avec des permissions qui ne sont pas 0700. Heureusement, trouver fournit un moyen de combiner des tests en utilisant Opérateurs logiques


pour créer des relations logiques plus complexes. Pour exprimer le test susmentionné, nous pourrions faire ceci :



[moi@linuxbox ~]$ find ~ \( -type f -not -perm 0600 \) -ou \( -type d

-pas -perm 0700 \)

[moi@linuxbox ~]$ find ~ \( -type f -not -perm 0600 \) -ou \( -type d

-pas -perm 0700 \)


Aïe ! C'est sûr que ça a l'air bizarre. Qu'est-ce que c'est tout ce truc? En fait, les opérateurs ne sont pas si compliqués une fois qu'on les connaît. Voici la liste :


Tableau 17-4 : rechercher des opérateurs logiques


Description de l'opérateur

Description de l'opérateur

-et Correspondre si les tests des deux côtés de l'opérateur sont vrais. Peut être raccourci à -a. Notez que lorsqu'aucun opérateur n'est présent, -et est implicite par défaut.


image

Ou Correspondance si un test de chaque côté de l'opérateur est vrai. Peut être raccourci à -o.


image

-nont Match si le test suivant l'opérateur est faux. Peut être abrégé par un point d'exclamation (!).


image

() Regroupe les tests et les opérateurs pour former des expressions plus larges. Ceci est utilisé pour contrôler la priorité des évaluations logiques. Par défaut, trouver évalue de gauche à droite. Il est souvent nécessaire de remplacer l'ordre d'évaluation par défaut pour obtenir le résultat souhaité. Même si cela n'est pas nécessaire, il est parfois utile d'inclure les caractères de regroupement pour améliorer la lisibilité de la commande. Notez que puisque les caractères entre parenthèses ont une signification particulière pour le shell, ils doivent être entre guillemets lors de leur utilisation sur la ligne de commande pour leur permettre d'être passés en tant qu'arguments à trouver. Habituellement, la barre oblique inverse est utilisée pour les échapper.


image


Avec cette liste d'opérateurs en main, déconstruisons notre trouver commander. Vu du niveau le plus élevé, nous voyons que nos tests sont organisés en deux groupes séparés par un Ou opérateur:

( expression 1 ) -ou ( expression 2 )

Cela a du sens, car nous recherchons des fichiers avec un certain ensemble d'autorisations et des répertoires avec un ensemble différent. Si nous recherchons à la fois des fichiers et des répertoires, pourquoi


nous utilisons Ou au lieu de -et? Parce que trouver parcourt les fichiers et les répertoires, chacun est évalué pour voir s'il correspond aux tests spécifiés. On veut savoir si c'est Soit un fichier avec de mauvaises permissions or un répertoire avec de mauvaises autorisations. Ça ne peut pas être les deux à la fois. Donc, si nous développons les expressions groupées, nous pouvons le voir de cette façon :

( fichier avec de mauvaises autorisations ) -ou ( répertoire avec de mauvaises autorisations )

Notre prochain défi est de savoir comment tester les « mauvaises autorisations ». Comment fait-on cela? En fait, nous ne le faisons pas. Ce que nous allons tester, ce sont les « pas de bonnes autorisations », car nous savons ce que sont les « bonnes autorisations ». Dans le cas des fichiers, nous définissons bon comme 0600 et pour les répertoires, comme 0700. L'expression qui testera les fichiers pour les autorisations « pas bonnes » est :

-type f -et -non -perms 0600

et pour les répertoires :

-type d -et -non -perms 0700

Comme indiqué dans le tableau des opérateurs ci-dessus, le -et L'opérateur peut être supprimé en toute sécurité, car il est implicite par défaut. Donc, si nous rassemblons tout cela, nous obtenons notre commande finale :

find ~ ( -type f -not -perms 0600 ) -ou ( -type d -not

-permanents 0700)

Cependant, étant donné que les parenthèses ont une signification particulière pour le shell, nous devons les échapper pour empêcher le shell d'essayer de les interpréter. Faire précéder chacun d'eux par une barre oblique inverse fait l'affaire.

Il est important de comprendre une autre caractéristique des opérateurs logiques. Disons que nous avons deux expressions séparées par un opérateur logique :

expression1 -opérateur expression2

Dans tous les cas, expression1 sera toujours exécuté ; cependant, l'exploitant déterminera si

expr2 est exécuté. Voilà comment cela fonctionne:


Tableau 17-5 : rechercher la logique ET/OU


Resultats de expression1

Opérateur

expression2 est ...

Vrai

-et

Toujours exécuté

Faux

-et

Jamais joué

Vrai

Ou

Jamais joué

Faux

Ou

Toujours exécuté


Pourquoi cela arrive-t-il? C'est fait pour améliorer les performances. Prendre -et, par exemple. On sait que l'expression expression1 -et expression2 ne peut pas être vrai si le résultat de expression1 is


false, il ne sert donc à rien d'effectuer expr2. De même, si nous avons l'expression expr1 Ou expr2 et le résultat de expr1 est vrai, il ne sert à rien d'effectuer expr2, comme on sait déjà que l'expression expr1 Ou expr2 est vrai.

OK, donc ça l'aide à aller plus vite. Pourquoi est-ce important? C'est important car nous pouvons nous fier à ce comportement pour contrôler la façon dont les actions sont effectuées, comme nous le verrons bientôt.


Meilleur système d'exploitation Cloud Computing chez OnWorks :