Рассел Сейдж. Приемы профессиональной работы в unix перевод "Tricks of the unix masters" by Russel G
Вид материала | Документы |
- Лекция 10. Файловые системы Unix, 116.79kb.
- Unix-подобные операционные системы, характеристики, особенности, разновидности, 40.63kb.
- Методические материалы, 3002.45kb.
- Курс для опытных администраторов unix, 67.69kb.
- Министерство Образования Российской Федерации. Юургу курсовая, 383.18kb.
- Программа курса «unix», 18.71kb.
- Лабораторная работа №1. Командный интерпретатор, 418.36kb.
- The design of the unix operating system by Maurice, 9215.6kb.
- Разработка автоматизированной системы мониторинга аппаратного и программного обеспечения, 20.06kb.
- Лекція 6 "Інформатика та комп'ютерна техніка" Тема Сервісні та прикладні програми Види, 55.04kb.
Как мы уже отмечали, общий размер выводного файла ограничен. На-
помним, что команда 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) и