Главная · Поиск книг · Поступления книг · Top 40 · Форумы · Ссылки · Читатели

Настройка текста
Перенос строк


    Прохождения игр    
Demon's Souls |#15| Dragon God
Demon's Souls |#14| Flamelurker
Demon's Souls |#13| Storm King
Demon's Souls |#12| Old Monk & Old Hero

Другие игры...


liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня
Rambler's Top100
Образование - Сэйдж Рас Весь текст 822.4 Kb

Приемы профессиональной работы в Unix

Предыдущая страница Следующая страница
1 ... 56 57 58 59 60 61 62  63 64 65 66 67 68 69 ... 71
многопользовательский режим,  чтобы свести к минимуму неудобства поль-
зователей.  Для  того  чтобы  сделать это,  нам нужно понять концепцию
"уровней работы системы" и использовать их.

     Уровень работы (run level)  в  системе  UNIX  представляет  собой
состояние  или конфигурацию,  в которой может быть машина.  Фактически
это число,  которое определяет, какие возможности системы включены или
отключены и находится ли система в одноили многопользовательском режи-
ме. Описание того, что происходит на каждом уровне работы системы, со-
держится в файле /etc/inittab.  Обычно изменение уровня работы системы
включает в себя переход от  многопользовательского  режима  (например,
уровень 6), к однопользовательскому режиму (уровень S).

     Одним из побочных эффектов перехода от многопользовательского ре-
жима к однопользовательскому является то,  что все дополнительные фай-
ловые  системы  размонтируются.  Единственной  смонтированной файловой
системой является корневая (определенная как  /dev/root,  /dev/hd0a  и
т.п.).  Ее никогда нельзя размонтировать. Когда происходит переход об-
ратно к многопользовательскому режиму, файловые системы обычно повтор-
но монтируются с помощью файла /etc/rc.

     Мы можем эмулировать однопользовательский режим путем прекращения
выполнения всех процессов в системе командой  kill  и  размонтирования
всех файловых систем. Командный файл umntsys предназначен для этой це-
ли.

                         ЧТО ДЕЛАЕТ umntsys?

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

     ПОЯСНЕНИЯ

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

     Вся работа  выполняется в строке 10.  Этот оператор похож на вол-
шебное заклинание.  Начинается он с выполнения обычной  команды  mount
без аргументов.  По умолчанию команда mount выводит таблицу с информа-
цией обо всех каталогах  и  именах  устройств  монтированных  файловых
систем. Эта таблица выглядит примерно так:

---------------------------------------------------------------------------

|
|    / on /dev/hd0a read/write on Mon Jan 06 09:53:03 1986
|    /tmp on /dev/hd01 read/write on Mon Jan 06 09:53:03 1986
|    /usr on /dev/hd02 read/write on Mon Jan 06 09:53:03 1986
|    /u1 on /dev/hd03 read/write on Mon Jan 06 09:53:03 1986
|    /u2 on /dev/hd04 read/write on Mon Jan 06 09:53:03 1986
|    /u3 on /dev/hd05 read/write on Mon Jan 06 09:53:03 1986
|    /mnt on /dev/fd01 read/write on Mon Jan 06 09:54:41 1986
|

     Когда файловая система смонтирована,  требуются и каталог,  и имя
устройства. Когда файловая система не смонтирована, используется толь-
ко имя устройства.  Нам нужно вырезать имена устройств из таблицы мон-
тирования  и вставить их в команду umount.  Это делается с помощью ко-
манды sed.

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

     Следующая операция редактирования выполняется более  замысловато.
Она использует возможность группирования регулярных выражений и после-
дующей ссылки на них по номеру,  что вы уже видели в  некоторых  наших
предыдущих  командных файлах.  Данный синтаксис (регулярное выражение)
предназначен для группирования символов и последующей ссылки на них  с
помощью номера \n. Фокус в том, чтобы выделить только имя устройства и
сгруппировать его,  что и делает команда подстановки sed'а. Первое вы-
ражение означает:  "От начала строки распознать любой символ, за кото-
рым следует любое количество любых  символов,  пробел  и  слово  `on';
сгруппировать следующие символы вплоть до пробела,  слово `read' и все
символы после него".  В результате всего  этого  выделяется  имя  уст-
ройства и помещается во временную переменную, чтобы впоследствии к ней
можно было обратиться.

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

---------------------------------------------------------------------------

|
|    umount /dev/hd0a
|    umount /dev/hd01
|    umount /dev/hd02
|    umount /dev/hd03
|    umount /dev/hd04
|    umount /dev/hd05
|    umount /dev/fd01
|

     Теперь эти  команды  по  конвейеру  передаются другому shell ("sh
-").  Символ "-" указывает shell,  что свои команды он должен получать
со стандартного ввода,  а в данном случае это наши команды umount, пе-
реданные по конвейеру. Они размонтируют все файловые системы.

---------------------------------------------------------------------------

ИМЯ: lrgf
---------------------------------------------------------------------------

lrgf      Создает файл максимально возможного размера

     НАЗНАЧЕНИЕ

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

     ФОРМАТ ВЫЗОВА

lrgf

     ПРИМЕР ВЫЗОВА

lrgf      Определение границы размера файла

     ТЕКСТ ПРОГРАММЫ

1   char id[] =
    "@(#) lrgf v1.0 Create the largest file Author: Russ Sage
                    Создать файл максимального размера

3   #include
4   #include
5   #include
6   #include

8   #define FSIZ 512
9   #define BSIZ 1024

11  long ulimit();
12  char buf[BSIZ];

14  main()
15  {
16      register int n, fd, bcnt;
17      char file[FSIZ];

19      for (bcnt=0; bcntОПИСАНИЕ

                   ЗАЧЕМ НАМ НУЖНА ПРОГРАММА lrgf?

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

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

                           ЧТО ДЕЛАЕТ lrgf?

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

     При вызове программа lrgf выводит сообщение, содержащее общее ко-
личество байтов,  которое вы можете записать в файл.  Это значение вы-
числяется по значению ulimit,  поэтому оно разное для разных пользова-
телей и зависит от shell, с которым пользователь сейчас работает.

     Затем у  вас  запрашивается имя файла.  Вы можете указывать любое
имя,  для которого вы имеете права записи.  Одним из способов проверки
жесткого диска является запись одного из таких больших файлов в каждый
раздел диска и затем проверка отдельных файловых систем. После запуска
программы  вы увидите строку с сообщением,  которое постоянно обновля-
ется.  Оно содержит общее число записанных блоков и количество байтов,
которое записывалось при каждой попытке записи. Программа lrgf записы-
вает в файл каждый раз по 1024 байта. В зависимости от вашего значения
ulimit  количество байтов,  дописываемых в конец файла,  может не быть
равным в точности 1 Кб.  Выходное сообщение постоянно печатается в од-
ной и той же строке,  заменяя на экране старое значение.  Это достига-
ется путем вывода только символа возврата каретки, а не перевода стро-
ки.

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

     ПРИМЕРЫ

1.  $ lrgf
    /dev/rfd0

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

2.  $ lrgf
    /usr/tmp/lrg

     Создание файла в файловой системе /usr.  Большинство систем XENIX
используют  каталог  /usr как отдельную файловую систему,  отличную от
корневой.  Созданием файла в каталоге /usr /tmp мы можем проверить по-
ложение дел в этой часто используемой файловой системе.

3.  $ lrgf
    /tmp/lrg

     В данном случае создаваемый файл займет место в корневой файловой
системе  (если вы не имеете каталога /tmp в вашей собственной файловой
системе).  Потребуется не слишком много таких  файлов  для  заполнения
всех свободных блоков в корневой файловой системе.

4.  $ lrgf
    /mnt/lrg

     Создание файла на гибком диске в  предположении,  что  на  гибком
диске имеется файловая система и она смонтирована в каталог /mnt.

5.  $ F=0
    $ while :
    > do
    >           echo -r "-->  Making file $F  <--"
    >           ./lrgf <<-!
    >           $F
    >           !
    >           echo
    >           F=`expr $F + 1`
    > done

     Данный цикл запускает программу lrgf бесконечное число раз. Счет-
чиком является переменная F. Она должна быть предварительно установле-
на в нуль,  чтобы shell рассматривал ее как число, а не как символьную
строку.  Сначала выводится сообщение, содержащее имя создаваемого фай-
ла.  Первым именем  файла  является  0.  Программа  lrgf  запускается,
используя  в  качестве входных данных "данный документ" (т.е.  сам ко-
мандный файл). В качестве ответа на вопрос об имени файла используется
значение $F. Значение переменной F увеличивается, и программа lrgf вы-
зывается снова.  Именами файлов являются 0,  1, 2 и т.д. Это продолжа-
ется до тех пор, пока не останется больше свободного места. Вряд ли вы
будете пользоваться этим часто,  но для  тестирования  это  прекрасное
средство заполнить все свободное пространство. Если вы хотите увидеть,
что делает ваша система,  когда исчерпаны свободные  блоки,  примените
данный командный файл.

     ПОЯСНЕНИЯ

     Строки 3-6 включают все необходимые файлы заголовков.  Эти  файлы
содержат определения и метки, необходимые данной программе.
Предыдущая страница Следующая страница
1 ... 56 57 58 59 60 61 62  63 64 65 66 67 68 69 ... 71
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 
Комментарии (52)

Реклама