Структура и значение директорий в Linux. Файловая система Linux и структура каталогов

Здравствуйте, уважаемые посетители, читатели, други и недруги, постоянные клиенты и прочие личности сайта.

Мы продолжаем цикл статей, посвященных Linux-системам. Сегодня мы поговорим о таких важных (может быть, и не совсем простых) понятиях, как:

  • Файловая система Linux ;
  • Основные каталоги корневой файловой системы;
  • Консольные команды для работы с файлами и каталогами.

Итак, начнем.

Корневая файловая система Linux

Сложно представить операционную систему (даже такую как Linux ) без файловой системы. На ней лежит всесистемный порядок. Файловая система строго следит за организацией, хранением, а также именованием данных. Например, когда программа обращается к файлу, она ничего не знает о том, где расположена информация о данном файле, на каком физическом носителе она записана. Единственное, что знает программа, это имя файла, к которому она обращается, его размер и другие параметры, которыми искомый файл отличается от множества других файлов (дату и время создания файла, имя владельца файла, права и метод доступа к файлу и т.д.). Все эти данные она получает от файловой системы. Именно файловая система устанавливает, где и как будет записан файл на физическом носителе (например, жёстком диске или съемном устройстве). Все собранные в одном месте каталоги (по-другому папки), подкаталоги, а так же файлы и есть данные файловой системы. Причем один из этих каталогов в Linux -системах является самым наиважнейшим, а именно «верхушкой» (по-другому - «корнем») файловой системы - в нём содержатся все остальные каталоги и файлы.

Для того, чтобы Вы понимали, о чем идет речь, я открыл каталоги файловой системы Linux через файловый менеджер Midnight Commander (MC). Верхушку файловой системы (корневой каталог) указал красной стрелкой - и вот именно к ней монтируются все другие файловые системы. Далее мы попытаемся более доступно описать все, что в данный момент Вы видите на рисунке (по тексту мы будем останавливаться на тех или иных понятиях, чтобы было понятно, о чем идет речь, и Вы, поглядев на рисунок, смогли сориентироваться).

Если жёсткий диск разбит на разделы, то на каждом из них возникают отдельные файловые системы с собственным корнем и с собственной структурой каталогов. Любая операционная система поддерживает несколько файловых систем, например, Windows FAT , FAT32 , NTFS и др. Linux не исключение. Однако важно различать файловые системы, которые могут использоваться в качестве корневой файловой системы и файловые системы, которые просто поддерживают операционную систему, но не используются для установки Linux или Windows (к таким можно отнести, например, ISO9660 (эта модель обеспечивает совместимость носителей под разными операционными системами), UDF (а это особенный формат файловой системы, предназначенный для хранения файлов на оптических носителях) и др). Мы не будем рассматривать файловые системы Windows , не будем останавливаться на файловых системах, не использующихся для установки операционных систем, а просто сделаем краткий обзор и познакомимся с некоторыми наиболее известными корневыми файловыми системами Linux .

  • ext - Extended File System (расширенная файловая система) первая файловая система, разработанная специально для операционных систем на ядре Linux .
  • ext2 - Second Extended File System (дословно: «вторая расширенная файловая система») - стандартная, но уже устаревшая файловая система Linux . По скорости и производительности работы она может служить эталоном в тестах производительности файловых систем. Единственный ее минус - она не является журналируемой файловой системой (журналируемая файловая система это система, в которой ведется запись журнала и которая хранит список изменений, что в свою очередь, помогает сохранить целостность файловой системы при сбоях) . Этот недостаток был устранён в следующей файловой системе ext3.
  • ext3 - Third Extended File System (третья версия расширенной файловой системы) усовершенствованная версия файловой системы ext2 с поддержкой ведения журнала, что, несомненно, повышает ее надежность.
  • ext4 - Fourth Extended File System (четвёртая версия расширенной файловой системы) - новейшая файловая система Linux . Начиная с ядра Linux 2.6.28 (вышедшем 25.12.2008 г.) файловая система уже считается стабильной и используется по умолчанию во многих дистрибутивах Linux .
  • Файловая система ext4 рассматривается как переходный шаг на пути к файловой системе следующего поколения Btrfs , которая уже сейчас претендует на звание основной файловой системы Linux в будущем.

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

Еще раз повторимся (повторение - мать учения) :). При установке Linux на выбранном Вами разделе жесткого диска создается корневая файловая система, и для Linux именно она является самой важной. Именно к ней будут монтироваться все остальные файловые системы на других устройствах. Корневая файловая система тоже монтируется, но только не к другой файловой системе, а к «самой Linux », причём точкой монтирования служит корневой каталог. Поэтому при загрузке системы прежде всего монтируется корневая файловая система, а при завершении она размонтируется в последнюю очередь (о самом понятии монтирования и размонтирования мы поговорим в следующих статьях - это отдельная и тоже немаловажная тема) . Корневая файловая система содержит набор стандартных каталогов и утилит, без которых невозможна работа Linux . В Linux корневой каталог обозначается так - “/ ” (слеш). Полные имена (по-другому - пути) всех остальных каталогов получаются из “/ ”, к которому дописываются справа имена последовательно вложенных друг в друга каталогов. Имена каталогов в пути также разделяются символом “/”. Например, запись /home обозначает каталог “home ” в корневом каталоге (“/”) , а /home /Sonikelf - каталог “Sonikelf ” в каталоге “home ”, который, в свою очередь, находится в корневом каталоге. Перечисленные таким образом каталоги, завершающиеся именем файла, и составляют полный путь к файлу .

В Linux , помимо полного пути, есть и относительный путь , который строится точно так же, как и полный - перечислением через слеш (“/”) всех названий каталогов, встретившихся при движении к искомому каталогу или файлу. Между полным и относительным путём есть только одно немаловажное различие: относительный путь начинается от текущего каталога, а полный путь всегда начинается от корневого каталога. Linux различает полный и относительный пути просто: если имя объекта начинается на “/ ” - это полный путь, в любом другом случае - относительный.

Основные каталоги корневой файловой системы
В разных дистрибутивах Linux каталоги тоже могут быть разные: в некоторых будут дополнительные файлы/каталоги конфигурации, а некоторые файлы конфигурации, вполне возможно, будут называться как-то по-другому. Я приведу названия каталогов, которые входят в дистрибутив Fedora . Итак, поехали:

/ - корневой каталог

  • /bin - содержит стандартные утилиты Linux . Или, скажем так, - этот каталог содержит основные исполняемые файлы (в Windows такие файлы имеют расширение.exe) , доступные всем пользователям, а также содержит символьные ссылки на исполняемые файлы. Символьная ссылка это специальный файл в файловой системе, внутри которого есть только одна-две строки с указанием полного пути, который должен быть открыт при попытке обратиться к данной ссылке (файлу).
  • /boot - содержит конфигурационные файлы загрузчика GRUB , образы ядра (по умолчанию хранятся последние три), файлы Initrd. Чтобы было понятно, что это за такие мифические файлы Initrd , немного внесем ясность. Когда начинается начальная загрузка системы, сначала монтируется временный виртуальный диск, который содержит временную корневую файловую систему, с помощью которой, в свою очередь, осуществляется запуск ядра Linux . Файл Initrd - образ этой временной корневой системы, который хранится на загрузочном устройстве.
  • /dev - содержит файлы устройств. В Linux устройством называется оборудование, которое подключается к системе в процессе загрузки ядра или в процессе работы системы. Эти устройства представляют методы для ввода или вывода информации. Например, жесткий диск - устройство для ввода (запись) и вывода (чтение) , мышь - устройство ввода. Каждое движение или нажатие на кнопки мыши отправляет символ на устройство /dev /mouse , клавиатура - тоже устройство ввода. Большинство устройств в Linux представляют из себя файлы в особой файловой системе (исключение составляют сетевые карты) . И вот эти файлы хранятся в каталоге /dev , куда к ним обращается система для выполнения задач, связанных с вводом/выводом.
  • /etc - содержит конфигурационные файлы операционной системы и всех сетевых служб. Данный каталог можно сравнить с реестром Windows , но в Windows общесистемные настройки хранятся в одном большом бинарном файле, а в Linux - в разных конфигурационных файлах, которые можно редактировать обычным текстовым редактором.
  • /home - название каталога говорит само за себя. Здесь содержатся домашние каталоги всех пользователей, которые зарегистрированы в системе. В домашних каталогах пользователей хранятся пользовательские файлы, а также пользовательские настройки различных программ. Как мы уже упоминали в предыдущей статье, и поэтому каждый пользователь имеет свой уникальный и неповторимый каталог для своих личных, персональных файлов. Этот каталог называется Домашним каталогом пользователя и обозначается, как мы уже говорили немного ранее, /home/Имя_Пользователя. Такое разделение пользовательских каталогов и файлов операционной системы упрощает сохранение данных и повышает надежность самой операционной системы.
  • /lib - здесь находятся различные библиотеки и модули ядра. В процессе установки различных программ в Linux (в том числе и драйверов) устанавливаются (о них мы уже говорили) для корректной работы программы. Вот эти зависимости в большинстве случаев и есть библиотеки - набор собранных особым образом файлов, которые подключаются во время установки к устанавливаемой программе.
  • /lost+found - этот каталог нужен для хранения испорченных файлов при проблемах с файловой системой, которые были восстановлены после, например, некорректного размонтирования файловой системы. Это очень ценный каталог, удалить его не получится (он всё равно снова появится).
  • /misc - может содержать все что угодно.
  • /mnt и /media - обычно в этих каталогах содержатся точки монтирования. В современных дистрибутивах Linux этот процесс обычно происходит автоматически. При этом в каталогах /mnt или /media создается подкаталог, имя которого совпадает с именем монтируемого тома.
  • /opt - здесь обычно размещаются установленные программы, имеющие большой дисковый объем, или вспомогательные пакеты, например, у меня в этом каталоге всего две программы - это Adobe Reader и Google Chrome
  • /proc - это не совсем обычный каталог, это каталог псевдофайловой системы procfs, которая используется для предоставления информации о процессах (по-другому это виртуальная файловая система, которая обеспечивает связь с ядром и монтируется в каталогу /proc) . Да-да, в системе Linux присутствует виртуальный файловый объект, именуемый каталогом /proc. Он существует только во время работы системы в оперативной памяти компьютера. Каталог представляет интерес и с точки зрения безопасности. Многие из утилит, выводящие информацию о системе (например, команда ps) , берут свои исходные данные именно из этого каталога.
  • /root - каталог пользователя (кто это такой, мы упоминали в одной из предыдущих статей).
  • /run - это совершенно новый каталог, который появился совсем недавно. И создан он (по задумке разработчиков) для хранения данных, которые были запущены приложениями, требующимися в процессе работы (это могут быть и службы, запускаемые самой системой, и программы, которые Вы запускаете сами).
    Сюда входят:
    • Идентификаторы процессов PID (каждый запущенный в среде Linux процесс имеет свой уникальный идентификатор - по-другому это адрес (в числовом виде) процесса, с которым будут взаимодействовать другие запущенные процессы во время работы);
    • Информация о межпроцессорном взаимодействии (проще говоря, это обмен данными между запущенными процессами) ;
    • Заблокированные файлы (если в процессе работы приложение или не запускается, или работает нестабильно? это может означать, что некоторые файлы этого приложения заблокированы другими процессами и происходит это тогда, когда сразу несколько приложений пытаются использовать один общий ресурс); - ну и другие данные, необходимые во время работы.
  • /sbin - набор утилит для системного администрирования, содержит исполняемые файлы, необходимые для загрузки системы и ее восстановления в различных щекотливых ситуациях. Запускать эти утилиты имеет право только root.
  • /tmp - каталог, в котором хранятся временные файлы. Linux , в отличие от Windows , следит за чистотой и регулярно очищает этот каталог.
  • /usr - содержит пользовательские программы, документацию, исходные коды программ и ядра. По размеру это один из самых больших каталогов файловой системы. В этот каталог устанавливаются практически все программы. И его (этот каталог) с большой натяжкой можно сравнить с каталогом Program Files в Windows .
  • /var - содержит файлы, которые подвергаются наиболее частому изменению. Например, кэши различных программ; файлы блокировки для недопустимости одновременного использования одной программы несколькими пользователями; файлы системных журналов; временные файлы (при выключении компьютера содержимое очищается); информация о различных программах; общая информация о состоянии системы с момента последней загрузки, входа в систему и т.д.; очередь печати, факсов, а также входящие почтовые ящики пользователей и т.д.

Вывод. Файловая система в Linux это неразделимое целое, начинающееся с корневого каталога (так называемой "верхушки"), а внутри каталога могут находиться целые диски или их разделы (с другими файловыми системами), которые можно легко примонтировать (присоединить) и также легко отмонтировать (отсоединить) от единственного, единого, неразделимого, целого дерева. Специально выделил эти слова, чтобы было понятно отличие от файловой системы Windows . Если кто не в курсе, в Windows каждый логический диск это корневой каталог. Например, если есть три логических диска - C, D, F , значит будет три корневых каталога.

Необходимые команды, которые нужно знать для работы с файлами и каталогами

Сейчас, когда в Linux есть неплохой графический интерфейс, консолью пользуются все реже и реже (что лично меня приводит в уныние). В любом случае знание простого базиса, а именно, простых и полезных команд, необходим любому пользователю (например, у Вас произошел сбой X- сервера (грубо говоря, это так называемый графический интерфейс в Linux - это не совсем точное определение, но в данный момент, мы не будет углубляться в дебри терминологии) или Вам понадобилось установить программу из исходного кода, или еще что-то). Без консоли (или терминала) Вам не обойтись. А чтобы эффективно работать в консоли, нужно знать команды Linux. Вообще команд очень много, поэтому охватить их все будет просто нереально (по крайней мере, в рамках данной статьи), поэтому мы ограничимся пока что командами для работы с файлами и каталогами.

Примечание:
Обращаю Ваше внимание, что все имена файлов и названия команд нужно вводить в правильном регистре, т.е. имена в Linux «чувствительны к регистру». Например, команда cd - совсем не то же самое, что команда Cd или CD . То же относится к именам файлов и каталогов.

Команда cd - используется для движения по дереву каталогов. Если Вы введете эту команду без аргументов (т.е. просто напишите cd - смотрите первую строку на рисунке), то попадете в свой домашний каталог, а чтобы попасть в любой другой каталог, необходимо указать путь к нему. По умолчанию Вы всегда изначально находитесь в своем домашнем каталоге (/home). В первой строке указан относительный путь, во второй - полный. Если Вам нужно передвинуться в какой-либо другой каталог, то введите cd , обязательно пробел и тот каталог, куда Вам нужно перейти, например cd /usr . На четвертой строке рисунка в квадратных скобках указано, что мы перешли в каталог usr. Можно сразу указать весь путь, например, cd /usr/games . Вы попадете в каталог games, который находится в каталоге usr, который, в свою очередь, находится в корневом каталоге системы. Чтобы вернуться обратно в свою домашнюю директорию, достаточно указать относительный путь cd ~.

Теперь, когда Вы, немного потренировавшись, уже умеете переходить из каталога в каталог, самое время узнать, как просмотреть содержимое каталога. И в этом нам поможет команда ls . С ее помощью Вы можете вывести на экран список файлов и каталогов текущего каталога. У команды ls много опций. Сама по себе команда ls (без ключа) не покажет все файлы в каталоге. Некоторые файлы являются скрытыми и их можно увидеть, только задав дополнительный ключ (опцию) команде ls . Если набрать ls -a , то нашему взору представится список всех файлов каталога (откроются даже скрытые).

Не обязательно находиться в том каталоге, содержимое которого Вы хотите узнать с помощью команды ls. Например, чтобы увидеть, что имеется в каталоге /etc , находясь при этом в вашем домашнем каталоге, введите:

ls -al /etc

Здесь мы указали два ключа - это показывать скрытые файлы (a) и вывести информацию (l). Обратите внимание, мы можем сразу указывать несколько ключей, чтобы получить всю информацию о каталоге или файле.

Приведу наиболее часто употребляемые ключи команды ls:

-a (all) - выведет список всех файлов каталога, в том числе и скрытые файлы;

-l (long) - выведет информацию о содержимом каталога, включая права доступа (первая графа), владельца (вторая графа), группу (третья графа), размер (четвертая графа), время создания (пятая графа), является ли файл символьной ссылкой на другой файл и на какой именно (шестая графа);

-r (reverse) - выведет список содержимого каталога в обратном порядке;

-S (size) - отсортирует файлы по размеру.

Следующая полезная и нужная команда - pwd . Перемещаясь по различным каталогам, можно оказаться в довольно щекотливой ситуации, когда Вы не знаете или не помните имя текущего каталога - иначе говоря, Вы заблудились в файловой системе:). Ведь по умолчанию в Linux приглашение командной строки отображает только имя текущего каталога, а не полный путь к нему. Вот в этом случае команда pwd окажет вам неоценимую услугу

Посмотрите на первую строку. В квадратных скобках указано, что я нахожусь в каталоге services. А вот где он находится, в каких или какой директории совершенно непонятно. Введя вышеназванную команду, мне открылся полный путь к этому каталогу (вторая строка). С этой командой Вы точно не заблудитесь в файловой системе Linux .

Команда mkdir - создание нового каталога. В домашнем каталоге пользователя - /home , как и в любом другом, можно создавать неограниченное число подкаталогов, в них - свои подкаталоги и т.д. Другими словами, Вам принадлежит "поддерево" файловой системы, корнем которого является домашний каталог пользователя.
Чтобы организовать такое поддерево, потребуется создать каталоги внутри домашнего. Вот для этого и используется утилита mkdir . Она используется с одним обязательным параметром: именем создаваемого каталога. По умолчанию каталог будет создан в текущем каталоге.

Давайте создадим каталог globus (первая строка на рисунке). Введем команду mkdir globus . Чтобы удостовериться, что каталог создан, введем команду ls с ключом -F (для каждого имени каталога добавлять суффикс "/"). Каталог создан.

Следующая . С помощью этой команды можно перемещать файлы и каталоги. У mv два обязательных параметра: первый - должен быть указан перемещаемый файл или каталог, второй - должен быть указан файл или каталог назначения (конечный пункт). Имена файлов и каталогов могут быть заданы в любом допустимом виде: при помощи полного или относительного пути. Кроме того, mv позволяет перемещать не только один файл или каталог, а сразу несколько (перечисление файлов/каталогов осуществляется через пробел).

Давайте немного потренируемся: создайте в домашнем каталоге два каталога - Globus и Dos и создайте файл - dokument . А теперь приступим к практике:

1) Переименуем один файл в другой. Чтобы переименовать, например, файл dokument в dokument.old , введите:

mv dokument dokument.old

2) А теперь переместим один каталог в другой. Чтобы переместить каталог Globus Dos , введите:

mv Globus Dos

Если каталог Dos уже существует (как в нашем случае), mv поместит Globus внутрь Dos . А если каталога Dos Вы не создали, то mv ПЕРЕИМЕНУЕТ (перезапишет) Globus в Dos

3) Чтобы переместить файл или каталог, который не находится в текущем каталоге, укажите в качестве опции его полное имя и путь.

Например, чтобы переместить файл /usr/tmp/dokument в текущий рабочий каталог, введите:

mv /usr/tmp/dokument txt.txt

Файл dokument был изначально в /usr/tmp/ , мы его переместили в домашний каталог переименовав в txt.txt

4) А теперь чтобы переместить файл txt.txt из текущего рабочего каталога в каталог /usr/tmp , наберите:

mv txt.txt /usr/tmp

Файлов в каталоге tmp может быть много, поэтому картинку для удобства разделил и уменьшил. Вторая строка означает, что чтобы удостоверится в перемещении нашего файла, мы должны перейти в этот каталог, что и сделали с помощью команды cd . А с помощью команды ls мы открыли для просмотра каталог tmp и убедились, что перемещение произошло успешно.

Следующая полезная и нужная команда - cp.
Она создает копию файла. Утилита cp тоже требует присутствия двух обязательных параметров: первый - то, что мы хотим скопировать (файл или каталог), второй - куда мы хотим это скопировать (пункт назначения). Например, надо скопировать файл dokument в каталог Globus - введите команду

cp dokument Globus

и в каталоге Globus появится файл dokument (это будет копия файла dokument , который находится в нашем домашнем каталоге)

С помощью команды cp можно копировать не только по одному файлу или каталогу - можно путем перечисления всего того, что Вы хотите скопировать, указать это команде cp . Например, нам надо скопировать два файла dokument и dokument.old в каталог Dos , ничего нет проще - перечислите все файлы или каталоги через пробел:

cp dokument dokument.old Dos

Можно не только копировать, но и удалять файлы и каталоги, и в этом нам помогут команды rm (удаляет файлы)..

.. И rmdir (удаляет каталоги). rmdir согласится удалить каталог только в том случае, если он пуст, т.е. в нём нет никаких файлов и подкаталогов.

Удалить каталог вместе со всем его содержимым можно командой rm с ключом «-r ». Команда rm -r имя каталога(ов) - очень удобный способ потерять в одночасье все файлы: она рекурсивно (этот термин обозначает примерно то же, что у Windows запустить uninstaller ) обходит весь каталог, удаляя всё, что попадётся - файлы, подкаталоги и т.д., а ключ «-f » (force) делает её работу ещё более неотвратимой, так как подавляет запросы вида «удалить защищённый от записи файл», так что rm работает безмолвно и безостановочно. Будьте внимательны при использовании этой команды.

Команда cat - позволяет вывести на экран содержимое любого файла, однако в таком виде эта команда практически не используется. Если файл слишком большой, то его содержимое пролистается на экране, а Вы увидите только последние строки файла. С помощью этой команды можно комбинировать и объединять копии файлов, а также создавать новые файлы. Если набрать просто в командной строке cat и нажать Enter , то можно вводить (и соответственно видеть) текст на экране. Повторное нажатие клавиши Enter удвоит строку и позволит начать следующую. Когда текст набран, следует одновременно нажать клавиши Ctrl и d .

Так происходит потому, что первую строку вводите Вы сами, а вторую копирует команда cat на экран. Если переадресовать (т.е. записать) вывод в файл txt , то никакого удвоения не произойдет, зато в рабочем каталоге появится новый файл с набранным текстом, который спокойно можно просмотреть через эту команду:

cat > txt

Эта команда сможет прочесть и открыть любой файл, не только текстовый, но толку от того, что вы откроете, например, графический файл, не будет никакого. На экран выведется бестолковый набор символов.

Некоторые опции, которые можно использовать с этой командой:

  • -A показывает все невидимые символы;
  • -E показывает символы конца строки;
  • -e показывает непечатаемые символы плюс символ конца строки;
  • -b нумерует непустые строки;
  • -n нумерует все строки.

Давайте попробуем объединить два файла в один с помощью команды cat :
У нас есть два файла - dokument и txt , мы объединим их в один galina , введя команду

cat dokument txt >galina

Вот и все - наши два файла объединены в один с сохранением и первого, и второго файлов в одном общем файле:)

Если файл слишком большой, то для просмотра на экране надо воспользоваться командами more и less .

  • more выводит содержимое файла на экран постранично, размером как раз на целый экран. Для того, чтобы увидеть следующую страницу, надо нажать на клавишу пробела. Выйти из режима просмотра можно с помощью клавиши Q.
  • less содержит все функции и команды управления выводом, имеющиеся в more и дополнительные, например, для перемещения по тексту Вы можете использовать клавиши Стрелка вверх , Стрелка вниз , PgUp , PgDown .
  • Команда locate - выполняет поиск файла. С помощью этой команды Вы можете увидеть все файлы или каталоги, названия которых содержат искомый образец. Например, для поиска файла, содержащего в названии слово dokument.old, введите в командной строке

locate dokument.old

Команда locate нашла все файлы dokument.old . В системе их оказалось три. Можно задать и более расширенный поиск, например, если вместо dokument.old Вы укажите "кусочек" названия, например "doku ". Будут найдены ВСЕ файлы, где встречается это буквосочетание.

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

Еще одна полезная команда - which . Она показывает положение исполняемых файлов. Команда полезна при создании кнопки запуска какого-либо приложения.

Чтобы создать кнопку запуска, Вы должны знать команду запуска приложения, для которого захотите создать кнопку запуска на рабочем столе. На данном рисунке видно, что команда запуска ls - это /usr/bin/ls

Команда clear (а также сочетание клавиш Ctrl+L ) - очищает окно терминала. Это бывает полезным, когда Вы передвигаетесь по каталогам, файлам, поскольку окно терминала заполняется кучей команд или просто какой-нибудь информацией. При этом приглашение командной строки будет смещено вниз – что не всегда удобно. Чтобы не выходить из командной строки и снова заходить в нее, нужно воспользоваться командой clear .

Ну и напоследок хочу отметить еще две полезных и очень нужных команды.

Первая это history . Само название команды говорит само за себя. Это история команд, которую Вы вводили в окне терминала. Для новичков или даже продвинутых пользователей довольно утомительно запоминать, как пишется та или иная команда (я говорю не об однословных командах, а о командах, содержащих в себе 2-3-4 слова, например, system-config-authentication). Эта команда выведет на экран список ранее введенных команд (список этих команд можно ещё посмотреть в файле.bash_history . Он находится в вашей домашней папке пользователя). Просто наберите: !"номер команды в history ", например !847 .

И закончим мы знакомство, пожалуй, с самой важной командой в Linux . Это команда man - сокращенно от "manual " (руководство). Ею можно вызвать страницы документации о предназначении и об использовании команд в системе. Введя man , пробел и название любой команды, Вы увидите страницу документации по выбранной команде, например, введите man clear

Выход из справки - q

Как и любая другая справочная система, система man имеет собственную man -страницу. Введите man man и получите подробнейшую документацию по самой команде man .

Послесловие.

Как-то так. Как и всегда ждем от Вас комментариев, дополнений и всего такого прочего.

На этом мы закончим нашу очередную лекцию:). Будут и следующие, надеюсь, что интересные и захватывающие. Если есть, что дополнить (добавить), милости прошу, добавляйте в своих комментариях.

P.S. За существование данной статьи спасибо члену команды Pantera

Любая операционная система поддерживает несколько файловых систем, например, Windows поддерживает такие известные всем файловые системы, как FAT , FAT32 , NTFS и др. Linux не исключение.

Несмотря на то, что основным назначением файловой системы является упорядочение хранимых ресурсов, программистам не очень хотелось бы “изобретать велосипед” для управления объектами других типов. В Linux объектами файловой системы являются: процессы, устройства, структуры данных ядра и параметры настройки, каналы межзадачного взаимодействия, папки, и, конечно, обычные файлы. Такое устройство файловой системы имеет как преимущества, так и недостатки. К преимуществам относится единый программный интерфейс, легкость доступа из интерпретатора команд. К недостаткам относится реализация файловой системы по методу Франкенштейна.

Файловая система состоит из четырех основных компонентов:

  1. Пространство имен – методы именования объектов и организации в виде единой иерархии
  2. API – набор системных вызовов для перемещения между объектами и управления ими
  3. Методы безопасности – схема защиты, сокрытия и совместного использования объектов
  4. Реализация – программный код, который связывает логические модели с дисковой подсистемой

Файловая система – это единая иерархическая структура, которая начинается с каталога / и разветвляется, охватывая произвольное число каталогов.

Каталог верхнего уровня называется корневым . Это моноиерархическая система отличается от используемой в Windows, где применяется понятие пространства имен, основанное на принципе деления диска на разделы.

Цепочка имен каталогов, через которые необходимо пройти для доступа к заданному файлу, вместе с именем этого файла образуют путь к файлу. Путь может быть абсолютным (например, /temp/foo ) или относительным (например, book4/filesystem ). Последние интерпретируются начиная с текущего каталога. Стоит отметить, что текущий каталог есть у каждого процесса (большинство процессов никогда не изменяют свои рабочие каталоги, и поэтому просто наследуют текущий каталог процесса, который их запустил).

Существует ограничение на длину имени файла – не более 255 символов. В имя нельзя включать символ косой черты и нулевые символы. Также есть ограничение на длину пути, который передается ядру в качестве аргумента системного вызова – 4095 байт.

Монтирование и демонтирование файловой системы

Файловое дерево формируется из отдельных частей, которые носят название файловых систем. Каждая файловая система имеет корневой каталог и список его подкаталогов и файлов. Большинство файловых систем представляет собой разделы жесткого диска или логические тома, но, как было сказано ранее, файловая система может принять облик всего, что подчиняется определенным функциональным признакам – сетевых файловых систем, компонентов ядра, дисков, устройств и т.д.

В большинстве случаев файловые системы присоединяются к файловому дереву с помощью команды mount . Эта команда связывает каталог существующего файлового дерева, называемый точкой монтирования, корневым каталогом новой файловой системы. На время монтирования доступ к прежнему содержимому точки монтирования становится невозможным. Например, команда $ sudo mount /dev/sda4 /users монтирует на устройстве /dev/sda4 файловую систему /users . По окончании монтирования можно с помощью команды ls /users просмотреть содержимое файловой системы. Список смонтированных пользователями файловых систем хранится в файле /etc/fstab . Демонтируются файловые системы с помощью команды umount . Занятую файловую систему демонтировать невозможно.

Организация файловой системы

Корневая файловая система содержит корневой каталог и минимальный набор файлов и подкаталогов. Файл ядра находится в недрах корневой файловой системы, но не имеет стандартного имени или точного местоположения.

Частью корневой файловой системы являются также каталог /etc для критических системных файлов и файлов конфигурации, каталоги /sbin и /bin - для важных ути­лит и иногда каталог /tmp - для временных файлов. Каталог /dev - это обычно ре­альный каталог, который включен в корневую файловую систему, но он (частично или полностью) может перекрываться другими файловыми системами, если ваша система виртуализировала поддержку своих устройств.

Одни системы хранят совместно используемые библиотечные файлы и прочие важ­ные программы (например, препроцессор языка С) в каталоге /lib . Другие переместили эти элементы в каталог /usr/lib , оставив для каталога /lib роль символьной ссылки.

Огромное значение имеют также каталоги /usr и /var . В первом хранится большин­ство стандартных программ и другие полезные компоненты, в частности интерактивная документация и библиотеки. Совсем не обязательно, чтобы каталог /usr был отдельной файловой системой, однако для удобства администрирования его, как правило, монти­руют именно так. Для того чтобы система могла загрузиться в многопользовательском режиме, необходимы оба каталога - /usr и /var . В каталоге /var содержатся буферные каталоги, журнальные файлы, учетная инфор­мация и прочие компоненты, специфичные для каждого компьютера. Поскольку при возникновении проблем журнальные файлы быстро разрастаются, рекомендуется помещать каталог /var в отдельную файловую систему. Домашние каталоги пользователей чаще всего хранятся в отдельной файловой си­стеме, которая обычно монтируется в корневом каталоге. Отдельные файловые системы можно использовать и для хранения больших информационных массивов, например библиотек исходных кодов программ и баз данных.

В таблице приведены стандартные каталоги и их содержимое

Каталог ОС Содержимое
/bin Все Команды операционной системы ядра
/boot LS Ядро и файлы для его загрузки
/dev Все Файлы устройств: дисков, принтеров, псевдотерминалов и т.д.
/etc Все Важные файлы запуска и конфигурации системы
/home Все Стандартные домашние каталоги пользователей
/kernel S Компоненты ядра
/lib Все Библиотеки, совместно используемые библиотеки и компоненты компилятора языка C
/media LS Точки монтирования файловых системы на съемных носителях
/mnt LSA Временные точки монтирования
/opt Все Программные пакеты необязательных приложения (которые пока не находят широкого применения)
/proc LSA Информация о всех выполняющихся процессах
/root LS Домашний каталог суперпользователя (часто просто /)
/sbin Все Команды, необходимые для обеспечения минимальной работоспособности системы
/stand H Автономные утилиты, средства диагностики и форматирования дисков
/tmp Все Временные файлы, которые могут удаляться при перезагрузке
/usr Все Иерархия дополнительных файлов и программ
/usb/bin Все Содержимое
/usr/include Все Файлы заголовков, предназначенные для компиляции C-программ
/usr/lib Все Библиотеки и вспомогательные файлы для стандартных программ
/usr/lib64 L 64-разрядные библиотеки для 64-разрядных дистрибутивов Linux
/usr/local Все Локальные программы (программы, создаваемые или устанавливаемые локальными пользователями)
/usr/sbin Все Менее важные файлы системного администрирования
/usr/share Все Элементы, общие для различных систем
/usr/share/man Все Страницы интерактивной документации
/usr/src LSA Исходные коды нелокальных программных пакетов (не находит широкого применения)
/usr/tmp Все Дополнительный каталог для временных файлов, которые могут сохраняться при перезагрузке
/var Все Системные данные и конфигурационные файлы
/var/adm Все Разное: журнальные файлы, записи об инсталляции системы, административные компоненты
/var/log LSA Системные журнальные файлы
/var/spool Все Буферные каталоги для принтеров, электронной почты и т.д.
/var/tmp Все Каталог для временного хранения файлов

Примечание: L = Linux, S = Solaris, H = HP-UX, A = AIX

Типы файлов

В большинстве реализаций файловых систем определены семь типов файлов:

  • Обычные файлы
  • Каталоги
  • Файлы байт-ориентированных (символьных) устройств
  • Файлы блочно-ориентированных (блочных) устройств
  • Локальные сокеты
  • Именованные каналы (реализующие принцип обслуживания FIFO – первым поступил первым обслужен)
  • Символьные ссылки

Определить тип существующего файла можно с помощью команды ls -ld . Первый символ в строке вывода обозначает тип объекта. Пример:

$ ls -ld /usr/include

где d – означает каталог

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

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

Каталог хранит именованные ссылки и другие файлы. Он создается командой mkdir и удаляется (при условии, что он пуст) командой rmdir . Непустые каталоги можно удалять командой rm -r . Специальные ссылки ‘.’ и ‘..’ обозначают сам каталог и его родительский каталог соответственно. Такие ссылки нельзя удалить. Поскольку корневой каталог находится на вершине иерархии, ссылка ‘..’ эквивалентна ссылке ‘.’

Имя файла в действительности хранится в родительском каталоге, а не в самом файле. На файл можно ссылаться из нескольких каталогов одновременно и даже из нескольких элементов одного и того же каталога, причем у всех ссылок могут быть разные имена. Это создает иллюзию того, что файл одновременно присутствует в разных каталогах. Эти дополнительные жесткие (фиксированные) ссылки можно считать синонимами для исходных файлов, и с точки зрения файловой системы все ссылки на файл эквивалентны. Файловая система подсчитывает количество ссылок на каждый файл и при удалении файла не освобождает блоки данных до тех пор, пока не будет удалена последняя ссылка на него. Ссылки не могут указывать на файл, находящийся в другой файловой системе.

Жесткие ссылки создаются командой ln и удаляются командой rm . Синтаксис ко­манды ln легко запомнить, поскольку она является “зеркальным отражением” команды cp. Команда cp oldfile newfile создает копию файла oldfile с именем newfile, а команда ln newfile oldfile преобразует имя newfile в дополнительную ссылку на файл oldfile.

Файлы устройств позволяют программам получать доступ к аппаратным средства и периферийному оборудованию системы. Ядро включает (или загружает) специальные программы (драйверы), которые во всех деталях “знают”, как взаимодействовать с каж­дым из имеющихся устройств, поэтому само ядро может оставаться относительно аб­страктным и независимым от оборудования.

Драйверы устройств образуют стандартный коммуникационный интерфейс, кото­рый воспринимается пользователем как совокупность обычных файлов. Получив за­прос к файлу символьного или блочного устройства, файловая система передает этот запрос соответствующему драйверу. Важно отличать файлы устройств от драйверов этих устройств. Файлы сами по себе не являются драйверами.

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

Файлы устройств характеризуются двумя номерами: старшим и младшим. Старший номер устройства позволяет ядру определить, к какому драйверу относится файл, а младший номер, как правило, идентифицирует конкретное физическое устройство. На­пример, старший номер устройства 4 в Linux соответствует драйверу последовательного порта. Таким образом, первый последовательный порт (/ dev/tty0) будет иметь стар­ший номер 4 и младший номер 0.

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

В далеком прошлом /dev играл роль общего каталога, а файлы устройств, которые в нем хранились, создавались с помощью команды mknod и удалялись командой rm . Стандартизировать работу по созданию файлов устройств помогал сценарий с именем MAKEDEV

К сожалению, эта “сырая” система плохо справлялась с безбрежным морем драйве­ров и типов устройств, которые появились в последние десятилетия. Кроме того, она способствовала возникновению разного рода потенциальных конфигурационных несты­ковок: например, файлы устройств ссылались на несуществующие устройства, устрой­ства оказывались недоступными, поскольку они не имели файлов устройств, и т.д.

В наши дни в большинстве систем реализована некоторая форма автоматического управления файлами устройств, которая позволяет системе играть более активную роль в конфигурировании собственных файлов устройств. Например, в Solaris каталоги /dev и /devices полностью виртуализированы. В дистрибутивах Linux каталог /dev является стандартным, но управлением файлами внутри него занимается демон udevd. (Демон udevd создает и удаляет файлы устройств в ответ на изменения в оборудовании, о кото­рых сообщает ядро.)

Установленные посредством сокетов соединения позволяют процессам взаимодей­ствовать, не подвергаясь влиянию других процессов. В системе UNIX поддерживается несколько видов сокетов, использование которых, как правило, предполагает наличие сети. Локальные сокеты доступны только на локальном компьютере, и обращение к ним осуществляется через специальные объекты файловой системы, а не через сетевые пор­ты. Иногда такие сокеты называют UNIX-сокетами.

Несмотря на то что другие процессы распознают файлы сокетов как элементы ка­талога, только процессы, между которыми установлено соответствующее соединение, могут осуществлять над файлом сокета операции чтения и записи. В качестве примеров стандартных средств, использующих локальные сокеты, можно назвать системы X Win­dow и Syslog.

Локальные сокеты создаются с помощью системного вызова socket . Когда с обеих сторон соединение закрыто, сокет можно удалить командой rm или с помощью систем­ного вызова unlink .

Подобно локальным сокетам, именованные каналы обеспечивают взаимодействие двух процессов, выполняемых на одном компьютере. Такие каналы еще называют фай­лами FIFO (First In, First Out - “первым поступил, первым обслужен”). Они создаются командой mknod и удаляются командой rm .

Как и в случае локальных сокетов, реальные экземпляры именованных каналов весь­ма немногочисленны и нечасто встречаются. Они редко требуют административного вмешательства.

Именованные каналы и локальные сокеты имеют практически одинаковое назначе­ние, а их обоюдное существование сложилось исторически. Если бы системы UNIX и Linux разрабатывались в наши дни, то об этих средствах взаимодействия вопрос бы не стоял; сейчас их заменили бы сетевые сокеты.

Работа с файлами в Linux

Прежде всего рассмотрим основные команды для работы с файлами и папками. Для создания файла используется команда touch , для создания директории команда mkdir .

user@ubuntu$ touch [имя файла] – создание файла

user@ubuntu$ mkdir [имя директории] – создание директории

Удаление файлов производится с помощью команды rm. Для директорий используется та же команда, только с ключом -r (рекурсивный).

user@ubuntu$ rm [имя файла] – удаление файла

user@ubuntu$ rm -r [имя директории] – удаление директории

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

user@ubuntu$ pwd – текущая директория

user@ubuntu$ ls -l [путь директории] – содержимое директории

user@ubuntu$ cd [путь директории] – перейти к директории

Операции копирования и перемещения осуществляются командами cp и mv соответственно. В Linux нет специальной команды для переименования файла, вместо этого используется mv.

user@ubuntu$ cp [копируемый файл] [директория] – копирование файла

user@ubuntu$ mv [перемещаемый файл] [директория] – перемещение файла

user@ubuntu$ mv [текущее имя файла] [новое имя файла] – переименовать файл

В этом примере мы создаем директорию test/, переходим в нее командой cd. В этой директории создаем два файла file и file2. Выводим содержимое каталога командой ls -l. Копируем файл file и присваиваем ему имя file3. Переименовываем файл file в new_file командой mv . В конце удаляем все файлы в каталог командой rm *. * – обозначает любое количество символов. Переходим на каталог выше командой cd .. и удаляем каталог /test.

Права доступа в Linux

Права доступа к файлу или каталогу можно задать с помощью команды chmod . Такое право есть лишь у владельца файла и пользователя root. В Linux каждому файлу соответствует набор прав доступа, представленный в виде 8-и битов режима. Они определяют, какие пользователи имеют права читать, редактировать и исполнять файл.

Первым аргументом команды chmod является спецификация прав доступа. Второй и последующий аргументы - это имена файлов, права доступа к которым подлежат измене­нию. При использовании восьмеричной формы записи первая цифра относится к владель­цу, вторая - к группе, а третья - к другим пользователям. Если необходимо задать биты setuid/setgid или дополнительный бит, следует указывать не три, а четыре восьмерич­ные цифры: первая цифра в этом случае будет соответствовать трем специальным битам.

В таблице показано восемь возможных комбинаций для каждого трехбитового набо­ра, где символы r, w и х обозначают право чтения, записи и выполнения соответственно.

Например, команда chmod 711 myprog предоставляет владельцу все права, а осталь­ным пользователям - только право выполнения 9 .

При использовании мнемонического синтаксиса вы объединяете множество испол­нителей (u - пользователь, g - группа или о - другой) с оператором (+ добавить, – удалить и = присвоить) и набором прав доступа. Более подробное описание мне­монического синтаксиса можно найти на man-странице команды chmod, но синтаксис всегда лучше изучать на примерах.

Часто происходит такие ситуации, когда при запуске файла он ругается на недостаток прав. Решить такую проблему можно командой sudo chmod a+x file . Команда означает, что для файла file устанавливаются права на исполнение для всех пользователей.

При наличии опции -R команда chmod будет рекурсивно обновлять права доступа ко всем файлам указанного каталога и его подкаталогов. Здесь удобнее всего придержи­ваться мнемонического синтаксиса, чтобы менялись только те биты, которые заданы явно. Например, команда
chmod -R g+w mydir добавляет групповое право записи к каталогу mydir и его содержимому, не затрагивая остальные права.

___________________________

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

Cтруктура каталогов Linux .

(Чтобы из таблицы переместиться к описанию директории, нужно кликнуть по названию директории. Чтобы вернуть страницу на верх, нужно кликнуть, в правом нижнем углу экрана, по квадратику со стрелочкой.)

Краткое описание.

/ корневой раздел

Корневой раздел.

В данной директории находится основной состав команд "ОС", к ним относятся команды оболочки и файловой системы: ls, cp и пр...

Это, хранилище образов ядер, а также, загрузчиков: Grub или Lilo и пр...

Здесь обитают файлы, относящиеся к определенным устройствам, подключенных к "ОС". Дело в том, что в операционной системе Linux , любое устройство ассоциируется с конкретным файлом, т.е. будь-то принтер, сканер, жесткий диск и пр., все должно иметь свой собственный файл, что бы получить необходимый доступ к тому или иному устройству.

Это, место хранения файлов конфигурации "ОС", например: параметры сети, пользователи, группы и такие приложения, как Apache, Samba и тд. и тп.

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

/home/ username

Это тоже, домашняя папка, но только пользователя "username". Здесь сохраняются конфигурационные файлы настроек приложений и личная "инфа". Если пользователей много, то каждый имеет свой личный каталог для таких файлов. Есть еще папка суперпользователя "root", находящаяся в корне файловой системы. Такое разграничение директорий, от системных файлов, в разы увеличивает надежность и значительно облегчает процесс резервирования данных.

Сюда сбрасываются файлы, не имеющие ссылок из всех других директорий, не смотря на то, что их "inod" не имел метки "незадействованного". К примеру, вы удаляете файл, как в этот момент происходит обрыв электропитания. В следствие этого, в системе образуется потерявшийся "inod", который имеет пути к файлу, но файл-то отсутствует. Далее, в ext2 (нежурналируемая), "fsck" находит "inod", создает ссылку в lost+found, после чего, можно взглянуть на файл и все нормализовать. В ext3 (журналируемая), "fsck" анализирует журнал и определяет незавершенность операции, производя после этого "откат". Таким образом в журналируемых "ФС" затерявшихся inod(ов) имеется намного меньше.

В этом пространстве сосредоточены системные библиотеки, обеспечивающие работоспособность приложений, находящихся в /bin, /sbin и "ОС" глобально.

Предназначена для авто-монтирования устройств: USB, CD-ROM и т.д. При задействовании любого устройства, оно автоматом подключается в соответствующий каталог данной директории.

Эта директория фактически тоже, что и предыдущая /media, с той лишь разницей, что используетcя ручной тип подключения, а именно, когда выполняется команда "mount".

В этой площадке приживаются установленные приложения с большим размером или дополнительными пакетами, к примеру: /opt/libreoffice.org

Сюда примонтирована "procfs", виртуальная "ФС", с наличием множественной информации, которую можно получить. Допустим, нужно узнать какие модули ядра загружены, это будет файл - /proc/modules или же, получить сведения о процессоре - /proc/cpuinfo

Это домашний супер-пользовательский каталог. Данная директория идентична директории просто пользователя и находится в корне файловой системы. Если вдруг возникли проблемы с доступом к /home, то залогинившись с правами суперпользователя,
всегда можно решить данную проблему.

В системе имеются специальные программы для различных настроек и администрирования, им ведь тоже, где-то надо "жить".

Специфические параметры системы, в большинстве случаев пустует.

Эта директория получила применение начиная с ядра v_2.6 и в нее примонтируется "sysfs", с информацией о ядре, устройствах и драйверах.

Здесь находятся директории блочных устр-ств, которые имеются в системе в реальное время.

Перечень шин ядра: eisa, pci и тд. и тп.

Перечень группированных устр-ств по классификации: printer, scsi-devices и тд. и тп.

Это собрат папки "Temp" в Windows, для хранения временных файлов. Чтение и запись, доступны всем пользователям.

Место установленных пакетов программ, документации, кода ядра, X Window. Полностью доступна для "root", остальным запрещено, кроме чтения. К директории можно применить сетевое монтирование и статус общей для ряда компьютеров.

/usr/bin bin2

Местоположение дополнительных приложений для всех учетных записей.

Место обитания "развлекалок", одним словом, игры.

Заголовочные файлы С++.

/usr/lib lib2

Системные библиотеки для приложений в /usr.

В идеале /usr должен иметь статус "общий" и быть смонтирован по сети - /usr/local должен вмещать в себя пакеты приложений на локальном аппарате. Например: /usr - семейный бюджет, /usr/local - личные доходы.

В пакетной Ubuntu, как правило в /usr располагаются "родственные" пакеты, свои, а в /usr/local собранные из исходников, не имеющие отношения к какому-либо дистрибутиву конкретно.

Системные приложения дополнительного плана.

Каждый новый пользователь Linux после установки сталкивается с подобными вопросами: «А что это за папки со странными названиями вроде dev, etc, sys, mnt, opt, bin, var и т.д.? Зачем они мне? Может, их удалить?», «Где тут Мой Компьютер?», «А Мои Документы куда делись?», «Куда установилась моя программа?». Итак, давайте разберемся в каждом вопросе по-порядку. Для начала нужно уяснить, что Linux имеет четкую структуру расположения директорий и файлов, и удалять их, даже если они пустые, совершенно не стоит. Рассмотрим назначение каждой из директорий.

/ - корневой раздел.
/bin - директория для хранения основного набора команд ОС (Операционной Системы).
/boot - директория для хранения данных, необходимых для загрузки ОС, здесь располагаются, например, файлы ядра, загрузчик GRUB или Lilo.
/dev - директория содержит файлы устройств, подключенных к ОС.
/etc - в этой директории располагается основная часть конфигурационных файлов ОС и программ.
/home - директория для хранения личной информации пользователей.
/home/user - домашняя папка пользователя user.
/lost+found - сюда сбрасываются файлы, на которых не было ссылок ни в одной директории, хотя их inod не были помечены как свободные. Например, при удалении файла из директории произошел сбой (аварийное отключение питания), тогда в системе останется потерянный inod, который хоть и указывает на корректный файл, но этот файл не содержится ни в одной из директорий. В ext2 и других нежурналируемых файловых системах задача восстановления таких файлов приходится на fsck. Он находит inod, на которые нет ссылок, и создает на них ссылки в lost+found . После этого пользователь сможет просмотреть файлы и при необходимости переместить их куда ему надо, вернув нужные имена.
/lib - директория для хранения системных библиотек, необходимых для работы программ из директорий /bin и /sbin , а также самой ОС вцелом.
/media - директория, используемая для автоматического или ручного монтирования различных устройств: USB-накопителей, CD-ROM, разделов HDD и т.д. При этом на рабочем столе появляются соответствующие иконки данных устройств.
/mnt - обычно эта директория используется для ручного подключения устройств. В эту директориюкомандой mount монтируются различные устройства: USB-накопители, CD-ROM и т.д. Но в этом случае на рабочий стол соответствующих автоматически иконок не выводится.
/opt - директория для размещения программ, имеющих большой размер или использующих вспомогательные пакеты.
/proc - директория, к которой примонтирована виртуальная файловая система procfs, позволяющая получить доступ к информации о системных процессах из ядра, она необходима для выполнения таких команд как ps, w, top.
/root - домашняя папка Суперпользователя.
/sbin - директория, включающая в себя основные системные программы для администрирования и настройки системы (например, ifconfig).
/srv - директория для хранения специфичных параметров окружения системы. Обычно данная директория пуста.
/sys - директория, к которой примонтирована виртуальная файловая система sysfs, добавляющая в пространство пользователя информацию о присутствующих в системе устройствах и драйверах. В версии ядра ниже 2.6 не использовалась.
/tmp - директория временного хранения файлов. Аналог C:/Windows/Temp в ОС Windows.
/usr - директория для хранения всех установленных пакетов программ, документации, исходного кода ядра и системы X Window. Все пользователи, кроме суперпользователя root, имеют доступ только для чтения. Может быть смонтирована по сети и быть общей для нескольких машин.
/usr/bin - директория расположения дополнительных программ для всех учетных записей.
/usr/include - здесь располагаются заголовочные файлы C++.
/usr/games - директория для размещения доступных игр в системе.
/usr/lib - здесь хранятся системные библиотеки для программ, расположенных в директории /usr .
/usr/local - по стандарту /usr должен быть общим для нескольких компьютеров и смонтирован по сети, а /usr/local должен содержать установленные пакеты программы только на локальной машине. Но чаще всего директория /usr/local используется для установки программ, которые не предназначены для конкретного дистрибутива (например, Ubuntu хранит в /usr «родные» установленные пакеты, а в /usr/local находятся пакеты, собранные из исходников).
/usr/sbin - содержит дополнительные системные программы.
/usr/share - содержит общие данные установленных программ.
/usr/share/icons - содержит все иконки системы.
/usr/share/docs - содержит файлы справки для программ.
/usr/src - расположение исходных кодов (например, ядра).
/var - хранение часто изменяющихся данных. Например, журналов ОС, системных log-файлов, cache-файлов и т.д.
/var/cache - директория для хранения кэшей различных программ.
/var/games - хранение файлов игровых достижений (рекордов).
/var/lib - хранение постоянных данных, изменяемых программами в процессе работы.
/var/lock - здесь располагаются lock-файлы, указывающие на занятость того или иного ресурса.
/var/log - хранение всех log-файлов.
/var/spool - расположение задач, ожидающих обработки (например, очередь печати, непрочитанные письма, задачи cron и т.д.).
/var/www - используется для размещения веб-страниц и администрирования сайтов.

Здесь представлен не совсем полный список вложенных директорий, однако, более чем достаточный для знаний новичка.

Файловая структура Linux очень сильно отличается от таковой в Windows, поэтому, если Вы решили всерьёз заняться изучением UNIX-подобных систем, то начинать, на мой взгляд, лучше именно со структуры каталогов.

История знает десятки случаев, когда неподготовленный пилот удачно приземлял самолёт. Или, например, начинающий врач успешно проводил операцию в полевых условиях. Однако, думаю, вряд ли кто-нибудь добровольно согласился бы встать на их место...

К чему я веду? А к тому, что пользователь Windows, который впервые увидел Linux, конечно, сможет с ним совладать (выйти в Интернет или посмотреть видеозапись), однако, стоит только возникнуть какой-либо внештатной ситуации, и он уже не будет знать, что делать!

Поэтому, чтобы не быть таким незнающим юзером, нужно изучить хотя бы основы и принципы работы операционной системы, с которой Вы планируете работать. И в сегодняшней статье мы рассмотрим структуру каталогов Linux, а также особенности разметки жёсткого диска и монтирования разделов.

Как гласит пословица, внешний вид бывает обманчив. Современные дистрибутивы Linux могут внешне и по основным принципам работы во многом копировать привычную многим среду Windows. Однако, достаточно лишь "копнуть" глубже и мы сразу увидим, что перед нами нечто совсем иное и непонятное:)

Убедиться в этом несложно на примере Linux Mint. Давайте откроем папку "Компьютер" на Рабочем столе и посмотрим на её содержимое:

Как видим, здесь, кроме подключённой флешки, нет ни одного привычного нам раздела жёсткого диска, кроме устройства "Файловая система". Именно здесь (а точнее, в корневом каталоге с названием "/", который иногда ошибочно называют "/root/", хотя это отдельная папка в "/") по умолчанию и хранятся все данные, включая системные и пользовательские файлы! Весьма странно и непонятно на первый взгляд. Давайте разбираться...

Дело в том, что Linux использует кардинально отличающийся от Windows подход к организации и работе с файловой системой. Если в Windows основой являются разделы жёсткого диска, на которых мы можем создавать произвольные папки с файлами, то в Линуксах всё базируется на чёткой иерархии каталогов, не зависящей от разметки винчестера и регламентированной стандартом FHS (сокр. англ. "Filesystem Hierarchy Standard" - "стандарт иерархии файловой системы").

Понятие дисков и их разделов, конечно, существует и в Linux, но здесь первичной является именно структура папок, в одну из которых (как правило, "/media/", "/dev/" или "/mnt/") и монтируются различные типы дисков. Сами же диски обычно именуются в зависимости от типа их подключения: SATA - sda (sdb и т.д. в зависимости от их количества), а IDE - hda (hdb...). Разделы же на дисках просто нумеруются (например, sda1, hdb2).

Отдельные каталоги Linux могут быть вынесены на разные разделы разных дисков и даже на удалённые сетевые хранилища. Единственное условие - все они должны быть примонтированы до загрузки системы. Обычно это делается автоматически при запуске Linux, но иногда может потребоваться произвести и ручную правку параметров.

Думаю, с основными принципами организации хранения информации в Linux мы немного разобрались, поэтому предлагаю ознакомиться конкретно со структурой каталогов.

Основные папки Linux

Несмотря на то, что количество дистрибутивов Linux исчисляется сотнями, все они в большинстве своём имеют схожую структуру каталогов. С одной стороны это обеспечивает некую совместимость со стандартами, а с другой, удобство использования: пользователю, привыкшему к организации файловой системы на одном дистрибутиве Линукса, будет довольно легко перейти при необходимости на использование другого.

В принципе, знать на память назначения всех папок не обязательно, однако, такое знание приветствуется. Поэтому предлагаю в виде таблицы рассмотреть основные каталоги, их назначение и частичное сравнение по нему с компонентами Windows (описываю по наличествующей у меня Linux Mint, поэтому список папок на других системах может немного отличаться).

Каталог Назначение Аналог Windows (если есть)
/ Хранит всю структуру каталогов системы Диск C:
/bin/ Хранит бинарные исполняемые файлы системных утилит C:\Windows\System32
/boot/ Хранит ядро системы и прочие загрузочные файлы C:\Windows
/cdrom/ Хранит точки монтирования для дисководов -
/dev/ Хранит файлы подключённых устройств по типам (жёсткие диски, видеоустройства и т.п.) или псевдоустройств (например, /dev/null и /dev/zero) -
/etc/ Хранит некоторые системные файлы настроек и настройки установленных программ Частично C:\Windows\System32, частично C:\Program Files
/home/ Хранит домашние папки пользователей системы с их настройками и данными C:\Documents and Settings или C:\Users
/lib/ Хранит большинство библиотек стандартных программ и некоторых установленных Частично C:\Windows и C:\Windows\System32
/lost+found/ Хранит файлы, которые обычно в результате каких-либо сбоев остались непрописанными ни в одном из каталогов, но в то же время и не помечены для перезаписи. Пользователь обычно не имеет к ней доступа Частично C:\Recycler (Корзина)
/media/ Хранит точки монтирования для всех съёмных носителей (флешки, дисководы, съёмные жёсткие диски) -
/mnt/ Хранит временные точки монтирования устройств и их файловых систем, которые были добавлены вручную -
/opt/ Хранит дополнительные пакеты различных программ C:\Users\Admin\Application Data
/proc/ Хранит данные о запущенных процессах и работе ядра системы Частично Диспетчер задач
/root/ Хранит данные суперпользователя (root) системы Частично C:\Users\Admin
/run/ Хранит временные файлы, которые выполняются в процессе загрузки системы
/sbin/ Хранит большинство системных программ для администрирования и настройки ОС Частично C:\Windows\System32
/srv/ Хранит файлы, отвечающие за работу серверной части системы и различных протоколов передачи данных по сети (HTTP, FTP и т.п.) Частично C:\Windows\System32
/sys/ Хранит виртуальную файловую систему с данными об установленных устройствах и драйверах Частично Диспетчер устройств
/tmp/ Хранит временные файлы C:/Windows/Temp
/usr/ Хранит данные пользователей системы и файлы установленных вручную программ. Частично C:\Users\
/var/ Хранит файлы с различными изменяющимися данными, логи, кеши и пр. -

Кроме папок в самом корневом каталоге стоит также обратить внимание на некоторые вложенные директории:

Каталог Назначение Аналог Windows (если есть)
/etc/X11/ Хранит файлы настроек системы отображения окон X Window System -
/etc/samba/ Хранит файлы настроек сервера Samba, который служит для связи c сетевыми папками Windows -
/home/username/ Хранит файлы и конфигурацию учётной записи конкретного пользователя (Домашняя папка) C:\Users\Username
/usr/bin/ Хранит ряд программ, которые нужны для работы в многопользовательском режиме -
/usr/share/ Хранит общие данные установленных программ -
/usr/src/ Хранит файлы с исходными кодами ядра системы -
/var/cache/ Хранит кеши программ и скачанные из репозитория пакеты программ -
/var/games/ Хранит сохранения и достижения установленных игр -
/var/log/ Хранит логи (журналы) системы и установленных программ -
/var/mail/ Хранит настройки почтовых ящиков пользователей -
/var/run/ Хранит данные о запущенных процессах и демонах Частично Диспетчер задач
/var/tmp/ Хранит временные файлы, сохраняемые при перезагрузке системы -
/var/www/ Хранит веб-страницы, обрабатывающиеся средствами локального сервера -

Немного о файловых системах

Раз уж мы решили более или менее досконально разобраться со структурой каталогов Linux, то нельзя не упомянуть о такой важной вещи как файловая система.

В Windows мы привыкли пользоваться традиционной NTFS и не морочить себе голову (ну, ещё FAT32 на флешках или UDF на дисках). В мире же Линуксов всё гораздо более разнообразно. Здесь имеется поддержка всех ФС Windows, но рекомендуется использовать специальные системы, оптимизированные под UNIX-подобные ОС.

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

Дабы не перечислять все имеющиеся сегодня файловые системы, думаю, лучше упомянуть лишь о лучших из них, которые являются оптимальным выбором для Linux.

  1. Ext4 - журналируемая файловая система, которая является стандартной для большинства современных дистрибутивов Linux. Она хорошо защищена от проблем фрагментации и оптимизирована для работы с большими файлами. Если Вы при установке не форматировали раздел под систему вручную, то, скорее всего, у Вас стоит именно Ext4.
  2. Ext2 - нежурналируемая файловая система, которая была основной для старых дистрибутивов Linux (до 2000-х). Она имеет ряд ограничений на работу с большими файлами, однако, в то же время, является и самой быстрой ФС, поэтому её часто используют в различных сравнительных тестах как эталонную.
  3. Reiser4 - журналируемая файловая система, которую многие продвинутые пользователи рекомендуют к использованию на Linux. Её преимущество в хорошей стабильности и высокой скорости работы, которую, к тому же, можно ещё более повысить за счёт активации специального плагина для сжатия данных.
  4. btrfs (также B-tree FS) - журналируемая файловая система, разработанная известной компанией Oracle довольно недавно (в 2007 году). К её особенностям относятся хранение индекса файлов в так называемых "B-деревьях" - иерархических структурах, которые максимально оптимально используют ресурсы оперативной памяти за счёт небольшой глубины вложения данных.
  5. SWAP - особый вид нежурналируемой файловой системы, которая реализует структуру хранения данных, аналогичную ячеистой структуре оперативной памяти. За счёт этого используется для реализации файла подкачки в Linux.

В большинстве современных дистрибутивов по умолчанию жёсткий диск форматируется в Ext4, а также SWAP, под который отводится размер, аналогичный размеру установленной оперативной памяти. Так, например, выглядит стандартная разметка диска под Linux Mint, которая производится, если Вы никак не влияете на создание разделов вручную:

Однако, продвинутые пользователи советуют перед установкой заранее размечать диск более "изощрённым" способом для обеспечения лучшей сохранности данных при вынужденной переустановке системы за счёт монтирования на созданные разделы отдельных каталогов. Рассмотрим несколько подобных "рецептов" разбивки диска.

Разметка диска

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

Как раз первым вариантом разметки и является вынос каталога "/home/" на отдельный раздел диска. То есть, фактически нам нужно разбить диск на три раздела:

Если Вы планируете двойную загрузку с установкой Windows, то к рассмотренным выше трём разделам на место sda1 и sda2 лучше поставить два раздела, отформатированных в NTFS: один под Диск C, а второй под Диск D, соответственно.

Более же продвинутые пользователи склонны делать более сложную схему диска с учётом разделения его на отдельные загрузочные области и области выполнения программ:

В принципе, вышеупомянутые каталоги на sda4 некоторые пользователи монтируют на отдельных разделах, а некоторые не выделяют и вовсе. Всё зависит от того, какие задачи Вы планируете решать на своём ПК. Если Вы ещё не решили, как будете использовать отдельные каталоги, то рекомендую оставить "про запас" пару десятков гигабайт места на жёстком диске неразмеченным. Так Вы в любой момент прямо из-под своей системы сможете перемонтировать нужные каталоги на новосозданные разделы.

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

В процессе запуска с LiveCD Вам будет задан ряд вопросов по поводу вариантов загрузки. Везде оставляем всё по умолчанию, кроме экрана с выбором языка. Там нужно будет вписать номер, соответствующий русскоязычному интерфейсу (у меня это был "22"). Во всех остальных вопросах просто жмём Enter и в результате попадём на виртуальный рабочий стол ОС Debian с запущенным GParted:

Если Вы выбрали русский интерфейс, то проблем с работой в программе у Вас не будет даже, если Вы решите переразметить диск с уже установленной системой. Алгоритм действий следующий:

  1. Выделяем существующий раздел, который нужно разделить, и жмём кнопку "Изменить размер или переместить", либо аналогичный пункт в контекстном меню.
  2. В открывшемся окошке при помощи полозков или окошек для ввода чисел задаём новый размер раздела и его отступ от от начала или конца диска (помним, что корень и своп лучше размещать ближе к началу).
  3. Выделяем новосозданную неразмеченную область и нажимаем кнопку "Новый" на панели инструментов или в контекстном меню.
  4. В открывшемся окошке задаём тип файловой системы, метку тома и иные параметры.
  5. Повторяем вышеописанные действия нужное количество раз, после чего применяем все изменения и дожидаемся завершения их выполнения.

Теперь осталось немного. Устанавливаем систему в корневой каталог (если она ещё не была установлена) и загружаем её. Сейчас все каталоги находятся на одном разделе и нам нужно перемонтировать их на другие, специально созданные для этого области диска. Сделать это можно почти полностью в визуальном режиме или при помощи терминала. Чтобы было понятнее рассмотрим процесс переноса на примере каталога /home/ в полувизуальном режиме.

Если Вы решили делать всё в визуальном, то откройте, например, папку /mnt/ или /media/ и в ней создайте временную папку (назовём её /newhome/) для переноса данных. Теперь всё-таки придётся запустить терминал для того чтобы примонтировать новосозданную папку к разделу, на который мы хотим перенести папку /home/. Делается это командой вида:

Естественно, что вместо "ext4" Вы будете указывать свою файловую систему, а вместо "sda5" раздел, на который будете переносить папку. Когда раздел примонтируется и папка окажется на нём, откроем её и скопируем туда всё текущее содержимое каталога /home/. По окончании копирования отмонтируем раздел от папки следующей командой:

$sudo umount /mnt/newhome

Теперь существующую папку /home/ можно либо полностью удалить (а лучше переименовать, например, в /oldhome/) и создать заново, либо просто полностью очистить. Главное, чтобы у нас появился пустой каталог /home/. Теперь примонтируем сюда наш раздел со скопированными данными:

$sudo mount /dev/sda5 /home

Если всё прошло успешно, то в каталоге /home/ появятся все файлы, которые мы скопировали. То есть, фактически перенос завершился успешно. Осталось только закрепить успех и сделать так, чтобы не пришлось каждый раз вручную монтировать наш каталог при загрузке системы. Для этого воспользуемся правкой файла fstab (сокр. от англ. "file systems table" - "таблица файловой системы"), который находится в каталоге /etc/. Откроем его любым текстовым редактором и в самом конце допишем такую строчку:

/dev/sda5 /home ext4 nodev,nosuid 0 2

Этим мы "говорим" системе буквально следующее: на разделе /dev/sda5 находится каталог /home/, отформатированный в системе ext4, в котором нельзя создавать каталог с конфигурацией устройств (/dev/), а также запрещены операции с suid и sgid битами, отключено резервное копирование и монтирование файловой системы происходит во второй проход (в первый всегда монтируется корневая система).

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

$sudo mkdir /mnt/newhome

$sudo mount -t ext4 /dev/sda5 /mnt/newhome

$find . -depth -print0 | sudo cpio --null --sparse -pvd /mnt/newhome/

$sudo umount /mnt/newhome

$sudo mv /home /oldhome

$sudo mkdir /home

$sudo mount /dev/sda5 /home

sudo gedit /etc/fstab

Выводы

Понимание структуры каталогов и применение первых консольных команд даёт начинающему пользователю довольно хорошее представление об устройстве системы и приучает мыслить категориями Linux. На практике нет ничего особо сложного в разметке и монтировании разделов диска, но эти действия существенно повышают стабильность работы ОС, поэтому их рекомендуют делать в первую очередь при установке новой системы.

Потратив немного времени на оптимизацию структуры каталогов Вы сделаете свой Linux более надёжным в плане хранения информации и в будущем убережёте много собственных нервов и сил!

P.S. Разрешается свободно копировать и цитировать данную статью при условии указания открытой активной ссылки на источник и сохранения авторства Руслана Тертышного.