Настройка и работа в Linux



              

Поиск в Unix Часть 2 - часть 5


Вышеуказанная команда ищет файлы с правами «777». Если вы озабочены поиском файла в правах которого установлен конкретный бит (независимо от остальных), то воспользуйтесь чем-нибудь подобным (обратите на знак «-» перед числом задающим права доступа – прим. переводчика): find . -perm -4000 -print

Этот пример выдаст вам только те файлы, у которых установлен SUID-бит. Другая полезная команда выглядит так: find . -perm -0002 -print

Она найдет вам файлы, которые доступны «на запись» для «всех». Заметьте, что -0002, -002, -02 и -2 дадут вам одинаковый результат, так как нули в начале подразумеваются.

Последние два ключа, которые я опишу в этой статье, полезны при резервном копировании или репликации каталогов. Начнем с ключа «-depth». Скажем я хочу провести резервное копирование моего домашнего каталога в смонтированный каталог /backup (имеется в виду копирование со всеми правами и т.п. – прим. переводчика). Я могу это сделать следующей командой: find . -depth -print | cpio -dump /backup

Эта команда может выполняться и без ключа «-depth», но не всегда. По умолчанию find создает список найденных файлов начиная с места указанного в этой команде, в моем случае это «.» или мой домашний каталог. Этот список состоит из названия каталога, после которого идет содержимое этого каталога. Может возникнуть ситуация, когда исходный каталог имеет права только на чтение, и команда cpio, сначала создав каталог с такими правами, уже не сможет поместить туда файлы, которые содержатся в исходном каталоге (т.е. создается пустой каталог, только для чтения, в котором производится попытка создать файлы – прим. переводчика).

Однако, если вы вспомните о существовании ключа «-depth», то команда find будет формировать список найденных файлов начиная с нижних уровней вложенности. Это означает, что содержимое каталога будет в списке раньше чем его название. А это в свою очередь означает, что файлы, находящиеся в исходном каталоге, будут помещены cpio в целевой каталог раньше, чем она наложит на него права.

А как поступить, если мне не хочется реплицировать всю структуру домашнего каталога, а только его часть? Здесь может помочь ключ «-prune». Давайте представим, что я хочу скопировать весь мой домашний каталог, за исключением каталога tmp. Я могу поступить следующим образом: find . -type d -name tmp -prune -o -print | cpio -dump /backup

Синтаксис команды выглядит немного знакомо: я использую ключ «-name» для нахождения всех каталогов («-type d») с названием tmp и все такие каталоги пропускаю «-prune». Затем идет логическое «ИЛИ» («-o»), в результате которого все остальные найденные файлы печатаются («-print») и передаются команде cpio.

Надеюсь, что примеры приведенные в этих двух статьях, посвященных поиску при помощи команды find, помогут вам разобраться с ее синтаксисом и возможностями.

Вниманию вебмастеров: использование данной статьи возможно только в соответствии
с правилами использования материалов сайта «Софтерра» (http://www.softerra.ru/site/rules/)




Содержание  Назад  Вперед