Практическая работа - работа с файлами в Linux

7 мин на чтение (9.463 символов)

Цель работы

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

Основное задание

  1. В домашнем каталоге создать подкаталоги src, dst и temp;
  2. В каталоге temp создать файлы user.txt, root. txt и stud.txt произвольного содержания;
  3. В каталог src скопировать файлы user.txt, root. txt и stud.txt, различного содержания;
  4. В каталоге dst создать «жесткие» ссылки на все файлы из каталога src;
  5. В домашнем каталоге создать «мягкие» ссылки на файлы из каталога src;
  6. Вывести рекурсивно расширенную информацию о содержимом домашнего каталога. Обратить внимание на поле размера для физических файлов и ссылок;
  7. Из домашнего каталога выполнить команды:
1
2
3
cat src/user.txt
cat dst/user.txt
cat user.txt
  1. Заархивируйте содержимое папки src/ в архив .tar.gz.
  2. Распакуйте этот архив в директорию ~/backup
  3. Выведите названия всех файлов домашней директории, имеющих в названии .txt (подсказка: используйте команду find);
  4. Удалите файл user.txt. Что произошло со ссылками на него?
  5. Удалите каталог dst;
  6. Переместите каталог temp в src;
  7. Рекурсивно удалите каталог src

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

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

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

Типы файлов

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

  • обычные (regular) файлы - текстовые, исполняемые, графические и пр. файлы, создаваемые пользователями и прикладными программами;
  • каталоги (directories) - именованные группы файлов и вложенных каталогов (т.е. содержимое каталога - файлы и другие каталоги);
  • файлы устройств (devices) - соответствуют присутствующим в системе реальным (жесткие диски, принтеры, мыши, ЦП и т.д.) устройствам и т. н. псевдоустройствам (например, /dev/null). Файлы устройств представляют символьные (последовательного доступа) и блочные (произвольного доступа) устройства. К первыми относятся, например, параллельные и последовательные порты, ко вторым - жесткие диски;
  • специальные файлы - сокеты (sockets) и именованные каналы (named pipes), которые предназначены для обмена информацией между процессами;
  • символьные ссылки (symlinks) - именованные указатели на физические файлы (аналог ярлыков ОС Windows), содержащие только путь к некоторому файлу. Символьные ссылки могут указывать на файлы, хранящиеся как локальных, так и в сетевых каталогах.
  • Символьные ссылки (или “мягкие”) не нужно путать с “жесткими”, которые указывают на inode файла. Inode (идентификатор узла) - это уникальный числовой идентификатор узла (файла или каталога) файловой системы, по которому и осуществляется доступ к нему. Символьное имя файла (включая полный путь) ориентировано на пользовательское восприятие. Для человека-оператора проще запомнить осмысленные имена файлов (например: report.txt, myfoto.jpg и т.п.), чем абстрактные числовые значения. Прочие отличия “жестких” и “мягких” ссылок вам предстоит выяснить в ходе выполнения этой лабораторной работы.
Каталоги Линукс

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

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

  • /bin - исполняемые файлы общего назначения;
  • /boot - содержит образ загружаемого ядра;
  • /dev - файлы устройств;
  • /etc - конфигурационные файлы общего пользования;
  • /home - домашние каталоги пользователей, включая программы и файлы личных предпочтений;
  • /lib - общесистемные библиотеки;
  • /mnt - каталог монтирования внешних файловых систем;
  • /proc - виртуальная файловая система для чтения информации о процессах;
  • /root - домашний каталог суперпользователя;
  • /sbin - программы системного администрирования;
  • /tmp - каталог для хранения временной информации;
  • /usr - каталог пользовательских прикладных программ со всеми их исполнимыми и конфигурационными файлами. Например, в подкаталог /usr/local инсталлируются программы, не входящие в дистрибутив Линукс, или собираемые из исходных текстов.
  • /var - каталог для хранения часто изменяющихся файлов. Например, спулера печати, различных лог-файлов, почтовых сообщений и т.п.
  • /lost+found - каталог для нарушенных фрагментов файлов, обнаруженных в результате проверки файловой системы после сбоя.

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

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

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

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

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

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

1
$ cd /home/usr1

и

1
$ cd $HOME

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

1
2
3
$ cd ~ 
$ pwd 
/home/usr1 

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

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

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

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

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

  • во-первых, файлы могут быть созданы как результаты работы прикладных программ и иметь определенный формат (например, графические файлы, созданные редактором GIMP);
  • во-вторых, файлы могут быть созданы пользователем путем ввода информации с клавиатуры, например так:
1
2
3
$ cat > f1 
Hello, world! // нажатие Ctrl+D завершает ввод команд 
aag@stilo:~> 
  • в-третьих, файлы могут быть созданы путем перенаправления вывода команды со стандартного потока, например так:
1
# echo "Hello, World!" > f1 

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

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

  1. Чем отличаются жесткие и символические ссылки?
  2. Что произойдет с жесткой ссылкой, если удалить исходный файл? А с символической?
  3. Совпадает ли размер символьных и жестких ссылок?
  4. Пусть в системе имеется каталог “~/test”. Что произойдет при попытке выполнить следующую команду: “cp ~/test ~/test/newdir”?
  5. Какие основные форматы архивов принято использовать в Linux? Какими командами можно пользоваться для создания / открытия этих архивов?

Задания для самостоятельного выполнения

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

Дата изменения: