Hierarchy
Standard
("стандартная структура файловых систем"). Краткое описание стандартной иерархии каталогов Linux можно получить, выполнив команду man hier. Полный текст и последнюю редакцию стандарта FHS можно прочесть по адресу http://www.pathname.com/fhs/
Содержимое подкаталоговкорневого каталога.
/bin
Название этого каталога происходит от слова "binaries"
("двоичные", "исполняемые"). В этом каталоге находятся исполняемые файлы самых необходимых утилит, которые могут понадобиться системному администратору или другим пользователям.
/boot
"Boot" - загрузка системы. В этом каталоге находятся файлы, необходимые для загрузки ядра - и, обычно, само ядро.
Пользователю практически никогда не требуется непосредственно работать с этими файлами.
109
/dev
В этом
каталоге находятся все имеющиеся в системе
файлы особого типа, предназначенные для обращения к различным системным ресурсам и устройствам. Например,
файлы /dev/ttyN
соответствуют
виртуальным консолям, где
N
- номер
виртуальной консоли. Данные, введенные пользователем на первой
виртуальной консоли, система считывает из
файла /dev/tty1;
в этот же
файл записываются данные, которые нужно вывести пользователю на эту консоль. В специаьных
файлах в действительности не хранятся никакие данные, при их помощи данные
передаются.
/etc
Каталог для системных
конфигурационных файлов. Здесь хранится информация о специфических настройках данной системы: информация о зарегистрированных пользователях, доступных ресурсах, настройках различных программ.
/home
Здесь расположены
каталоги, принадлежащие пользователям системы -
домашние каталоги, отсюда и название "home".
Отделение всех
файлов, создаваемых пользователями, от прочих системных
файлов дает очевидное преимущество: серьезное повреждение системы или необходимость обновления не затронет пользовательских
файлов.
/lib
Название этого
каталога - сокращение от "libraries" (англ.
"библиотеки"). Чтобы не включать эти функции в текст каждой программы, используются стандартные функции библиотек - это значительно экономит место на диске и упрощает написание программ. В этом
каталоге содержатся библиотеки, необходимые для работы наиболее важных системных утилит, размещенных в
/bin и
/sbin
/mnt
Каталог для
монтирования (от англ. "mount") - временного подключения
файловых систем, например, на съемных носителях
(CD-ROM и др.).
/proc
В этом
каталоге все
файлы "виртуальные" - они
располагаются не на диске, а в оперативной памяти. В этих
файлах содержится информация о программах (
процессах), выполняемых в данный момент в системе.
/root
Домашний каталог администратора системы - пользователя root
Смысл размещать его отдельно от
домашних каталогов остальных пользователей состоит в том, что
/home может располагаться на отдельном устройстве, которое не всегда доступно (например, на сетевом диске), а
домашний каталог root должен присутствовать в любой ситуации.
/sbin
Каталог для важнейших системных утилит (название
каталога -
110 сокращение от "system binaries"): в дополнение к утилитам
/bin здесь находятся программы, необходимые для загрузки, резервного копирования, восстановления системы. Полномочия на исполнение этих программ есть только у системного администратора.
/tmp
Этот
каталог предназначен для
временных файлов: в таких
файлах программы хранят необходимые для работы промежуточные данные. После завершения работы программы
временные файлы теряют смысл и должны быть удалены. Обычно
каталог /tmp очищается при каждой загрузке системы.
/usr
Здесь можно найти такие же
подкаталоги bin
, etc
, lib
, sbin
, как и в
корневом каталоге. Однако в
корневой каталог попадают только утилиты,
необходимые для загрузки и восстановления системы в аварийной ситуации -
все остальные программы и данные располагаются в
подкаталогах /usr
. Этот раздел
файловой системы может быть очень большим.
/var
Название этого
каталога - сокращение от "variable" ("переменные" данные). Здесь размещаются те данные, которые создаются в
процессе работы разными программами и предназначены для передачи другим программам и системам (очереди печати, электронной почты и др.) или для сведения системного администратора (системные журналы, содержащие протоколы работы системы). В отличие от каталога
/tmp сюда попадают те данные, которые могут понадобиться после того, как создавшая их программа завершила работу.
Стандарт
FHS регламентирует не только перечисленные каталоги
, но и их подкаталоги
, а иногда даже приводит список конкретных файлов
, которые должны присутствовать в определенных каталогах. Этот стандарт последовательно соблюдается во всех Linux-системах.
Командная оболочка "знает", что исполняемые файлы располагаются в каталогах /bin, /usr/bin и т. д. - именно в этих каталогах она ищет исполняемый файлcat. Благодаря этому каждая вновь установленная в системе программа немедленно оказывается доступна пользователю из командной строки. Для этого не требуется ни перезагружать систему, ни запускать какие-либо процедуры - достаточно просто поместить исполняемый
файл в один из соответствующих каталогов. Рекомендации стандарта по размещению файлов и каталогов основываются на принципе размещения файлов, которые по-разному используются в системе, в разных подкаталогах
. По типу использования файлы можно разделить на следующие группы:
пользовательские/системные файлы Пользовательские файлы - это все файлы, созданные пользователем
111 и не принадлежащие ни одному из компонентов системы.
изменяющиеся/неизменные файлы К неизмененным файлам относятся все статические компоненты программного обеспечения: библиотеки, исполняемые файлы и т. д. - все, что не изменяется само без вмешательства системного администратора.
Изменяющиеся файлы изменяются без вмешательства человека в процессе работы системы: системные журналы, очереди печати и пр. Выделение неизменных файлов в отдельную структуру (например, /usr) позволяет использовать соответствующую часть файловой системы в режиме "только чтение", что уменьшает вероятность случайного повреждения данных и позволяет применять для хранения этой части файловой системыCD-ROM и другие носители, доступные только для чтения.
разделяемые/неразделяемые файлы Это разграничение становится полезным, если речь идет о сети, в которой работает несколько компьютеров. Значительная часть информации при этом может храниться на одном из компьютеров и использоваться всеми остальными по сети (к такой информации относятся, например, многие программы и домашние каталоги пользователей).
Однако часть файловнельзяразделять между системами (например, файлы для начальной загрузки системы).
Полный путь к каталогу формально ничем не отличается от пути к файлу, т. е. по полному путинельзя сказать наверняка, является его последний элемент файломили каталогом. Чтобы отличать путь к каталогу, иногда используют запись с символом "/" в конце пути, например "/home/student/".
1.3 Текущий каталог Каждая выполняемая программа "работает" в строго определенном
каталоге файловой системы. Такой каталог называется
текущим каталогом. Можно представлять, что программа во время работы "находится" именно в этом каталоге, это ее "рабочее место". В зависимости от текущего каталога поведение программы может меняться: зачастую
программа будет по умолчанию работать с файлами, расположенными именно в текущем каталоге - до них она "дотянется" в первую очередь. Текущий каталог есть у любой программы, в том числе и у командной оболочки (shell) пользователя. Поскольку пользователь взаимодействует с системой через командную оболочку, можно говорить о том, что пользователь "находится" в том
каталоге, который в данный момент является текущим каталогом его команднойоболочки.
Все команды, выполняемые пользователем при помощи shell, наследуют
текущий каталог shell, т. е. "работают" в том же
каталоге. По этой причине пользователю важно знать
текущий каталог shell. Для этого
112 служит утилита pwd
:
Команда pwd
(print working directory) возвращает полный путь текущего каталога командной оболочки - естественно, именно той командной оболочки, при помощи которой была выполнена команда pwd
Почти все утилиты по умолчанию читают и создают файлы в
текущем каталоге. Например, утилита cat
(concatenation – конкатенация) - выводит на экран содержимое файла "
text
":
[student@localhost student]$ cat text
В действительности, командная оболочка, прежде чем передавать параметр "
text
" (имя файла) утилите cat
, подставляет значение текущего
каталога - получается полный путь к этому файлу в файловой системе:
"
/home/student/text
". Содержимое данного файла утилита cat выведет на экран.
Относительный путь(relative path) - путь к объекту файловой
системы, не начинающийся в корневом каталоге. Для каждого процесса
Linux определен текущий каталог, с которого система начинает
относительный путь при выполнении файловых операций.
Относительный путь строится точно так же, как и полный - перечислением через "
/
" всех названий каталогов, встретившихся при движении к искомому каталогу или файлу. Между полным и
относительным путем есть только одно существенное различие:
относительный путь начинается от текущего каталога, в то время как
полный путь всегда начинается от корневого каталога. Относительный
путь любого файла или каталога в файловой системе может иметь любую конфигурацию - чтобы добраться до искомого файла, можно двигаться как по направлению к корневому каталогу, так и от него. Linux различает полный и oтносительный пути очень просто: если имя объекта начинается на "
/
" - это полный путь, в любом другом случае - относительный.
Отделить путь к файлу от его имени можно с помощью команд dirname и basename соответственно.
1.4 Домашний каталог
В Linux у каждого пользователя обязательно есть собственный
каталог, который и становится текущим сразу после регистрации в
системе - домашний каталог.
Домашний каталог(home directory) - это каталог, предназначенный для хранения собственных данных пользователя Linux. Как правило, является текущим непосредственно после регистрации пользователя в системе. Полный путь к домашнему каталогу хранится в переменной
окружения
HOME
. Имя домашнего каталога
Поскольку каждый пользователь располагает собственным
113
каталогом и по умолчанию работает в нем, решается задача разделения файлов разных пользователей. Обычно доступ других пользователей к чужому домашнему каталогу ограничен: наиболее типична ситуация, когда пользователи могут читать содержимое файлов друг друга, но не имеют права их изменять или удалять.
1.5 Информация о содержимом каталога – утилита ls
Чтобы иметь возможность ориентироваться в файловой системе, нужно знать, что содержится в каждом каталоге. Просмотреть содержимое любого каталога можно при помощи утилиты ls
(сокращение от англ. "list" - "список"):
Команда ls без параметров выводит список файлов и каталогов, содержащихся в текущем каталоге. Утилита ls принимает один параметр - имя каталога, содержимое которого нужно вывести. Имя может быть задано любым доступным способом: в виде полного или относительного
пути.
Кроме параметра, утилита ls может использовать множество ключей, которые нужны для того, чтобы выводить дополнительную информацию о файлах в каталогеили выводить список файлов выборочно. Чтобы узнать обо всех возможностях ls
, нужно прочесть руководство по этой утилите с помощью команды man ls
Ключ –F используется, чтобы отличать файлы от каталогов. При наличии этого ключа ls в конце имени каждого каталога ставит символ "/", чтобы показать, что в нем может содержаться что-то еще.
Утилита ls по умолчанию не выводит информацию об объектах, чье имя начинается с "
" - в том числе о "
" и "
". Для того чтобы посмотреть полный список содержимого каталога, и используется ключ "
-a
" (all). Как правило, с "
" начинаются имена конфигурационных файлов и
конфигурационных каталогов (вроде
.bashrc
), работа с которыми (т. е.
настройка окружения, "рабочего места") не пересекается с работой над какой-нибудь прикладной задачей.
Родительский каталог (parent directory) - это каталог, в котором содержится данный. Для корневого каталога родительским является он сам.
Ссылки на текущий и на родительский каталог обязательно присутствуют в каждом каталоге в Linux. Даже если каталогпуст, т. е. не содержит ни одного файла или подкаталога, команда "
ls -a
" выведет список из двух имен: "
" и "
". За ссылками на текущий и родительский каталоги могут следовать несколько файлов и каталогов, имена которых начинаются с "
". В них содержатся настройки командной оболочки (файлы, начинающиеся с "
.bash
") и других программ. В домашнем каталоге каждого пользователя Linux всегда присутствует несколько таких файлов.
114
Использование этих файлов позволяет пользователям независимо друг от друга настраивать поведение командной оболочки и других программ - организовывать свое "рабочее место" в системе.
1.6 Перемещение по дереву каталогов – команда cd
Пользователь может работать с файлами не только в своем
домашнем каталоге, но и в других каталогах. В этом случае будет удобно
сменить текущий каталог. Для смены текущего каталога командной оболочки используется команда cd
(от англ. "change directory" - "сменить
каталог"). Команда cd принимает один параметр: имя каталога, в который нужно переместиться - сделать текущим. В качестве имени каталога можно использовать полный или относительный путь. В приглашении
командной строки часто указывается текущий каталог shell - чтобы пользователю легче было ориентироваться, в каком каталоге он "находится" в данный момент.
Командная оболочка умеет достраивать имена файлов и каталогов: пользователю достаточно набрать несколько первых символов имени файла или каталога и нажать
Tab
. Если есть только один вариант завершения имени - оболочка закончит его сама, и пользователю не придется набирать оставшиеся символы. Достраивание - весьма существенное средство экономии усилий и повышения эффективности при работе с командной строкой. Современные командные оболочки умеют достраивать имена файлов и каталогов, а также имена команд.
Достраивание наиболее развито в командном интерпретаторе zsh
Оболочка PowerShell также умеет достраивать имена.
Для перемещения в родительский каталог ("/home") удобно воспользоваться ссылкой "..". Необходимость вернуться в домашний каталог из произвольной точки файловой системы возникает довольно часто, поэтому командная оболочка поддерживает обозначение домашнего каталога при помощи символа "". Поэтому чтобы перейти в домашний каталог из любого другого, достаточно выполнить команду "
cd
". При исполнении команды символ "
" будет заменен командной оболочкой на
полный путь к домашнему каталогу пользователя.
При помощи символа "
" можно ссылаться и на домашние каталоги других пользователей: "
имя пользователя ". Команда cd
, поданная без параметров, эквивалентна команде "
cd
" и делает текущим каталогом домашний каталог пользователя.
1.7 Создание каталогов – утилита mkdir
В домашнем каталоге, как и в любом другом, можно создавать сколько угодно подкаталогов, в них - свои подкаталоги и т. д. Иными
115 словами, пользователю принадлежит фрагмент (поддерево) файловой
системы, корнем которого является его домашний каталог.
Чтобы организовать такое поддерево, потребуется создать каталоги внутри домашнего. Для этого используется утилита mkdir
. Она применяется с одним обязательным параметром: именем создаваемого
каталога. По умолчанию каталог будет создан в текущем каталоге.
1.7.1 Создание нового пустого файла – команда touch
Для создания пустого файла с текущим временем создания служит команда touch имя_нового_файла. Для указания даты создания в формате
ГГГГММДДhhmm используется ключ –t. Например touch –t 0904080000 tst файл создан 8 апреля 2015 г.
1.8 Копирование и перемещение файлов
Для перемещения файлов и каталогов предназначена утилита mv
(от англ. "move" - "перемещать"). У mv два обязательных параметра: первый - перемещаемый файл или каталог, второй - файл или каталог назначения.
Имена файлов и каталогов могут быть заданы в любом допустимом виде: при помощи полного или относительного пути. Кроме того, mv позволяет перемещать не только один файл или каталог, а сразу несколько. За подробностями о допустимых параметрах и ключах следует обратиться к руководству по mv
:
Перемещение файла внутри одной файловой системы в действительности равнозначно его переименованию: данные самого файла при этом остаются на тех же секторах диска, а изменяются
каталоги, в которых произошло перемещение. Перемещение предполагает удаление ссылки на файл из того каталога, откуда он перемещен, и добавление ссылки на этот самый файл в тот каталог, куда он перемещен.
В результате изменяется полное имя файла - полный путь, т. е. положение файла в файловой системе.
Иногда требуется создать копию файла: для большей сохранности данных, для того, чтобы создать модифицированную версию файла и т. п.
В Linux для этого предназначена утилита cp
(от англ. "copy" -
"копировать"). Утилита cp требует использования двух обязательных параметров: первый - копируемый файл или каталог, второй - файл или
каталог назначения. Как обычно, в именах файлов и каталогов можно использовать полные и относительные пути. Существует несколько вариантов комбинации файлов и каталогов в параметрах cp
- о них можно прочесть в руководстве. Нужно иметь в виду, что в Linux утилита cp нередко настроена таким образом, что при попытке скопировать файл поверх уже существующего файла никакого предупреждения не выводится. В этом случае файл будет просто перезаписан, а данные,
116 которые содержались в старой версии файла, безвозвратно потеряны.
Поэтому при использовании cp следует всегда быть внимательным и проверять имена файлов, которые нужно скопировать.
Созданная при помощи cp копия файла связана с оригиналом только в воспоминаниях пользователя, в файловой же системе исходный файл и его копия - две совершенно независимые и ничем не связанные единицы.
Поэтому при наличии нескольких копий одного и того же файла в рамках