Онлайн-рабочие станции OnWorks Linux и Windows

Логотип

Бесплатный хостинг в Интернете для рабочих станций

<Предыдущая | Содержание: | Следующая>

Операторы

Даже со всеми тестами, которые найдите предоставляет, нам все еще может понадобиться лучший способ описания логические отношения между тестами. Например, что, если нам нужно определить, все ли файлы и подкаталоги в каталоге имеют безопасные разрешения? Мы будем искать все файлы с разрешениями, отличными от 0600, и каталоги с разрешениями, отличными от 0700. К счастью, найдите предоставляет возможность комбинировать тесты, используя логические операторы


для создания более сложных логических отношений. Чтобы выразить вышеупомянутый тест, мы могли бы сделать это:



[я @ linuxbox ~] $ найти ~ \ (-type f -not -perm 0600 \) -or \ (-type d

-не -перм 0700 \)

[я @ linuxbox ~] $ найти ~ \ (-type f -not -perm 0600 \) -or \ (-type d

-не -перм 0700 \)


Ой! Это выглядит странно. Что это за хрень? На самом деле, операторы не так уж сложны, если вы с ними познакомитесь. Вот список:


Таблица 17-4: поиск логических операторов


Описание оператора

Описание оператора

-а также Соответствует, если тесты с обеих сторон оператора верны. Может быть сокращено до -a. Обратите внимание: когда нет оператора, -а также подразумевается по умолчанию.


изображение

Или Соответствует, если проверка по обе стороны от оператора верна. Может быть сокращено до -o.


изображение

-нетt Соответствует, если тест, следующий за оператором, является ложным. Может быть сокращено с помощью восклицательного знака (!).


изображение

() Группирует тесты и операторы вместе, чтобы сформировать более крупные выражения. Это используется для управления приоритетом логических оценок. По умолчанию, найдите оценивается слева направо. Часто бывает необходимо изменить порядок оценки по умолчанию, чтобы получить желаемый результат. Иногда полезно включать символы группировки, даже если они не нужны, чтобы улучшить читаемость команды. Обратите внимание: поскольку символы круглых скобок имеют особое значение для оболочки, они должны быть заключены в кавычки при использовании их в командной строке, чтобы их можно было передавать в качестве аргументов в командную строку. найдите. Обычно для их экранирования используется обратная косая черта.


изображение


Имея в руках этот список операторов, давайте разберемся с нашим найдите команда. Если смотреть с самого верхнего уровня, мы видим, что наши тесты организованы как две группы, разделенные знаком Или оператор:

( выражение 1 ) -или ( выражение 2 )

Это имеет смысл, поскольку мы ищем файлы с определенным набором разрешений и каталоги с другим набором прав. Если мы ищем и файлы, и каталоги, зачем


мы используем Или вместо -а также? Потому что как найдите просматривает файлы и каталоги, каждый из них оценивается на предмет соответствия указанным тестам. Мы хотим знать, есть ли это или файл с плохими разрешениями or каталог с плохими разрешениями. Не может быть и того, и другого одновременно. Итак, если мы развернем сгруппированные выражения, мы увидим это так:

(файл с плохой завивкой) -или (каталог с плохой завивкой)

Наша следующая задача - как проверить «плохие разрешения». Как мы это делаем? На самом деле мы этого не делаем. Мы будем проверять наличие «плохих разрешений», поскольку мы знаем, что такое «хорошие разрешения». В случае файлов мы определяем хорошие как 0600, а для каталогов как 0700. Выражение, которое проверяет файлы на «плохие» разрешения:

-тип f -и-not -perms 0600

и для справочников:

-тип d -и -не -perms 0700

Как отмечено в таблице операторов выше, -а также Оператор можно смело удалить, так как он подразумевается по умолчанию. Итак, если мы соберем все это вместе, мы получим нашу последнюю команду:

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

-пермс 0700)

Однако, поскольку круглые скобки имеют особое значение для оболочки, мы должны избегать их, чтобы оболочка не пыталась их интерпретировать. Перед каждым из них стоит обратная косая черта.

Есть еще одна особенность логических операторов, которую важно понять. Допустим, у нас есть два выражения, разделенных логическим оператором:

выражение1 -оператором выражение2

Во всех случаях, выражение1 всегда будет выполняться; однако оператор определит,

expr2 выполняется. Вот как это работает:


Таблица 17-5: поиск логики И / ИЛИ


Результаты выражение1

оператор

выражение2 это ...

Правда

-а также

Всегда выполнял

Ложь

-а также

Никогда не выполнял

Правда

Или

Никогда не выполнял

Ложь

Или

Всегда выполнял


Почему это происходит? Это сделано для повышения производительности. Брать -а также, Например. Мы знаем, что выражение выражение1 -а также выражение2 не может быть правдой, если результат выражение1 is


false, поэтому нет смысла выполнять expr2. Аналогично, если у нас есть выражение expr1 Или expr2 и результат expr1 истинен, нет смысла выполнять expr2, как мы уже знаем, что выражение expr1 Или expr2 верно.

Ладно, это помогает идти быстрее. Почему это важно? Это важно, потому что мы можем полагаться на это поведение для управления выполнением действий, как мы вскоре увидим.


Лучшие облачные вычисления для ОС в OnWorks: