Вход/Регистрация
UNIX — универсальная среда программирования
вернуться

Керниган Брайан Уилсон

Шрифт:

Для описания команд и их взаимодействия нужно хорошо знать структуру и внешние связи файловой системы. В этой главе излагается большинство вопросов, связанных с файловой системой, — понятие файла и его представление, каталоги и иерархия файловой системы, права доступа, индексный дескриптор (внутреннее представление файла в системе) и файлы устройств. Поскольку основная работа в системе связана с манипулированием файлами, существует множество команд для анализа и модификации файла; здесь вводятся наиболее употребительные команды.

2.1 Основные сведения о файлах

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

Лучше всего познакомиться с файлами экспериментальным путем, так что начнем с создания небольшого файла:

$ ed а

now is the time,

for all good people

.

w junk

36

q

$ls -l

– rw-r--r-- 1 you 26 Sep 27 06:11 junk

$

Здесь

junk
— это файл из 36 байт, т.е. 36 символов, которые вы ввели (не считая, конечно, символов, введенных при коррекции ошибок). Команда
cat
показывает содержимое файла в следующем виде:

$ cat junk

now is the time

for all good people

$

Команда

od
("octal dump" — восьмеричный дамп) выдает "изображение" всех байтов файла:

$ od -с junk

0000000 n o w i s t h e t i m e \n

0000020 f o r a l l g o o d p e o

0000040 p l e \n

0000044

$

Флаг

– с
означает, что следует интерпретировать байты как символы. Если добавить флаг
– b
, то можно, кроме того, показать байты как восьмеричные числа. [5]

5

В каждом байте файла находится число, достаточно большое, чтобы закодировать изображаемый символ. В большинстве систем UNIX кодировка называется ASCII ("American Standard Code for Information Interchange" — американский стандартный код для обмена информацией), но на некоторых машинах, особенно произведенных фирмой IBM, используется кодировка, называемая EBCDIC ("Extended Binary Coded Decimal Interchange Code" — расширенная двоично закодированная десятичная общая кодировка). Здесь и далее в книге мы будем применять множество символов ASCII; воспользуйтесь командой

cat /usr/pub/ascii
или прочтите
ascii(7)
, чтобы узнать восьмеричные значения символов.

$ od -cb junk

0000000 n o w i s t h e t i m e \n

156 157 167 040 151 163 040 164 150 145 040 164 151 155 145 012

0000020 f o r a l l g o o d p e o

146 157 162 040 141 154 154 040 147 157 157 144 040 160 145 157

0000040 d l e \n

160 154 145 012

0000044 $

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

– х
предписывает команде
od
печатать информацию в шестнадцатеричной форме.

Обратите внимание на то, что после каждой строки идет символ с восьмеричным значением 012. Это символ перевода строки для ASCII; система помещает его во входной поток, когда вы нажимаете клавишу RETURN. По соглашению, заимствованному из языка Си, символ перевода строки изображается как

\n
, что лишь облегчает чтение. Такого соглашения придерживаются только программы типа
od
; в файле же хранится единственный байт 012.

Перевод строки — наиболее типичный пример специального символа. Другими специальными символами, связанными с некоторыми операциями управления терминалом, являются символы: шаг назад (восьмеричное значение 010 изображается как

\b
), табуляция (011,
\t
), возврат каретки (015,
\r
).

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

Если ввести последовательность

\<-

(т.е. символ

\
и вслед за ним "шаг назад"), то ядро в этом случае "считает", что вы действительно хотите ввести символ
<-
, поэтому
\
исчезает, а в вашем файле появляется байт 010. Когда "шаг назад" отражается на терминале, происходит возврат курсора, так что он указывает на символ
\
.

При выводе файла, содержащего символ

<-
, он передается на терминал без обработки, что опять приводит к передвижке курсора на одну позицию назад. Если воспользоваться командой
od
, чтобы вывести файл, содержащий символ
<-
, он появится как байт со значением 010 или, если указан флаг
– с
, как
\b
.

  • Читать дальше
  • 1
  • ...
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: