Рассел Сейдж. Приемы профессиональной работы в unix перевод "Tricks of the unix masters" by Russel G

Вид материалаДокументы

Содержание


Возможные модификации
3.1. Сопровождение файлов
3.2. Пересылка файлов
3.3. Средства получения резервных копий
3.4. Средства проверки операций копирования
3.1. Сопровождение файлов
3.1.1. Операции сопровождения
3.1.2. Средства пересылки файлов
3.1.3. Средства копирования
3.1.4. Средства проверки операций копирования
3.2. Пересылка файлов
Пример вызова
Переменные среды
Подобный материал:
1   ...   7   8   9   10   11   12   13   14   ...   45


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

помним, что команда find проходит все дерево каталогов вниз до конца

по всем поддеревьям, начиная с каталога, имя которого указано в ко-

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

то обрабатываться могут буквально сотни файлов. Поскольку вы ограниче-

ны максимальным размером выводного файла, вы можете обработать только

ограниченное число файлов. Конечно, количество файлов, которое вы мо-

жете обработать, зависит также от того, насколько велики входные фай-

лы.

Если выводной файл достигает своего максимума, все добавляемые

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

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

системе попытка обработать большое дерево, например все исходные

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

выходной файл заполнится. Это означает, что вы должны находиться рядом

и следить за тем, когда файл переполнится. Если он все-таки перепол-

нился, вы должны все выбросить и начать сначала. Это также означает,

что вы должны перейти вниз по дереву. Это может быть проблемой в сба-

лансированных деревьях.

Например, рассмотрим каталог /usr/lib. Этот каталог содержит мно-

го файлов на первом уровне и много каталогов первого уровня. Если бы

мы не обработали все файлы каталога /usr/lib за одну попытку, мы долж-

ны были бы пойти вниз по подкаталогам каталога /usr/lib. Попытки де-

лать это вручную и запускать pall в каждом подкаталоге заняли бы много

времени и могли бы привести к ошибкам с вашей стороны. Кроме того,

pall допускает указание только одного имени каталога, что приведет к

получению большого количества распечаток и к путанице при их сортиров-

ке.

Что же делать? Радикальным решением является увеличение значения

ulimit. Вы можете сделать это либо с помощью программы на языке Си,

использующей системный вызов ulimit, либо командой shell'а ulimit.

Техника выполнения такой работы представлена в главе 7.


ВОЗМОЖНЫЕ МОДИФИКАЦИИ


Возможно, вы захотите добавить свои собственные штрихи в некото-

рых местах командного файла. Первым местом является то, где указыва-

ются символы поиска файлов программной разработки. Символы, использо-

ванные нами - это наиболее употребимые суффиксы в UNIX. Если вы

используете не Си и ассемблер, а другие языки, то вы можете добавить

соответствующие символы.

Следующим местом, где могут быть сделаны дополнения, являются оп-

ции, которые может понимать pall. Вам могут понадобиться файлы с опре-

деленными именами или определенными типами, например, файлы nroff. Эти

опции могут быть легко добавлены в оператор case, что улучшит команду.

Последним местом возможных изменений является тип файлов, которые

нужно пропускать. Символьная строка для команды egrep покрывает боль-

шинство важных нетекстовых типов файлов. В вашей системе могут быть

какие-то особые типы или же имена могут быть другими. Если вам необхо-

димо дополнить строку, сделайте это. Команда egrep может обработать

довольно много информации. Я не знаю ее ограничений. Возможно, вы об-

наружите их, просматривая исходный текст утилиты egrep. Если получа-

ется слишком длинная строка и не помещается на экране, ничего страшно-

го. Перенос на следующие строки экрана не опасен, пока общее количест-

во символов не превысит 255. Опасно только указывать переадресацию

символьной строки if на нулевое устройство в следующей после команды

egrep строке. Кажется, что все работает правильно, но это не так. Пе-

реадресация должна указываться в той же строке, где стоит команда

egrep.

В данной главе сделано очень много. Наиболее важно то, что полу-

чено множество новых идей, которые можно использовать при эксплуатации

программной среды и просмотре файлов любого типа. В следующей главе мы

углубимся в рутинную работу по ежедневному сопровождению файлов и

используем изученные средства, чтобы они облегчили нашу жизнь.


* ГЛАВА 3. Поддержка файловой системы *


СОДЕРЖАНИЕ


ВВЕДЕНИЕ

3.1. СОПРОВОЖДЕНИЕ ФАЙЛОВ

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

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

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

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

3.2. ПЕРЕСЫЛКА ФАЙЛОВ

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

3.2.2. can - удаление файлов в "мусорную корзину"

3.2.3. dosflp - копирование файлов с гибкого диска формата MS-DOS

с использованием символов шаблона в именах файлов

3.3. СРЕДСТВА ПОЛУЧЕНИЯ РЕЗЕРВНЫХ КОПИЙ

3.3.1. autobkp - автоматически наращивамый файл резервной копии

3.3.2. cpiobr - копирование и восстановление файлов в виде потока

данных

3.4. СРЕДСТВА ПРОВЕРКИ ОПЕРАЦИЙ КОПИРОВАНИЯ

3.4.1. dsum - контрольные суммы двух катологов

3.4.2. log - меню доступа к файлам протокола копирования


ВВЕДЕНИЕ


Даже "небольшая" система UNIX с малым числом пользователей порож-

дает сотни файлов в ходе обычной работы. В процессе программирования вы

можете создавать множество файлов для различных версий ваших программ.

Ведение почты и запись текста при помощи редактора vi способствует то-

му, что накапливается еще больше файлов. Такие утилиты, как uucp, lp и

другие добавляют еще больше файлов. Если у вас система UNIX установлена

на микро-ЭВМ, то ваш жесткий диск начинает переполняться. В больших

многопользовательских системах дисковая память редко считается пробле-

мой, но в действительности всегда кажется, будто файлы стремятся расши-

риться до заполнения всей доступной дисковой памяти. Поэтому каждый

пользователь должен нести ответственность за расход дискового прост-

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

финансовые стимулы.) Однако, то, что вы хотите сохранить, вы хотите

СОХРАНИТЬ. Именно здесь начинается работа по созданию резервных копий.


3.1. СОПРОВОЖДЕНИЕ ФАЙЛОВ


В предыдущей главе мы разработали некоторые средства поиска и

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

наших файлов. Теперь мы собираемся обратиться к важнейшим рутинным ра-

ботам, которые позволят избежать хаоса и катастрофы.

Сопровождение файлов означает избавление от файлов, которые нам

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

которые мы хотим сохранить. Для этого требуется возможность использова-

ния разнородных доступных носителей данных. Сопровождение файлов подра-

зумевает также ряд систематических, повторяющихся задач, а это означа-

ет, что мы можем создать средства системы UNIX для автоматизации этого

процесса.


3.1.1. ОПЕРАЦИИ СОПРОВОЖДЕНИЯ


Сопровождение файлов включает два вида операций: создание резерв-

ных копий (копирование) и удаление "мусора".

Копирование - это дань уважения, которую мы платим за хрупкость

физических данных в руки Мерфи и других богов энтропии. Хорошее

средство копирования является быстрым, гибким, простым в использовании

и стимулирует пользователей часто копировать самые важные файлы. В

последующем тексте будут представлены различные методы копирования,

пригодные для разных конфигураций системы и типов носителей.

Имеется два вида резервных копий: "мягкие" и "твердые". "Мягкие"

резервные копии - это копии в другом файле или каталоге в той же или в

другой файловой системе (т.е. разделе) на том же или другом жестком

диске. Такого рода копирование сделать легко и оно предохраняет от на-

носимого самому себе ущерба, такого как удаление файла по невниматель-

ности. Чаще всего для такого типа копирования используется наше

средство cptdir. Основной недостаток мягкого копирования заключается в

том, что вы по-прежнему уязвимы для таких воздействий, которые влияют

на ваш физический носитель (обычно жесткий диск) так, что и оригинал и

копия оказываются разрушенными.

"Твердая" копия - это копия на другом устройстве или даже в другой

системе UNIX. Средства, представленные ниже в данной главе, управляют

такого рода копированием и дают вам возможность выполнять копирование

такого типа и с такой периодичностью, которые соответствуют объему ва-

шей вычислительной системы, уровню ее активности и важности хранимых

данных.

Твердое копирование всегда несколько утомительно, потому что диски

или ленты должны быть смонтированы (или должна быть установлена связь с

другой системой), а эта операция требует много времени. Преимущество,

естественно, заключается в том, что вы больше не зависите от целост-

ности какого-либо одного устройства.

Автоматизируя нашу процедуру копирования, мы стараемся сделать его

как можно менее болезненным. Делая наши средства копирования в какой-то

степени разумными, мы можем выбрать только файлы, которые нуждаются в

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

обеспечить, чтобы копирование выполнялось регулярно - минимизировать

время и требуемые для этого усилия. Наконец, создание процедур для про-

верки правильности копий даст вам спокойствие духа.

"Удаление мусора" можно автоматизировать путем указания и подго-

товки к удалению файлов, которые, вероятно, будут временными, либо ка-

ких-то других файлов, которые созданы (но не обязательно разрушены) при

компиляции, выполнении конвейеров или другими операциями. Вы также мо-

жете указывать файлы, специфичные для ваших работ как не подлежащие

удалению.


3.1.2. СРЕДСТВА ПЕРЕСЫЛКИ ФАЙЛОВ


Первая группа средств - это простые универсальные переносчики фай-

лов. Программа cptdir может копировать каталог (и любые подчиненные ка-

талоги, лежащие ниже в дереве) в каталог-приемник. Каталог-приемник -

это обычно каталог, назначенный в качестве резервной копии для некото-

рого проекта.

Программа can берет на себя необходимую рутинную работу - убирает

"мусор". Эта программа позволяет вам выбрать типы временных файлов, ко-

торые должны периодически удаляться. Направляя их в "мусорный" каталог,

can предоставляет вам возможность просмотреть все, что было удалено, и

восстановить то, что вы на самом деле хотите сохранить.

Программа dosflp допускает применение символов-шаблонов в именах

файлов, используемых при копировании отобранных файлов с дискет формата

MS-DOS в XENIX. Это упрощает операцию копирования и уменьшает число на-

жатий на клавиши.


3.1.3. СРЕДСТВА КОПИРОВАНИЯ


Далее представляется "рабочая лошадка" - средства копирования.

Autobkp использует список маршрутных имен, чтобы определить, какие

части файловой системы должны быть проверены. Затем эта программа копи-

рует из выбранных областей те файлы, которые были добавлены или измене-

ны в последние 24 часа.

Cpiobr предоставляет интерактивное дополнение к команде cpio

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

гибкий и, если необходимо, восстановить их с гибкого диска на жесткий.


3.1.4. СРЕДСТВА ПРОВЕРКИ ОПЕРАЦИЙ КОПИРОВАНИЯ


Выполнение копирования не избавит вас от волнений, пока вы не бу-

дете знать, что вы скопировали все, что хотели, и что копирование прош-

ло корректно. Программа dsum использует контрольную сумму для проверки

того, что исходный каталог и каталог-копия содержат одни и те же файлы.

Программа log отображает регистрационный файл, чтобы показать, какое

автоматическое копирование выполнялось в четыре часа утра, когда вы

(надеемся) спали.

При создании этих средств мы просмотрим некоторые важные команды

системы UNIX и обнаружим новые способы их использования. Когда вы про-

работаете всю данную главу, вы будете знать, как работать "с мельчайши-

ми частицами" при использовании файловой системы UNIX. Вы сможете авто-

матизировать иную большую область ваших компьютерных будней. Вы должны

суметь создать пользовательские утилиты копирования и верификации,

удовлетворяющие вашим нуждам. Вы сможете перевести вашу систему в режим

работы, обеспечивающий ей самостоятельное выживание. (Мы оставляем фи-

лософам определять, даст ли это вашему компьютеру примитивную форму

жизни!)

Между прочим, многие средства в данной главе пользуются преиму-

ществами рекурсивных методов обхода дерева, которые мы разработали в

предыдущей главе. Вы можете просмотреть тот материал, если у вас име-

ются затруднения в понимании того, что представлено здесь.


3.2. ПЕРЕСЫЛКА ФАЙЛОВ


3.2.1. 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) и