Perl для системного администрирования


Обход файловой системы при помощи модуля File::Find - часть 3


Для первого использования модуля File:: Find давайте перепишем пример, созданный для удаления core-файлов, и затем немного его расширим. Для начала наберем:

# find2perl -name core -print что даст нам следующее: require "! ind.pi"

&find('. ' ) exit,

sub wanted !

/"coreS/ && DrintC'Sname^i"):

}

Затем мы добавим -s к строке вызова Perl и изменим подпрограмму

&wanted():

sub wanted (

/"core$/ && prin+("$i>ame\n") && dpfired $r && ::nifik($rapf4;

При вызове программы с ключом -г мы получаем необходимую нам функцию (удаление core-файлов). Внесем небольшое изменение, добавляющее некоторую степень защиты нашему потенциально разрушительному коду:

oud wanted {

/"coreS/ && -s $nairie *& print("$name\n") &&

defined $r s& i;nlink($name); }

Теперь, перед тем как выводить имя файла или удалять его, мы проверяем, не является ли размер файла core нулевым. Некоторые пользователи иногда создают ссылку на /dev/null с именем core в своем домашнем каталоге, чтобы core-файлы в нем не сохранялись. Параметр —s указывается для того, чтобы убедиться, что по ошибке не будут уда лены ссылки или файлы нулевой длины. Если мы хотим действовать осторожнее, нам следует выполнить еще две дополнительные проверки:

  1. Открыть файл и убедиться, что этот файл действительно является core-файлом. Сделать это можно как из Perl, так и вызвав команду Unix file. Определить, что файл действительно является core-файлом, может оказаться достаточно сложно в случае, если файловые системы смонтированы по сети с компьютерами другой архитектуры с иными форматами core-файлов.
  2. Посмотреть на время изменения файла. Если кто-то в настоящий момент отлаживает программу, используя файл core, он вряд ли обрадуется, если вы утащите этот файл прямо «из-под нее».

Давайте на время отдохнем от мира Unix и посмотрим на примеры, имеющие отношение к MacOS и Windows NT/2000. Ранее в этой главе я уже говорил, что в MacOS у каждого файла есть два атрибута - созда телъ и тип,




Начало  Назад  Вперед