Учебно-методические материалы для студентов кафедры АСОИУ

ЛР №3. Файловая система

Цель работы

Ознакомиться со структурой файловой системы Линукс, типами файлов и командами управления файловой системой.

Методические указания

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

Файловая система ОС Линукс (как и прочих unix-подобных систем) устроена так, что все ресурсы представлены единообразно, в виде файлов. Такой подход позволяет обеспечить универсальный интерфейс доступа к любым ресурсам: от физических устройств, до процессов, выполняющихся в системе. С точки зрения пользователя файловая система представляет логическую структуру каталогов и файлов. С другой стороны, невидимой пользователю, внутреннее устройство файловой системы реализует физические операции чтения/записи файлов на различные носители, алгоритмы доступа и многое другое.

Типы файлов

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

Каталоги Линукс

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

Файловая система имеет иерархическую структуру и начинается от корневого каталога (/). Его подкаталогами являются:

Такая стуктура типична для большинства дистрибутивов Линукс, но могут иметься и дополнительные каталоги. Например, /opt - для дополнительных компонентов, /selinux - расширение системы безопасности и т.п.

Именование файлов и каталогов

Файловая система Линукс поддерживает "длинные" имена, содержащие символы латиницы, национальных алфавитов, знаки пунктуации и спецсимволы. Абсолютно запрещенными к использованию в имени являются прямой и обратный слэши (/ и \). Максимальное количество символов в имени - 255. Понятие "расширения файла" в unix-системах отсутсвует как таковое, поэтому в имени может быть несколько частей, разделенных точками. Все имена - регистрозависимые.

Приведенные выше правила справедливы и для каталогов.

Файлы и каталоги, названия которых начинаются с точки (т.н. dot-файлы), являются аналогами "скрытых" файлов MS-DOS. Т.е. в общем случае они не отображаются при просмотре содержимого файловой системы.

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

[usr1@localhost var]$ cd /home/usr1

и

[usr1@localhost var]$ cd $HOME

приведут к одному результату - переходу в домашний каталог пользователя usr1. Более того, в оболочке определен псевдоним для домашнего каталога - символ ~ (тильда) можно использовать аналогично $HOME. Например:

[usr1@localhost var]$ cd ~
[usr1@localhost ~]$ pwd
/home/usr1
[usr1@localhost var]$

Некоторые другие возможности оболочки будут рассмотрены в следующих лабораторных работах. Дополнительная информация доступна в справочном руководстве bash (man bash).

Команды управления файловой системой

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

Основными командами для выполнения файловых операций являются: pwd, ls, cp, mv, dir, rm, cd, rmdir, mvdir, mkdir, ln. Информацию о их назначении и параметрах доступна в формате man и info.

Несколько слов о способах создания файлов в Линукс:

В первом и втором случаях символ ">" - это команда перенаправления стандартных потоков ввода/вывода, встроенная в оболочку. В первом случае она получает информацию со стандартного потока ввода (клавиатура) и, по окончании ввода (Ctrl+D), отправляет ее в файл. Во втором - принимает строку, переданную командой echo и также отправляет ее в файл. Если файл отсутствует, то он будет создан, если имеется, то будет перезаписан. Для добавления информации в файл следует использовать команду ">>". Больше информации о командах перенаправления можно получить в справке о возможностях оболочки.

Задания к выполнению

  1. Войти в систему с собственной учетной записью
  2. Вывести на экран список файлов текущего каталога в краткой и расширенной форме
  3. Переместиться в каталог /
  4. Сохранить в файле $HOME/filelist.lst список каталогов в каталоге /
  5. Вернуться в домашний каталог и вывести рекурсивный список всех (в т.ч. и скрытых) файлов и каталогов
  6. В домашнем каталоге создать подкаталоги src, dst и temp
  7. В каталоге src создать текстовый файл f1 произвольного содержания  
  8. В каталог src скопировать файлы user.txt, root. txt и stud.txt, созданные в лабораторной работе № 2. Все ли файлы удалось скопировать?
  9. В каталоге dst создать «жесткие» ссылки на все файлы из каталога src
  10. В домашнем каталоге создать «мягкие» ссылки на файлы из каталога src
  11. Вывести рекурсивно расширенную информацию о содержимом домашнего каталога. Обратить внимание на поле размера для физических файлов и ссылок
  12. Из домашнего каталога выполнить команды:
    • cat /src/f1
    • cat /dst/f1
    • cat /f1
  13. Запомнить результаты выполнения
  14. Переместить файл f1 из каталога src в каталог temp и повторить п.12
  15. Удалить файл f1 и повторить п.12
  16. Сравнить результаты выполнения пп 12, 13 и 14
  17. Удалить все файлы, имеющие в названии txt из каталога dst
  18. Удалить каталог dst
  19. Переместить каталог temp в src
  20. Рекурсивно удалить каталог src
  21. Завершить сеанс

Контрольные вопросы

  1. Совпадает ли размер символьных и жестких ссылок?
  2. Какой командой можно удалить непустой каталог?
  3. Пусть в системе имеется каталог $HOME/test. Что произойдет при попытке выполнить следующую команду: cp $HOME/test $HOME/test/newdir?

CC-BY-CA Анатольев А.Г., 11.01.2013