Журнал LinuxFormat - перейти на главную

LXF95:Тур по файловой системе Linux

Материал из Linuxformat
(Различия между версиями)
Перейти к: навигация, поиск
(викификация, оформление)
 
(Виртуальная часть экскурсии)
 
Строка 88: Строка 88:
 
загрузилось ядро. Файл ''cpuinfo'' покажет, что знает ядро о центральном процессоре (или процессорах), на котором оно запущено. Файл ''meminfo'' расскажет нам о системе виртуальной памяти столько, сколько нам и знать-то не надо. И так далее.
 
загрузилось ядро. Файл ''cpuinfo'' покажет, что знает ядро о центральном процессоре (или процессорах), на котором оно запущено. Файл ''meminfo'' расскажет нам о системе виртуальной памяти столько, сколько нам и знать-то не надо. И так далее.
  
Пардон, мадам, не сядете ли вы на место? Хал собирается выполнить крутой разворот, чтобы показать вам кол                        лекцию каталогов с именами типа  '''3412'''. Эти имена соответствуют ID процессов, а их каталоги содержат еще больше виртуальных файлов, которые обеспечивают доступ к информации о каждом процессе. Вообще-то по ним имеется документация (для справки наберите ''man 5 proc'), но большая часть информации столь низкого уровня, что будет малопонятна среднему туристу. В большинстве случаев лучше использовать программы типа ''top'' и ''ps'', которые покажут вам информацию о процессах в более удобной форме.
+
Пардон, мадам, не сядете ли вы на место? Хал собирается выполнить крутой разворот, чтобы показать вам кол                        лекцию каталогов с именами типа  '''3412'''. Эти имена соответствуют ID процессов, а их каталоги содержат еще больше виртуальных файлов, которые обеспечивают доступ к информации о каждом процессе. Вообще-то по ним имеется документация (для справки наберите ''man 5 proc''), но большая часть информации столь низкого уровня, что будет малопонятна среднему туристу. В большинстве случаев лучше использовать программы типа ''top'' и ''ps'', которые покажут вам информацию о процессах в более удобной форме.
  
 
По большей части, мы воспринимаем '''/proc''' как файловую систему
 
По большей части, мы воспринимаем '''/proc''' как файловую систему

Текущая версия на 11:47, 16 декабря 2008

Содержание

[править] Большое Linux-турне по файловой системе

Заблудились в файловой системе Linux? Отчаялись понять, в чем тут смысл? Д-р Крис Браун прописывает вам путешествие по файловой системе.

«Привет! Добро пожаловать в путешествие по файловой системе Linux. Меня зовут Ман Страницын, и на сегодня я ваш гид. Я и мой водитель автобуса, Хал Д., рады видеть вас на борту. Пара предупреждений, прежде чем мы отправимся: пожалуйста, ни в коем случае не высовывайте руки из автобуса и не удаляйте ничего, что бы ни встретилось на пути, не будучи полностью уверены в том, что делаете. Итак, отправляемся.

Рис. 1

Основные пункты экскурсии по файловой системе

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

Слева по ходу вы заметите каталог с именем /root. Не перепутайте: это не корневой каталог, а просто каталог с именем root [root – англ. корень, прим. пер.]. Вообще-то, это частная территория системного администратора, она же – домашний каталог суперпользователя. Мой дядя, системный администратор ОС Solaris, вечно ноет, что у него нет собственного домашнего каталога: его домашний каталог /, и он его ненавидит. А вам понравилось бы развешивать белье на главной городской площади? Можем мы осмотреть /root, Хал? Ой, похоже, что нет – полковник Линукс говорит «нет». Что ж, за спрос денег не берут, но /root – один из немногих каталогов, просмотр которых обычным пользователям запрещен. Вообще говоря, политика доступа в Linux – «смотри, но не лапай». Единственное исключение – домашние каталоги пользователей: там они могут вытворять все, что угодно.

Кстати, о полковнике Линуксе – наша следующая остановка называется /boot, место, где он живет, так что приготовьте фотоаппараты или кнопки Print Screen. Здесь находится файл с именем, похожим на vmlinuz-2.6.19, это (сжатый) образ ядра Linux. При загрузке Linux, загрузчик (обычно Grub) помещает этот файл в память и запускает его. Вы также можете заметить файл с именем типа initrd-2.6.19.img, являющийся образом стартового RAM-диска. Он содержит модули ядра, необходимые во время загрузки, до того, как будет получен доступ к самой файловой системе. Не удаляйте эти файлы, ребята, не то вы не сможете загрузиться, а я стану безработным.

А, ребята на задней площадке заметили каталог с именем lost+found. Молодцы! Вы увидите этот каталог на верхнем уровне любого раздела, содержащего файловую систему ext2 или ext3. Зачем он? Вы, небось, подумали, что это место встречи для отбившихся от BSD, ха-ха, но он нужен программе под названием fsck, проверяющей целостность файловой системы. Если fsck находит целый на вид файл, не имеющий имени, то создает запись для него в lost+found. Если честно, теперь это случается крайне редко, так что, скорее всего, lost+found просто пуст. Можете без проблем оставить его в покое.

[править] Город настроек

Ну вот, справа от вас вы можете видеть каталог, названный etc. Полагают, что исторически это имя произошло от ‘et cetera’ (в переводе, «и прочее»): туда помещалось все, что нигде больше не удалось пристроить. Мы закидывали в него что попало, но теперь он стал пристанищем большого числа конфигурационных файлов системы и скриптов. Некоторые из этих файлов критичны; например, /etc/passwd содержит информацию обо всех локальных учетных записях (включая root). Вы также можете заметить здесь /etc/inittab, который сообщает init, что делать (init – очень важная программа: при загрузке Linux только она одна автоматически выполняется ядром и отвечает за запуск всех остальных служб, включая службы входа).

Не менее важен и /etc/fstab, говорящий о том, какие еще файловые системы должны быть смонтированы. Вам лучше не шутить с ними, если вы не знаете что делаете; ошибки в этих файлах могут привести к невозможности загрузки или входа в систему. В /etc вы найдете файлы конфигурации для различных служб сети – это /etc/xinetd.conf, содержащий настройки xinetd, и /etc/syslog.conf, настраивающий syslog. Все эти файлы, кстати, хранятся в обычном текстовом формате, и именно поэтому единственный инструмент, необходимый для настройки Linux – это текстовый редактор. Мой любимый редактор Vi, но Хал говорит, что я и вообще по жизни чудик.

Поскольку /etc справа мы осмотрели, то посмотрим на /home слева. Это наш жилой район. Внутри него находятся дома-каталоги отдельных пользователей. Например, домашний каталог Хала – /home/hal (правда, Хал?). Население тут весьма умное, но все зависит от соседей. Некоторые валят все в одну директорию, другие организуют для своих файлов многоуровневые каталоги с говорящими именами. По умолчанию, внутри /home даются права просматривать, но не изменять, файлы других пользователей. Естественно, пользователи могут и запретить просмотр своих файлов. У юного Тома есть каталог с именем /home/tom/photos, доступ к которому имеет только он. Том, мы спим и видим узнать, что ты там прячешь...

Каталог /mnt Хал хочет проскочить побыстрее. Боюсь, ребята, что здесь интересного мало – лишь пустые каталоги для временно монтируемых файловых систем. Сразу после /mnt мы перемещаемся в /media, он содержит подкаталоги, используемые как точки монтирования для съемных устройств типа дискет и CD-ROM. Молодежь, кто помнит, что такое дискета? Короче, идея в том, что система горячего подключения на лету автоматически монтирует носители сюда, стоит только их вставить.

Мы исключили осмотр этого места из экскурсии после происшествия в прошлом месяце, когда Хал повел автобус в /media/cdrom просто чтобы доказать, что он пуст. Затем кто-то вставил CD, демон горячего подключения проснулся, и вдруг перед нами появилась иерархия диска с отпускными фотографиями. Это, скажу я вам, был полный шок.

[править] Виртуальная часть экскурсии

Так, каталог, в который мы направляемся, /proc, действительно интересен, потому что на самом деле не существует. Все файлы в нем – игра воображения ядра: они не соответствуют никакой информации, реально расположенной на диске. Полковник Линукс на прошлой неделе объяснил мне, что эти внутренние структуры данных помогают следить за такими вещами, как использование памяти, и хранить информацию о каждом процессе, типа переменных окружения. В старые времена команды вроде ps (отображающая информацию о запущенных процессах) вылавливали свою добычу в образе памяти ядра. Полковника это в восторг не приводило: он говорит, что это смахивало на вскрытие живого пациента. Поэтому он пришел к мысли сделать эту информацию доступной в виде набора файлов. Таким образом, программа может разжиться необходимой информацией, просто открыв и прочитав эти воображаемые файлы – так же, как любой другой файл.


Хал заедет в /proc, и мы там оглядимся. Вы можете вообразить, что с /proc что-то неладно: ведь если выполнить здесь ls -l, то большинство файлов будет иметь нулевой размер; но если просмотреть их содержимое при помощи cat или less, то они не пусты!

Я уже говорил, что так называемые местные файлы показывают нам содержимое внутренних структур данных ядра в виде простого текста. Например, файл cmdline покажет нам параметры, с которыми загрузилось ядро. Файл cpuinfo покажет, что знает ядро о центральном процессоре (или процессорах), на котором оно запущено. Файл meminfo расскажет нам о системе виртуальной памяти столько, сколько нам и знать-то не надо. И так далее.

Пардон, мадам, не сядете ли вы на место? Хал собирается выполнить крутой разворот, чтобы показать вам кол лекцию каталогов с именами типа 3412. Эти имена соответствуют ID процессов, а их каталоги содержат еще больше виртуальных файлов, которые обеспечивают доступ к информации о каждом процессе. Вообще-то по ним имеется документация (для справки наберите man 5 proc), но большая часть информации столь низкого уровня, что будет малопонятна среднему туристу. В большинстве случаев лучше использовать программы типа top и ps, которые покажут вам информацию о процессах в более удобной форме.

По большей части, мы воспринимаем /proc как файловую систему только для чтения, но на самом деле в /proc/sys имеется несколько «файлов», содержащих различные параметры подстройки ядра, которые вы можете изменить, просто вписав их туда. Например, можно уменьшить параметр под названием TCP FIN TIMEOUT с 60 до 50 следующим образом:

# cd /proc/sys/inet/ipv4
# cat tcp_fin_timeout 60
# echo 50 > tcp_fin_timeout
# cat tcp_fin_timeout 50

Ну-ка, поднимите руки те, кто понятия не имеет, что такое TCP FIN TIMEOUT и зачем его менять. Вижу: большинство. Так я и думал. Для 99% из нас лучше всего даже не притрагиваться к нему.

От /proc мы спустимся по улице к /sys. Это еще одна из «виртуальных» файловых систем. Она была добавлена в ядро 2.6, чтобы упростить коду уровня ядра, например, драйверам устройств, обмен данными с программами пространства пользователя. Иерархия /sys позволяет вам увидеть состояние устройств (шины, устройства и так далее), обнаруженных ядром, и если только вы не переписываете, скажем, подсистему горячего подключения, советую полностью ее проигнорировать. Вся документация есть в книге “/proc et /sys”, написанной Оливье Доделем [Olivier Daudel] и опубликованной издательством O’Reilly... по-французски.

[править] Остановка по требованию

Теперь мы собираемся посетить /dev. «Dev» – это сокращение от «devices» [устройства], и здесь живут странные создания. Они ведут себя не как обычные файлы. Если вы выполните здесь ls -l и внимательно посмотрите, то увидите в строке первый символ ‘b’ или ‘c’. ‘b’ – это так называемые блочные устройства, то есть устройства с блочной структурой и произвольным доступом – обычно это разделы жесткого диска. Например, вот этот малютка, /dev/hda1 – первый раздел жесткого диска, он является блочным устройством. В данной системе hda1 – корневой раздел (на вашей машине может быть по-другому, в зависимости от того, как вы устанавливали систему); собственно говоря, все что мы посетили до этого, расположено в разделе, представленном этим малышом, так что он сильно занят. Как только вы нажмете Выключить компьютер, он отправится в ванну – затем какао, и спать.

Слева вы можете видеть большое скопление так называемых tty-устройств (привет, ребята!). Это символьные устройства, представляющие собой символьные терминалы. Например, Linux обычно настроен на поддержку шести виртуальных терминалов. Из вашего графического рабочего стола вы можете перейти к ним при помощи комбинации клавиш от Ctrl+Alt+F1 до Ctrl+Alt+F6 (и вернуться на рабочий стол при помощи Ctrl+Alt+F7). Все шесть виртуальных терминалов являются устройствами, от /dev/tty1 до /dev/tty6.

Двигаемся дальше: прямо по курсу, в этой мрачной пещере, живет очень странный парень по имени /dev/null. Подобравшись поближе, мы сможем увидеть надпись над входом: «Оставь надежду всяк сюда входящий». Мы видели тех, кто входил сюда, но никто не вернулся обратно. Некоторые называют его черной дырой и используют для выбрасывания в него ненужного вывода программ. Э, кажется, мы слишком близко подъехали ко входу, Хал. Не въезжай туда… ты никогда уже... не въезжай туда, Хал! Заворачивай!

Фу, чуть не попали...

[править] Городские задворки

Что ж, после всех этих виртуальностей вы, я уверен, хотите вновь увидеть какие-нибудь реальные файлы, и их много в том месте, которое я называю промзоной, состоящем из двух каталогов /bin и /sbin. Под bin подразумевается «binary» [двоичный]: большинство здешних файлов являются исполняемыми. Почему каталогов два? Ну, смысл в том, что запускаемое обычным пользователем, типа Vi и tar, rm и date, помещается в /bin, а то, что может запустить только суперпользователь-администратор, расположено в /sbin. Можете считать, что «s» в /sbin происходит от ‘system’ – или, возможно, ‘super-user’. Например, ifconfig (установка параметров сетевой карты) и iptables (определение правил брандмауэра) находятся в /sbin, потому что только суперпользователь имеет на них право. В большинстве дистрибутивов Linux /bin включается в пути поиска для обычного пользователя, а /sbin нет. Ясное дело, обычный пользователь может легко получить доступ к этим командам, набрав полный путь типа /sbin/iptables, но нормальной работы у него не выйдет, поскольку большинство из них и пальцем не шевельнут, если вы не супер!

Важный уголок нашей промышленной зоны называется /lib. Вообще-то это целый угол. «Lib» происходит от «library» [библио- тека], и здешние файлы являются совместно используемыми библиотеками, необходимыми системным программам в /bin и /sbin. (Если вы пришли из мира Windows, то знае те их как DLL.) Критически важная библиотека, которая используется практически везде – это стандартная библиотека С, libc.so. Если вы удалите этот файл, то почти все остановится.

Осмотром промзоны экскурсия завершается; предлагаю по-быстрому заглянуть в очень важный каталог /usr. Я должен предупредить вас, что обычно /usr находится на другом разделе, так что вы можете ощутить легкий толчок при пересечении точки монтирования. Хал, сбрось, пожалуйста, газ!

Оглядевшись в /usr, мы увидим каталоги, на вид дублирующие некоторые из корневого раздела: в частности, /usr/bin, /usr/sbin и /usr/lib. И верно, они содержат элементы того же типа, которые мы уже видели в /bin, /sbin и /lib: а именно, /usr/bin содержит пользовательские команды, /usr/sbin содержит команды системного администратора, а /usr/lib – библиотеки. Так почему же эти элементы рассованы по двум различным наборам каталогов? Ответ – в действиях по выделению разделов. Элементы /usr часто расположены на отдельном разделе, который не подключается к файловой системе практически до последних стадий процесса загрузки. Действительно критичные компоненты, используемые на ранних стадиях загрузки, должны располагаться в корневом разделе, а не в /usr.

Распределение элементов таким способом также минимизирует те части файловой системы, которые не должны затрагиваться при однопользовательской загрузке. Элементы из /bin, /sbin и /lib необходимы, а из /usr – нет. Можно также смонтировать /usr в файловую систему в режиме «только для чтения», для большей безопасности, а в сети совместно использовать /usr с одного файл-сервера, по крайней мере для машин с общей аппаратной архитектурой.

Фактически большая часть исполняемых файлов и библиотек размещается в /usr, и, соответственно, малая часть в корневом разделе. Использование дискового пространства системой на машине, на которой я нахожусь в данное время, выглядит так:

$ du -sh /bin /sbin /lib /usr/bin /usr/sbin /usr/lib
 4.9M /bin
 6.3M /sbin
 109M /lib
 92M /usr/bin
 5.7M /usr/sbin
 625M /usr/lib

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

Есть еще несколько каталогов вроде /var, /tmp и /opt, которые мы не посетили, но я должен вернуть вас вовремя, чтоб вы успели ухватить несколько больших загрузок с FTP-зеркала, так что мы возвращаемся в корневой каталог, откуда начали, и завершаем нашу экскурсию. Будьте осторожны, выходя из автобуса. Надеемся, вы проведете несколько минут в нашей сувенирной лавке, где сможете купить брелки для открытых ключей с пластмассовым Туксом и открытки, говорящие «Я выполнил ls -R в /proc и выжил!». До свидания!» LXF

[править] Флора и фауна файловых систем

Имеется семь типов «существ», живущих в файловой системе. Когда вы выводите длинный список каталогов (ls -l), первый символ каждой строки говорит о типе данного элемента. Они показаны в первом столбце таблицы. Мы также выполнили подсчет популяции каждого типа в системе Ubuntu; эти значения приведены во втором столбце. Понятно, что, как выражаются продавцы автомобилей, «расход бензина на километр имеет индивидуальные отличия».

Тип Численность Описание
- 102,314 Обычный файл. Наиболее распространенный тип.
d 14,701 Каталог. Каталог – это контейнер для других элементов. Некоторые называют их папками.
l 15,258 Символьная ссылка. Это крошечные файлы, содержащие имя какого-то другого файла, вроде ярлыков в Windows. Поэтому, если, например, у меня есть символьная ссылка /etc/motd на /var/run/motd, и программа открывает /etc/motd, то ядро говорит: «Ага, это символьная ссылка. Он хотел сказать не /etc/motd, а /var/run/motd», и открывает последний. Символьные ссылки иногда называют «симлинками» (symlinks) или гибкими ссылками.
c 785 Так называемое символьное устройство (иногда также называемое raw-устройством или специальным символьным файлом). Этот элемент служит для именования устройств. Нечто вроде /dev/console соответствует реальному физическому устройству. Другие соответствуют псевдоустройствам; например, /dev/random предоставляет доступ к генератору случайных чисел ядра.
b 65 Блочное устройство. Блочные устройства – это обычно диски: скажем, /dev/hda2 – это второй раздел первого жесткого диска IDE. Вообще говоря, символьные устройства поддерживают чтение и запись последовательного потока байтов, а блочные устройства поддерживают произвольный доступ. Реальное отличие, однако, заключается в том, что ядро предоставляет блочным устройствам буферный слой, чтобы они могли читать и писать целыми блоками. Для символьных устройств этого не делается. Практически все файлы устройств обитают в /dev.
s 34 Сокеты Unix-домена. Они называются «конечными точками связи в файловой системе» и используются почти так же, как TCP- и UDP-сокеты, за исключением того, что они поддерживают лишь межпроцессное взаимодействие для запущенных процессов на той же машине.
p 7 Именованный канал. Они так редки, что их следует занести в красную книгу! Подобно сокетам Unix-доменов, это именованные конечные точки, используемые для межпроцессного взаимодействия.
Персональные инструменты
купить
подписаться
Яндекс.Метрика