20 сент. 2000 г.

Азы linux (для детей) урок 17

Виды файлов

Большинство файлов просто файлы, называемые обычными файлами; они содержат обычные данные, например, текстовые файлы, исполняемые файлы (или программы), файлы ввода или вывода программ и т.д.
Хотя предположение, что все что вы обнаружите в системе Linux представляет собой файл достаточно верное, есть некоторые особенности.
  • Каталоги: файлы, которые представляют собой списки других файлов.
  • Специальные файлы: механизм использования ввода-вывода. Большинство специальных файлов находятся в /dev, мы их обсудим позже.
  • Ссылки: механизм обеспечения видимости файла или каталога во множестве частей файлового дерева системы. Мы в деталях поговорим о ссылках.
  • (Домены) сокеты: особый тип файла, подобный сокетам TCP/IP, обеспечивающий взаимодействие в сети процессов, защищенных контролем файловой системы на доступ.
  • Именованные каналы: действуют более или менее похоже на сокеты и обеспечивают способ коммуникации между процессами без использования правил поведения сетевых сокетов.
Опция -l команды ls отображает тип файла, на что указывает первый символ в каждой выводимой строке:
jaime:~/Documents> ls -l
total 80
-rw-rw-r--   1 jaime   jaime   31744 Feb 21 17:56 intro Linux.doc
-rw-rw-r--   1 jaime   jaime   41472 Feb 21 17:56 Linux.doc
drwxrwxr-x   2 jaime   jaime    4096 Feb 25 11:50 course
Эта таблица дает обзор символов, характеризующих тип файла:
Таблица 3.1. Типы файлов
Символ Значение
- Обычный файл
d Директория
l Ссылка
c Специальный файл
s Сокет
p Именованный канал
b Блочное устройство
Чтобы не нужно было всегда выводить длинный список для просмотра файлового типа, многие системы по умолчанию выдают не просто ls, а ls -F, который добавляет суффиксы к именам файлов с виде одного из символов “/=*|@”, которые указывают на тип файла. Чтобы было еще легче начинающим пользователям, обе опции и -F и --color обычно комбинируют, см. Раздел, "Дополнительная информация о ls". Для лучшей удобочитаемости в этом документе мы будем использовать ls -F.
Как пользователю вам приходится иметь дело только непосредственно с текстовыми файлами, исполняемыми файлами, каталогами и ссылками. Специальные типы файлов существуют для того, чтобы ваша система делала то, что вы требуете от нее и рассматриваются системными администраторами и программистами.
Теперь, прежде чем мы рассмотрим важные файлы и каталоги, нам нужно узнать побольше о разделах.

О разметке

Зачем разделы?

Большинство людей имеют смутное представление о том, что такое разделы, так как каждая операционная система самостоятельно способна их создавать или удалять. Может показаться странным, что Linux использует более чем один раздел на одном диске, даже когда выполняется стандартная процедура установки; для этого должно быть какое-то объяснение.
Одной из целей разделения на разделы является повышение сохранности данных на случай непредвиденных происшествий. Путем разделения жесткого диска на разделы, данные могут быть сгруппированы и разобщены. Когда происходит авария, повреждаются данные только одного раздела, а данные других разделов скорее всего уцелеют.
Этот принцип датируется теми днями, когда у Linux не было журналируемой файловой системы и сбои питания могли привести к катастрофе. По причинам обеспечения надежности и безопасности использование разделов осталось, так нарушение одной части системы, автоматически не означает, что весь компьютер в опасности. В настоящее время это самая важная причина для разметки. Простой пример: пользователь создает скритп, программу или веб-приложение, которые начинают заполнять диск. Если диск содержит только один большой раздел, вся система перестает работать, если диск заполнен. Если пользователь хранит данные на отдельном разделе, то только тот (с данными) раздел будет затронут, в то время как системные разделы и, возможно, другие разделы с данными сохранят функциональность.
Помните, что имеющаяся журналируемая файловая система обеспечивает только защиту данных в случае сбоя питания и неожиданного отключения устройств хранения. Она не защищает ваши данные от испорченных блоков и логических ошибок в файловой системе. В этих случаях, вам следует использовать RAID (избыточный массив недорогих жёстких дисков) решение.

Схемы и типы разделения

Есть два вида основных разделов в системе Linux:
  • раздел с данными: обычные данные системы Linux, включая корневой раздел, содержащий все данные для старта и запуска системы; и
  • раздел подкачки: расширение физической памяти компьютера, представляет собой дополнительную память на жестком диске.
Большинство систем содержат корневой раздел, один или несколько разделов с данными, и один или несколько разделов подкачки. Системы в смешанных средах, могут содержать разделы данных других систем, такие как разделы файловых системам FAT или VFAT с данными MS Windows.
Большинство систем Linux во время установки используют fdisk, чтобы задать тип раздела. Как вы могли заметить в ходе упражнений к Главе 1, это обычно происходит автоматически. Но однажды вам может так не повести. В таких случаях вам придется выбрать тип раздела вручную и даже вручную сделать настоящее разбиение на разделы. Стандартные разделы Linux имеют номера 82 для раздела подкачки и 83 для данных, который может быть журналируемым (ext3) или обычным (ext2, на старых системах). Утилита fdisk имеет встроенную помощь, на случай если вы забудете эти значения.
Наряду с этими двумя, Linux поддерживает множество других типов файловых систем, такие как относительно новая файловая система Reiser, JFS, NFS, FATxx и многие другие файловые системы, изначально доступные на других (проприетарных) операционных системах.
Стандартный корневого раздела (обозначается одиночной косой чертой, /), составляет около 100-500 МБ и содержит системные конфигурационные файлы, большинство основных команд и серверные программы, системные библиотеки, некоторое временное пространство и домашний каталог пользователя с правами администратора. Стандартная установка для корневого раздела требуется около 250 МБ.
Пространство для подкачки (обозначается как swap) доступно только для самой системы, и скрыто из виду при обычной работе. Раздел подкачки - это механизм, который обеспечивает, как и на обычных системах UNIX, продолжение вашей работы, что бы ни случилось. Из-за этой дополнительной памяти в Linux вы практически никогда не увидите раздражающих сообщений типа "Недостаточно памяти, пожалуйста закройте сначала некоторые приложения и попробуйте еще раз". Процедура подкачки или виртуальной памяти давно принята операционными системами уже вне мира UNIX.
Используемая память на жестком диске естественно медленнее, чем при использовании реальных микросхем памяти компьютера, но обеспечивает дополнительный комфорт. Мы узнаем больше о разделе подкачки, когда будем обсуждать процессы в Главе 4, Процессы.
Linux обычно рассчитывает на использование удвоенного количества физической памяти в пространстве подкачки на жестком диске. При установке системы, вы должны решить, как собираетесь это сделать. Например на системе с 512 Мб RAM:
  • 1-й вариант: один раздел подкачки в 1 Гб
  • 2-й вариант: два раздела подкачки по 512 МБ
  • 3-й вариант: с двумя жесткими дисками: по одному разделу в 512 МБ на каждом диске.
Последний вариант даст лучшие результаты, when a lot of I/O is to be expected.
Читайте документации к программному обеспечению для специфичных установок. Некоторые приложения, такие как базы данных, могут требовать большего пространства подкачки. Другие, такие как портативные системы, могут вообще не иметь никакой подкачки из-за нехватки жесткого диска. Пространство для подкачки может также зависеть от версии вашего ядра.
Кроме того во многих дистрибутивах ядро находится на отдельном разделе, поскольку это самый важный файл вашей системы. Если это так, вы увидите, что у вас также есть раздел /boot, содержащий ваше ядро (ядра) и сопутствующие файлы данных.
Остаток жесткого диска(ов) обычно делится на разделы данных, хотя может быть, что все не критичные для системы данные будут находиться на одном разделе, например, при выполнении стандартной установки рабочей станции. Когда некритичные данных разделяется на несколько разделов, то обычно это происходит по следующему принципу:
  • раздел для пользовательских программ (/usr)
  • раздел, содержащий персональные данные пользователей (/home)
  • раздел для хранения временных данных, таких как очереди печати и почты (/var)
  • раздел для дополнительного программного обеспечения (/opt)
После того как разделы сделаны, можно только добавить дополнительные. Изменение размеров или свойств существующих разделов возможно, но не рекомендуется.
Разделение жесткого диска на разделы определяется системным администратором. На больших системах он или она может даже развернуть один раздел на несколько жестких дисков, используя соответствующее ПО. Большинство дистрибутивов при стандартных установках имеют возможность оптимизироваться под рабочие станции (для обычных пользователей), под обычные цели сервера, но также допускают настройку разделов. Во время процесса установки вы можете определить вашу собственную схему разделов, используя либо специфический инструмент вашего дистрибутива, который обычно запускается в начале в графическом интерфейсе, или fdisk, инструмент текстового режима для создания разделов и установки их свойств.
Установка рабочей станции или клиентская установка осуществляется для использования главным образом одним и тем же человеком. Выбранное ПО для установки отражает это и акцент делается на общие пользовательские пакеты, такие как красивые темы рабочего стола, инструменты разработки, клиентские программы для работы с электронной почтой, мультимедийный софт, web и другие службы. Все это объединяется на одном большом разделе, добавляется пространство подкачки в два раза превышает объем оперативной памяти и ваша стандартная рабочая станция готова и обеспечивает наибольший объем дискового пространства для возможности личного пользования, но с недостатком возможной потери целостности данных во время проблемных ситуаций.
На сервере системные данные стремятся отделить от пользовательских данных. Программы различных служб хранятся отдельно от данных, которые они обрабатывают. На таких системах создаются различные разделы:
  • раздел со всеми данными, необходимыми для загрузки машины
  • раздел с конфигурационными данными и серверными программами
  • один или несколько разделов, содержащих серверные данные, такие как таблицы базы данных, почта пользователей, FTP-архив и т.д.
  • раздел с пользовательскими программами и приложениями
  • один или несколько разделов для конкретных пользовательских файлов (домашние каталоги)
  • один или несколько разделов подкачки (виртуальная память)
Службы обычно используют больше памяти и, следовательно, им нужно больше пространства подкачки. Некоторые процессы сервера, такие как связанные с базами данных, могут потребовать больше пространства подкачки, чем обычно; см. специальную документацию для подробной информации. Для повышения производительности swap часто разделяют на несколько разделов.

Точки монтирования

Все разделы подключаются к системе через точки монтирования. Точка монтирования определяет место расположения конкретных данных в файловой системе. Как правило все разделы связаны через раздел root. В этом разделе, который обозначается косой чертой (/), создаются каталоги. Эти пустые каталоги будут начальной точкой разделов, которые подключаются к нему. Например: дан раздел, содержащий следующие каталоги:
videos/		cd-images/	pictures/
Мы хотим подключить этот раздел к файловой системе в каталог /opt/media. Для того, чтобы сделать это, системный администратор должен убедиться, что каталог /opt/media существует в системе. Желательно, это должен быть пустой каталог. Как это делается объясняется далее в этой главе. Затем, используя команду mount, администратор может подключить раздел к системе. Если вы посмотрите на содержимое ранее пустой директории /opt/media, оно будет содержать файлы и каталоги, которые имеются на смонтированном носителе (жестком диске или разделе жесткого диска, CD, DVD, флэш-карте, USB или других устройствах хранения).
Во время запуска системы, именно так монтируются все разделы, которые описаны в файле /etc/fstab. Некоторые разделы не монтируются по умолчанию, если они постоянно не подключены к системе, например устройство хранения, используемое в вашей цифровой камере. Если все правильно настроено, то устройство будет смонтировано, сразу же как система замечает, что оно подсоединено, или оно может быть смонтировано пользователем, тогда вам не нужно быть системным администратором, чтобы подключать и отключать устройства к системе и от нее. Пример есть в Разделе "Использование rsync".
На работающей системе информацию о разделах и их точках монтирования можно получить с помощью команды df (которая показывает используемое пространство диска). В Linux команда df GNU варианта, и поддерживает опцию -h, которая значительно улучшает читаемость. Отметим, что на коммерческих системах UNIX есть свои собственные версии df и многих других команд. Обычно у них такое же поведение, хотя версии обычных инструментов от GNU, часто имеют больше функций и они лучше.
Команда df отображает только информацию об активных разделах (исключая раздел подкачки). Они могут включать разделы других доступных по сети систем, как в примере, приведенном ниже, где домашние каталоги монтируются с файлового сервера по сети, такая ситуация часто встречается в корпоративных средах.
freddy:~> df -h
Filesystem          Size  Used Avail Use% Mounted on
/dev/hda8           496M  183M  288M  39% /
/dev/hda1           124M  8.4M  109M   8% /boot
/dev/hda5            19G   15G  2.7G  85% /opt
/dev/hda6           7.0G  5.4G  1.2G  81% /usr
/dev/hda7           3.7G  2.7G  867M  77% /var
fs1:/home           8.9G  3.7G  4.7G  44% /.automount/fs1/root/home

Подробнее о схеме файловой системы

Обзор

Для удобства файловая система Linux обычно представляется в виде древовидной структуры. В стандартной системе Linux вы обнаружите подобный перечень и расположение, как на схеме приведенной ниже.
Рисунок 3.1. Схема файловой системы Linux
Структура каталогов ОС Linux
Это схема из системы RedHat. В зависимости от системного администратора, операционной системы и назначения UNIX-машины, структура может меняться, и каталоги по желанию могут быть опущены или добавлены. Даже не обязательно соответствие имен, они лишь соглашение.
Дерево файловой системы начинается со слэша, обозначаемого наклоненной вперед косой чертой (/). Это каталог, содержащий все основные каталоги и файлы, также называется корневой директорией или "корнем" файловой системы.
Каталогам, которые ниже корневого каталога лишь на один уровень, зачастую предшествует слэш, для указания их положения и предотвращения путаницы с другими каталогами, которые могут иметь такое же имя. Знакомясь с новой системой, всегда хорошая идея - заглянуть в корневую директорию. Давайте посмотрим, с чем вы можете там столкнуться:
emmy:~> cd /
emmy:/> ls
bin/   dev/  home/    lib/         misc/  opt/     root/  tmp/  var/
boot/  etc/  initrd/  lost+found/  mnt/   proc/    sbin/  usr/
Таблица 3.2. Подкаталоги корневого каталога
Директория Содержимое
/bin Общие программы для совместного использования системой, системным администратором и пользователями.
/boot Загрузочные файлы и ядро, vmlinuz. В некоторых последних дистрибутивах также данные grub. Grub – это большой единый загрузчик, который представляет собой попытку избавиться от многих различных загрузчиков известных нам на сегодняшний день.
/dev Содержит ссылки на все периферийные устройства, которые представлены файлами с особыми свойствами.
/etc Большинство важных системных файлов конфигурации находятся в /etc, этот каталог содержит данные, аналогичные тем что в Панели Управления Windows
/home Домашние каталоги обычных пользователей.
/initrd (в некоторых дистрибутивах) Информация для загрузки. Не удаляйте!
/lib Файлы библиотек, включает файлы для всех разновидностей программ, необходимых системе и пользователям.
/lost+found Каждый раздел имеет lost+found в его верхней директории. Здесь находятся файлы, которые были спасены во время сбоев.
/misc Для разных целей.
/mnt Стандартные точки монтирования для внешних файловых систем, например, CD-ROM'а или цифровой камеры.
/net Стандартные точки монтирования для удаленных файловых систем
/opt Как правило, содержит дополнительное ПО и ПО третьих сторон.
/proc Виртуальная файловая система, содержащая информацию о системных ресурсах. Более подробная информация о назначении файлов в proc можно получить, введя команду man proc в окне терминала. Файл proc.txt рассматривает виртуальную файловую систему в деталях.
/root Домашняя директория администратора. Помните о разнице между / (корневым каталогом) и /root (домашним каталогом пользователя root).
/sbin Программы для использования системой и системным администратором.
/tmp Временное место для использования системой, которое очищается после перезагрузки, так что не используйте ее под сохранение какой-нибудь работы!
/usr Программы, библиотеки, документация и т.д. для всех пользовательских программ.
/var Место хранения всех изменяемых и временных файлов, созданных пользователями, такие как log-файлы, почтовые очереди, the print spooler area, место для временного хранения файлов, загружаемых из Интернета, или сохранения образа CD перед записью.
Как вы можете узнать на каком разделе находится какой-нибудь каталог? Использование команды df с точкой (.) в качестве опции показывает раздел, которому принадлежит текущий каталог, и уведомляет о количестве используемого дискового пространства на этом разделе:
sandra:/lib> df -h .
Filesystem            Size  Used Avail Use% Mounted on
/dev/hda7             980M  163M  767M  18% /
Как правило, каждый каталог в корневом каталоге находится на корневом разделе, за исключением когда он имеет отдельный вход в полным листинге команды df (или df -h без каких-либо других опций).
Узнайте больше в man hier.

Файловая система в реальности

Для большинства пользователей, и для большинства обычных задач системного администрирования, приемлемо допускать, что файлы и каталоги организованы в древовидную структуру. Однако компьютер ничего не понимает о деревьях или древовидных структурах.
Каждый раздел имеет свою собственную файловую систему. Представляя все эти файловые системы вместе, мы можем говорить о древовидной структуре всей системы, но все не так просто. В файловой системе, файл представлен с помощью inode (индексного дескриптора), своего рода серийного номера, содержащего информацию о данных этого файла: кому принадлежит этот файл, и где он находится на жестком диске.
Каждый раздел имеет свой собственный набор индексных дескрипторов; на всей системе с несколькими разделами могут существовать файлы с одним и тем же номером индексного дескриптора.
Каждый inode описывает структуру данных на жестком диске, хранит информацию о свойствах файла, в том числе физическое местоположение его данных. Когда жесткий диск назначается для хранения данных (обычно во время начала процесса установки системы или при добавлении дополнительных дисков к существующей) в разделе создается определенное количество индексных дескрипторов. Этот число будет максимальным количеством файлов всех типов (в том числе каталогов, специальных файлов, ссылок и т.д.), которые могут существовать в одно и то же время на данном разделе. Как правило, мы рассчитываем на 1 inode от 2 до 8 килобайт памяти.
Во время создания нового файла, он получает свободный inode. В этом индексном дескрипторе содержится следующая информация:
  • Владельца и группа-владелец файла.
  • Тип файла (обычный, каталог, ...)
  • Разрешения на файл (Раздел "Права доступа: первая линия обороны Linux")
  • Дата и время создания, последнего открытия и изменения.
  • Дата и время, когда эта информация была изменена в индексном дескрипторе.
  • Количество ссылок на этот файл (см. далее в этой главе).
  • Размер файла
  • Адрес, определяющий фактическое расположение данных файла.
Время создания и время изменения.
В man-страницах вы натолкнетесь на atime (время доступа), ctime (время изменения свойств файла) и mtime (время изменения данных (содержания) файла). Вы не всегда можете узнать время создания файла. Если вы измените права доступа на файл, ctime изменится также и больше не будет отражать реального времени создания.
Единственная информация, не включенная в индексный дескриптор, это имя файла и каталога. Они хранятся в каталогах, этих особенных файлах. Сопоставляя имена файлов и номера inode, система может составлять древовидную структуру, которая понятна пользователю. Пользователи могут отображать номера inode, используя опцию -i команды ls. Индексные дескрипторы имеют свои собственные отдельные места на диске.