На главную Добавить в "Избранное" Связаться с нами
 
     
 
 

Введение Установка Linux Архитектура Linux Секреты работы Картинная галерея Статьи

 

 
   
 
 

Debian GNU/Linux : Paragon NTFS for Linux 5.x  : Panda Security for Linux Медиа-пак  : Gentoo Linux 2007.0 Xor Edition Nero Linux 3 : KNOPPIX : Fedora 10 : OpenSUSE 11.0 : ASPLinux 12 Standard : Свободный офис : ASPLinux 12 Express  Полный каталог

 
 

 

 

  Поддержка файловой системы  
 

Даже "небольшая" система UNIX с малым числом пользователей порождает сотни файлов в ходе обычной работы. В процессе программирования вы можете создавать множество файлов для различных версий ваших программ. Ведение почты и запись текста при помощи редактора vi способствует тому, что накапливается еще больше файлов. Такие утилиты, как uucp, lp и другие добавляют еще больше файлов. Если у вас система UNIX установлена на микро-ЭВМ, то ваш жесткий диск начинает переполняться. В больших многопользовательских системах дисковая память редко считается проблемой, но в действительности всегда кажется, будто файлы стремятся расшириться до заполнения всей доступной дисковой памяти. Поэтому каждый пользователь должен нести ответственность за расход дискового пространства. (Если вы платите за дисковую память, то у вас также могут быть финансовые стимулы.) Однако, то, что вы хотите сохранить, вы хотите СОХРАНИТЬ. Именно здесь начинается работа по созданию резервных копий.

 

Сопровождение файлов

 

В предыдущей главе мы разработали некоторые средства поиска и отображения информации, помогающие нам поддерживать жизненный путь всех наших файлов. Теперь мы собираемся обратиться к важнейшим рутинным работам, которые позволят избежать хаоса и катастрофы.

 

Сопровождение файлов означает избавление от файлов, которые нам больше не нужны и в то же время систематическое копирование тех файлов, которые мы хотим сохранить. Для этого требуется возможность использования разнородных доступных носителей данных. Сопровождение файлов подразумевает также ряд систематических, повторяющихся задач, а это означает, что мы можем создать средства системы UNIX для автоматизации этого процесса.

 

Операции сопровождения

Сопровождение файлов включает два вида операций: создание резервных копий (копирование) и удаление "мусора".

 

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

 

Имеется два вида резервных копий: "мягкие" и "твердые". "Мягкие" резервные копии - это копии в другом файле или каталоге в той же или в другой файловой системе (т.е. разделе) на том же или другом жестком диске. Такого рода копирование сделать легко и оно предохраняет от наносимого самому себе ущерба, такого как удаление файла по невнимательности. Чаще всего для такого типа копирования используется наше средство cptdir. Основной недостаток мягкого копирования заключается в том, что вы по-прежнему уязвимы для таких воздействий, которые влияют на ваш физический носитель (обычно жесткий диск) так, что и оригинал и копия оказываются разрушенными.

 

"Твердая" копия - это копия на другом устройстве или даже в другой системе UNIX. Средства, представленные ниже в данной главе, управляют такого рода копированием и дают вам возможность выполнять копирование такого типа и с такой периодичностью, которые соответствуют объему вашей вычислительной системы, уровню ее активности и важности хранимых данных.

 

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

 

Автоматизируя нашу процедуру копирования, мы стараемся сделать его как можно менее болезненным. Делая наши средства копирования в какой-то степени разумными, мы можем выбрать только файлы, которые нуждаются в копировании, и тем самым сохранить время и память. Наилучший способ обеспечить, чтобы копирование выполнялось регулярно - минимизировать время и требуемые для этого усилия. Наконец, создание процедур для проверки правильности копий даст вам спокойствие духа.

 

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

 

Средства переписки файлов

 

Первая группа средств - это простые универсальные переносчики файлов. Программа cptdir может копировать каталог (и любые подчиненные каталоги, лежащие ниже в дереве) в каталог-приемник. Каталог-приемник это обычно каталог, назначенный в качестве резервной копии для некоторого проекта. Программа can берет на себя необходимую рутинную работу - убирает "мусор". Эта программа позволяет вам выбрать типы временных файлов, которые должны периодически удаляться. Направляя их в "мусорный" каталог, can предоставляет вам возможность просмотреть все, что было удалено, и восстановить то, что вы на самом деле хотите сохранить.

 

Программа dosflp допускает применение символов-шаблонов в именах файлов, используемых при копировании отобранных файлов с дискет формата MS-DOS в XENIX. Это упрощает операцию копирования и уменьшает число нажатий на клавиши.

 

Средства копирования

 

Далее представляется "рабочая лошадка" - средства копирования. Autobkp использует список маршрутных имен, чтобы определить, какие части файловой системы должны быть проверены. Затем эта программа копирует из выбранных областей те файлы, которые были добавлены или изменены в последние 24 часа.

 

Cpiobr предоставляет интерактивное дополнение к команде cpio системы UNIX. Она позволяет вам скопировать файлы с жесткого диска на гибкий и, если необходимо, восстановить их с гибкого диска на жесткий.

 

Средства проверки копирования

 

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

 

Программа log отображает регистрационный файл, чтобы показать, какое автоматическое копирование выполнялось в четыре часа утра, когда вы (надеемся) спали.

 

При создании этих средств мы просмотрим некоторые важные команды системы UNIX и обнаружим новые способы их использования. Когда вы проработаете всю данную главу, вы будете знать, как работать "с мельчайшими частицами" при использовании файловой системы UNIX. Вы сможете автоматизировать иную большую область ваших компьютерных будней. Вы должны суметь создать пользовательские утилиты копирования и верификации, удовлетворяющие вашим нуждам. Вы сможете перевести вашу систему в режим работы, обеспечивающий ей самостоятельное выживание. (Мы оставляем философам определять, даст ли это вашему компьютеру примитивную форму жизни!)

 

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

 

Переписка файла

 

cptdir - копирование дерева каталога

 

     Имя: cptdir

cptdir Копирует дерево каталога в другое место

 

Функция

Копирует дерево файловой системы, корень которого расположен в каталоге, в другой каталог системы. Нет ограничений на какой-либо специфический каталог или жесткий диск.

 

Формат

 

     cptdir [-s] каталог-источник каталог-приемник

 

Пример вызова

     cptdir $HOME /bkp

Копирует каждый файл из $HOME в каталог /bkp.

 

Командный файл CPTDIR

     1  :

     2  # &(#) cptdir v.1.0  Copy a directory tree  Autor: Russ Sage

     

     4  if [ $# -lt 2 -o $# -gt 3 ]

     5     then  echo "cptdir: argument error"           >&2

     6           echo "usage: cptdir [-s] srcdir desdir" >&2

     7           echo "          -s  silent mode"        >&2

     8           exit 1

     9  fi

     11 if [ "$1" ="-s" ]

     12   then  OPT="-pd"

     13         shift

     14   else OPT="-pdv"

     15 fi

     17  SRC=$1

     18  DEST=$2

     19  umask 0

     21 if [ -d $DEST ]

     22    then echo "\"$DEST\" already exist. Remove it? (y/n): \c"

     23         read CMD

     24         if [ "$CMD" = "y" ]

     25            then rm -rf $DEST

     26                 mkdir $DEST

     27         fi

     28    else mkdir $DEST

     29 fi

     31 if [ "`echo $DEST|cut -c1`" = "/" ]

     32   then cd $SRC

     33        find . -print | sort | cpio $OPT $DEST

     34   else PWD=`pwd`

     35        cd $SRC

     36        find . -print | sort | cpio $OPT $PWD/$DEST

     37 fi

 

Переменные среды

 

CMD

Команда, полученная от пользователя

DEST

Каталог-приемник, в который нужно копировать

OPT

Опции, которые передаются утилите cpio

PWD

Текущий рабочий каталог

SRC

Каталог-источник, из которого нужно копировать

 

Описание

 

Зачем нам нужен cptdir?

 

Мы уже отмечали необходимость в дополнительных командах, которые рекурсивно обходят древовидную структуру файловой системы UNIX. В ранних версиях UNIX единственная команда tar могла управлять движением по дереву. В более новых версиях системы имеется опция -r в команде cp, которая делает cp рекурсивной (эта возможность реализована только в последней версии System V) и команда cpio. Последняя является многоцелевой командой копирования, которая может иметь дело как с потоковым форматом, так и с форматом файловой системы.

 

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

 

Ошибки могут привести к потере времени и даже хуже того, к неожиданным побочным эффектам. С некоторыми из этих эффектов связаны изменения прав доступа и владельца, порядок распределения индексных дескрипторов файлов (inode), размещения файлов-приемников и результирующие полные имена. Очень много необходимо запомнить и заново вызывать каждый раз при копировании. Поскольку такое копирование делается не часто, тяжело запомнить все эти детали. Мы разрешаем эту проблему, автоматизируя детали процесса и в то же время предоставляя пользователю гибкость и управление результатами. Мы создаем инструменты для управления файлами, которые являются хорошими дополнительными средствами к основным командам системы UNIX.

 

Что делает cptdir?

 

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

 

Вы можете указать, хотите ли вы, чтобы на экран выводились имена копируемых файлов. Если вы не хотите этого, используйте опцию -s ("silent" - молчаливый). По умолчанию используется режим "verbose" (многословный), который отображает имена по мере копирования файлов.

 

Заметьте, что это копирование, а не перемещение файлов. Недостаток копирования в отличие от перемещения заключается в том, что если приемником является каталог на том же диске, то вам требуется дополнительное место на диске для размещения второго образа. Вам также необходимо иметь достаточно описателей файлов (inodes) для сохранения всех файлов. В противном случае вы можете лишиться шанса сбросить в "мусорную корзину" ваши рабочие файлы.

 

В командной строке допустимо указание каталога-источника и имя каталога-приемника. Единственный ключ, допустимый в командной строке это "-s". Любой другой ключ приводит к завершению команды, не вызывая никаких разрушений. Вы, конечно, можете добавить программный код с целью проверки опции и выдачи сообщения о допустимых ключах, если указано нечто отличное от -s. Если вы делаете еще какую-либо проверку на наличие ошибок сверх того, что требуется для предотвращения разрушения данных или системы, то это дело личного вкуса. Минимизация проверок на наличие ошибок дает более компактные и быстрые сценарии, подходящие для опытных пользователей.

 

Если указанный каталог-приемник не существует, то он создается. Если каталог-приемник уже существует, выдается сообщение об этом и вам задается вопрос о том, хотите ли вы очистить его. Если вы ответите "yes", каталог уничтожается и создается снова пустым. Если вы ответите "no", каталог остается таким, какой есть и копируемые файлы просто добавляются к уже существующим в наличии. При этом может возникнуть некоторая путаница, особенно если некоторые файлы с такими именами уже существуют в каталоге-приемнике. В большинстве случаев, однако, у пользователей не появляется желания добавлять свою копию в существующий каталог.

 

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

 

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

 

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

 

Примеры

 

    1. $ cd /mnt

    $ cptdir /bin .

Перейти на другой диск (обычно смонтированный в каталоге /mnt) и копировать все файлы из каталога /bin в текущий каталог. Обратите внимание, что результирующими файлами будут /mnt/*, что может не совпадать с вашим желанием.

    2. $ cd /bin

    $ cptdir . /mnt/bin

То же, что и в предыдущей команде, но обратите внимание, что точка изменила свою позицию. Команда указывает копирование всех файлов текущего каталога в каталог /mnt/bin. Получаются файлы /mnt/bin/*, что выглядит более резонным.

     3. $ cptdir /bin /mnt

То же, что и в примере 1.

     4. $ cptdir /bin /mnt/bin

То же, что и в примере 2.

 

Пояснения

 

В строках 4-9 производится проверка аргументов командной строки. Если указано меньше двух аргументов, этого недостаточно. Как минимум должны быть указаны имена каталога-источника и каталога-приемника. Более трех аргументов слишком много. Самое большее, там должны быть опция -s, каталог-источник и каталог-приемник.

 

В строках 11-15 устанавливаются ключи команды cpio. По умолчанию это pdv, что означает "pass" (передача) для копирования в формате файловой системы (в отличие от необработанного потока данных), "directory" (каталог) для создания каталога при необходимости и "verbose" (многословный) для выдачи имен файлов по мере их копирования. Если первым позиционным параметром является ключ -s, который указывает запуск cptdir в молчаливом режиме, ключи команды cpio не содержат ключа выдачи сообщений и, таким образом имена файлов не выдаются на экран.

 

Строки 17,18 и 19 устанавливают каталоги "откуда" и "куда" и устанавливают переменную umask в 0. Переменная umask определяет подразумеваемые права доступа для всех файлов, созданных нашим командным процессором. Мы изменяем umask для гарантии того, что все файлы копируются в дерево-приемник и ни один из них не будет заблокирован из-за отсутствия прав чтения или записи. Побочным эффектом является то, что все каталоги имеют права доступа вида rwxrwxrwx, а все файлы - вида rw-rw-rw-, что может потребовать изменений для обеспечения вашей безопасности. Изменение umask имеет действие только на время работы процедуры. Когда cptdir завершается, umask вашего вызывающего командного процессора остается неизменным.

 

Строки 21-29 выполняют проверку каталога-приемника. Если он уже существует, вас запрашивают, нужно ли его удалить и заново создать. Если он не существует, он создается для работы cpio.

 

Строки 31-36 выполняют непосредственно копирование. Прежде чем объяснить, что здесь делается, давайте сперва посмотрим, как работает cpio. Поскольку оператор find генерирует список файлов, нам необходимо представлять, как его выход может влиять на выполнение cpio.

 

Если мы указали "find . -print", то полные имена файлов будут иметь точку впереди, например:

 

         ./dir

         ./dir/file1

         ./dir/file2

 

Это относительная нотация, которая очень полезна, когда вы не хо тите, чтобы ваши файлы передавались согласно абсолютным маршрутным именам, но хотим сохранить их взаимосвязь друг с другом. Если на них ссылаться относительно точки, то место, куда они будут помещены, может быть, где угодно. Однако, если мы скажем "find /dir -print", список будет выглядеть так:

 

         /dir

         /dir/file1

         /dir/file2

 

В обоих случаях мы ссылаемся на наш текущий каталог, но применение записи вида /dir заставляет полное имя начинаться с "/" и не допускает использование относительной нотации. Передача такой же информации команде cpio может радикально изменить место размещения ваших файлов. Например, если я сказал "cd /src; find . -print | cpio -pdv /dest", результирующий список будет таким:

 

         /dest/./dir

         /dest/./dir/file1

         /dest/./dir/file2

 

где на первом месте стоит, вероятно, то, что вы хотели. Однако, если я сказал "find /src -print | cpio -pdv /dest", результирующие маршрутные имена будут такими:

 

        /dest/src/dir

        /dest/src/dir/file1

        /dest/src/dir/file2

 

что не очень хорошо, поскольку это создает уровень каталога, в котором нет необходимости. Заметьте, что имя каталога "src" было перехвачено при распечатке. Это произошло потому, что его выдал find, а cpio считает, что src было частью имени каталога-приемника.

 

Повсеместное использование относительной нотации может привести нас к потере уже имеющейся информации. Например, если бы я сказал "cd/nowhere; find /src ....", каталог-приемник получил бы неверное имя. Мыдолжны уметь использовать этот тип нотации и не попадать в ловушки синтаксиса. Это и есть то, что делает cptdir.

 

В строке 31 производится проверка на то, является ли первый символ в маршрутном имени целевого каталога символом "косая черта" ("/"). Еслида, то мы точно знаем, что имя каталога-приемника выражено в виде абсолютного маршрутного имени, поэтому мы можем сменить каталоги без потери информации о нашем текущем каталоге. В строках 32-33 мы переходим в каталог-источник и копируем файлы.

 

Но если первый символ каталога-приемника НЕ является наклонной чертой, используемая нотация является относительной. Это значит, что если мы сменим каталог, мы потеряем информацию о том, где мы находились, когда был запущен командный файл. Чтобы избежать этого, мы получаем в строке 34 полное имя текущего каталога путем перехвата вывода команды pwd и присвоения этого значения переменной таким образом, что позже мы сможем ее восстановить. Затем мы переходим в каталог-источники копируем файлы, используя префикс абсолютного маршрутного имени от команды pwd и относительный суффикс того места, где мы находимся.

 

Причиной того, что мы так поступаем, является использование относительной (точечной) нотации в операторе find. Как можно было видеть в предыдущем описании, отказ от использования точечной нотации может привести к путанице в маршрутных именах каталога-приемника. Для того чтобы всегда использовать точку в операторе find, нам необходимо убедиться, куда мы собираемся пересылать файлы. Еще раз напомним, что команда cd действует только для данного командного процессора "низкого" уровня, поэтому она не влияет на тот командный процессор, который запустил командный файл. Вообще, командный файл должен оставить пользователей в тех же условиях, в которых они находились перед его запуском, за исключением выполнения необходимых работ, при которых не производится смена текущего каталога.

 

Когда cptdir завершается, управление возвращается вызывающему командному процессору, который по-прежнему ведет свой собственный текущий каталог. Напомним, что всегда, когда вы переходите на более низкий уровень командного процессора, экспортируемые переменные передаются вниз, но НИЧЕГО не передается наверх.

 

   
 
 
Картинная галерея
Галерея eLinux : Последние добавления : Последние добавления : Часто просматриваемые : Поиск по галерее
Linux введение : Обучение Linux : Установка Linux : Взаимодействие в сети : Команды Linux : Архитектура Linux : Работа с Linux
Секреты работы : Временные операции : Переферия
 
 

 

 
   
 
 

385 руб.

Антивирус Dr.Web Mail Gateway

Dr.Web Mail Gateway – комплексное модульное решение для обработки и фильтрации входящего и исходящего трафика на серверах под управлением Unix (Linux/FreeBSD/Solaris(x86). 

Список версий:

Антивирус Dr.Web Mail Gateway


570 руб.

FastScript

FastScript —библиотека для выполнения скриптов. Она будет полезна разработчикам, желающим добавить возможности исполнения скриптовых программ в свои проекты. FastScript написан полностью на 100% Object Pascal и может быть установлен в Borland Delphi 4-2007, Borland C++Builder 4-6, Borland Kylix 1-3 и Lazarus. 

Список версий:

FastScript


Полный каталог

 
 

 

 
   
 
   
 

 

 

 

 

Все права защищены.

Копирование запрещено.

Rambler's Top100

Дизайн:

ССтудия Onta.ru