Навигация в файловой системе #
Работа с файловой системой #
Презентацию можно посмотреть по ссылке.
Видео-запись: Rutube
Рассматриваемые команды #
Команды Bash #
pwd- узнать текущий рабочий каталог.cd- изменить текущий рабочий каталог.
Приложения #
ls- показать содержимое каталога.
Документация #
Относительные и абсолютные пути #
В рамках занятия необходимо научиться работать с относительными и абсолютными путями при работе с файловой системой.
Абсолютный путь является де-факто уникальным идентификатором файла (и каталога) в рамках дерева файловой системы. Его можно использовать для обращения к каталогу или файлу вне зависимости от других факторов. Минусом абсолютного пути является то, что приходится набирать все части пути, он длинный. Ключевая особенность абсолютного пути — он начинается с символа /, корня файловой системы.
Альтернативой абсолютному пути является относительный путь, который строится относительно текущего рабочего каталога. Текущий рабочий каталог у любого приложения, которое запущено в системе, включая командный интерпретатор. Из текущего рабочего каталога и относительного пути формируется абсолютный путь к файлу: Абсолютный путь = текущий рабочий каталог + относительный путь. Относительный путь начинается либо с ./, либо с имени каталога.
Если Вы собираетесь активно взаимодействовать с файловой системой, то наилучший вариант решения данной задачи:
- Изменить текущий рабочий каталог на каталог, который ближе всего находится ко всем файлам, с которыми будете взаимодействовать.
- Формировать относительные пути для файлов, с которыми надо взаимодействовать.
Может быть потребуется открыть несколько командных интерпретаторов для решения задач в каждом из целевых каталогов.
Рекомендации по выполнению задания #
При выполнении задания рекомендуется формировать краткий отчёт. Это позволит вам не только понять принципы работы команд и приложений, но также закрепить их. Предлагается следующий формат:
**Задача**
Перейти в каталог `/usr/share` из любого каталога.
**Решение**
`cd /usr/share`
Для ведения записей рекомендуется использовать формат Markdown, спецификацию которого можно прочитать на сайте commonmark.org. Расширение данных файлов — md или markdown. Большинство редакторов для программистов поддерживают удобную работу с данным форматом файлов.
Задачи на изучение относительных и абсолютных файлов #
Внимание. Перед выполнением каждого основного пункта задачи переходите в каталог /usr/share, используя абсолютный путь.
- Используя абсолютный путь перейдите в каталог
/usr.- Посмотрите содержимое каталога с помощью команды
ls. - Удостоверьтесь, что вы перешли в целевой каталог
/usr: проверьте приглашение и используйте командуpwdдля проверки. - Вернитесь в каталог
/usr/shareиспользуя-в качестве аргумента приложениюcd.
- Посмотрите содержимое каталога с помощью команды
- Используя относительный путь перейдите в каталог
/usr.- Удостоверьтесь, что вы перешли в целевой каталог
/usr: проверьте приглашение и используйте командуpwdдля проверки. - Посмотрите содержимое каталога с помощью команды
ls. Сравните вывод с первой командой. - Сравните данную команду с предыдущей. Какую из них следовало использовать для перехода в каталог
/usr? - Вернитесь в каталог
/usr/shareс помощью относительного пути.
- Удостоверьтесь, что вы перешли в целевой каталог
- Используя абсолютный путь перейдите в каталог
/usr/share/doc/bash.- Удостоверьтесь, что вы перешли в целевой каталог
/usr/share/doc/bash: проверьте приглашение и используйте командуpwdдля проверки. - Посмотрите содержимое каталога с помощью команды
ls. - Вернитесь в каталог
/usr/shareс помощью относительного пути.
- Удостоверьтесь, что вы перешли в целевой каталог
- Используя относительный путь перейдите в каталог
/usr/share/doc/bash.- Удостоверьтесь, что вы перешли в целевой каталог
/usr/share/doc/bash: проверьте приглашение и используйте командуpwdдля проверки. - Посмотрите содержимое каталога с помощью команды
ls. Сравните данный вывод с выводомlsв прошлый раз. - Сравните команды с относительными и абсолютными путями. Какую из них следовало использовать для перехода в данный каталог?
- Вернитесь в каталог
/usr/shareс помощью абсолютного пути.
- Удостоверьтесь, что вы перешли в целевой каталог
- Используя абсолютный путь перейдите в корневой каталог,
/.- Удостоверьтесь, что вы перешли в целевой каталог
/: проверьте приглашение и используйте командуpwdдля проверки. - Посмотрите содержимое каталога с помощью команды
ls. - Вернитесь в каталог
/usr/shareс помощью абсолютного пути.
- Удостоверьтесь, что вы перешли в целевой каталог
- Используя относительный путь перейдите в корневой каталог.
- Удостоверьтесь, что вы перешли в целевой каталог
/: проверьте приглашение и используйте командуpwdдля проверки. - Посмотрите содержимое каталога с помощью команды
ls. Сравните данный вывод с выводомlsв прошлый раз. - Сравните команды с относительными и абсолютными путями. Какую из них следовало использовать для перехода в данный каталог?
- Вернитесь в каталог
/usr/shareс помощью относительного пути. Чем данный путь отличается от абсолютного?
- Удостоверьтесь, что вы перешли в целевой каталог
- Используя абсолютный путь перейдите в каталог
/etc/sysconfig.- Удостоверьтесь, что вы перешли в целевой каталог
/etc/sysconfig: проверьте приглашение и используйте командуpwdдля проверки. - Посмотрите содержимое каталога с помощью команды
ls. - Вернитесь в каталог
/usr/shareс помощью относительного пути.
- Удостоверьтесь, что вы перешли в целевой каталог
- Используя относительный путь перейдите в каталог
/etc/sysconfig.- Удостоверьтесь, что вы перешли в целевой каталог
/: проверьте приглашение и используйте командуpwdдля проверки. - Посмотрите содержимое каталога с помощью команды
ls. Сравните данный вывод с выводомlsв прошлый раз. - Сравните команды с относительными и абсолютными путями. Какую из них следовало использовать для перехода в данный каталог?
- Вернитесь в каталог
/usr/shareс помощью абсолютного пути.
- Удостоверьтесь, что вы перешли в целевой каталог
- Используя специальное сокращение,
~, перейдите в домашний каталог пользователя.- Удостоверьтесь, что вы перешли в целевой каталог: проверьте приглашение и используйте команду
pwdдля проверки. - Посмотрите содержимое каталога с помощью команды
ls. - Вернитесь в каталог
/usr/shareс помощью абсолютного пути.
- Удостоверьтесь, что вы перешли в целевой каталог: проверьте приглашение и используйте команду
- Используя поведение по умолчанию команды
cdперейдите в домашний каталог.- Удостоверьтесь, что вы перешли в целевой каталог: проверьте приглашение и используйте команду
pwdдля проверки. - Посмотрите содержимое каталога с помощью команды
ls. - Вернитесь в каталог
/usr/shareс помощью относительного пути.
- Удостоверьтесь, что вы перешли в целевой каталог: проверьте приглашение и используйте команду
- Используя абсолютный путь перейдите в домашний каталог пользователя.
- Удостоверьтесь, что вы перешли в целевой каталог: проверьте приглашение и используйте команду
pwdдля проверки. - Посмотрите содержимое каталога с помощью команды
ls. - Вернитесь в каталог
/usr/shareс помощью абсолютного пути.
- Удостоверьтесь, что вы перешли в целевой каталог: проверьте приглашение и используйте команду
- Используя относительный путь перейдите в домашний каталог пользователя.
- Удостоверьтесь, что вы перешли в целевой каталог: проверьте приглашение и используйте команду
pwdдля проверки. - Посмотрите содержимое каталога с помощью команды
ls. - Какую из этих четырёх форм возвращения в домашний каталог следует использовать и почему?
- Вернитесь в каталог
/usr/shareс помощью относительного пути.
- Удостоверьтесь, что вы перешли в целевой каталог: проверьте приглашение и используйте команду
Работа с несколькими командными интерпретаторами #
При выполнении сложных действий над файлами или при выполнении нескольких задач одновременно зачастую используется подход с запуском нескольких эмуляторов терминала. Рассмотрим поведение текущего рабочего каталога при работе с несколькими командными интерпретаторами.
- Откройте второй эмулятор терминала, запустив его из меню запуска задач, приложение «Терминал». Одновременно у вас должно быть запущено несколько эмуляторов.
- В первом эмуляторе терминала перейдите в каталог
/tmp/.- С помощью команды
pwdудостоверьтесь, что находитесь в данном каталоге. - Узнайте текущий рабочий каталог во втором эмуляторе терминала.
- Сравните их между собой. Что происходит в первом эмуляторе терминала при изменении рабочего каталога во втором терминале.
- С помощью команды
- В первом эмуляторе терминала откройте новую вкладку. Для этого выберите меню «Файл» -> «Новая вкладка».
- Сравните текущий рабочий каталог в каждой вкладке терминала.
- Измените текущий рабочий каталог в первой вкладке терминала. Что произошло с текущим рабочим каталогом во второй вкладке?
Структура файловой системы GNU/Linux #
Для того, чтобы в ОС от разных производителей могли быть запущены различные приложения в GNU/Linux был сформирован стандарт. Стандарт называется Filesystem Hierarchy Standard, в котором описывается структура файловой системы и местонахождение ряда ключевых файлов для ОС.
Нельзя сказать, что этому стандарту на 100% соответствует файловая система каждого дистрибутива Linux, однако большая его часть соблюдается во всех. Это позволяет пользователям за разумное время переходить с одного дистрибутива на другой. А самое главное: разработчикам можно уверенно создавать свои решения для данной платформы.
Знакомая структура позволяет:
- Разработчикам корректно разместить файлы своего приложения.
- Пользователям находить приложения, документацию.
- Администраторам вносить конфигурацию системы.
Ниже представлен краткое описание ключевых каталогов, которые можно найти в файловой системе Linux дистрибутивов.
- При рассмотрении каждого каталога рекомендуется посмотреть содержимое данного каталога с помощью приложения
ls. Передавайте путь к интересующему каталогу в качестве аргумента для приложенияls. - Для сравнения вывода приложения
lsрекомендуется запускать файловый менеджер с графическим пользовательским интерфейсом.
Корневой каталог ФС #
/ — корневой каталог, содержащий всю файловую иерархию
/binсодержит исполняемые файлы и приложения, необходимые системы для запуска и функционирования./bootсодержит ядро ОС и настройки загрузчика./devсодержит файлы, соответствующие физическим и логическим устройствам компьютера, которые воспринимает ядро ОС./etcсодержит конфигурационные файлы для всех приложений и системных служб, почти все файлы тут являются текстовыми. Тут также могут находится исполняемые файлы, которые производят настройку системы./homeсодержит домашние каталоги для обычных пользователей ОС. В них пользователи хранят свои данные. Обычно самый большой каталог в системе, которая установлена на настольном компьютере./libсодержит файлы разделяемых библиотек, которые используются ключевыми приложениями ОС. В дистрибутивах Linux по возможности устанавливается одна версия библиотеки, которая используется множеством приложений./mediaв современных дистрибутивах используется для автоматического подключения съёмных дисков: флеш-носителей, DVD-дисков. В ALT Linux данные каталоги находятся в/run/./mntв старых дистрибутивах использовалась для ручного подключения носителей, в том числе съёмных./optиспользуется для установки «опционального», дополнительного, ПО. Обычно используется для установки коммерческого ПО./procпредоставляет доступ к виртуальной ФС, предоставляемой самим ядром ОС. Файлы в этой директории позволяют считать или изменить состояние ядра Linux./rootдомашний каталог суперпользователяroot./runкаталог с временными файлами, необходимыми для системных приложений для поддержания своей работы или корректного завершения. Очищается при выключении компьютера./sbinсодержит исполняемые файлы, необходимые для настройки системы, системные приложения. Данные приложения обычно используются системным администратором./srvсодержит данные, специфичные для данного сервера, например файлы пользователей FTP-сервера./sysсодержит информацию об устройствах, драйверах и некоторых функциях ядра./tmpсодержит временные файлы, создаваемые различными приложениями во время своей работы. Зачастую очищается при перезагрузке.
Каталог /usr
#
/usr является наверное самым большим каталогом в обычной установке Linux, так как содержит приложения и файлы, необходимые для их работы
/usr/binсодержит исполняемые файлы, которые устанавливаются средствами самого дистрибутива ОС. Зачастую содержит тысячи файлов./usr/includeсодержит стандартные заголовочные файлы для языка Си./usr/libсодержит разделяемые библиотеки для исполняемых файлов в/usr/binи/usr/sbin./usr/localпредназначен для установки приложений не через стандартные средства установки приложений дистрибутива. По структуре аналогично дереву каталогов/usr./usr/sbinсодержит исполняемые файлы для выполнения различных задач системного администрирования./usr/shareсодержит данные, которые используются приложениями из/usr/bin. Включает в себя иконки, звуковые файлы, настройки по умолчанию./usr/share/docсодержит документацию по установленным приложениям. В ряде дистрибутивов по умолчанию достаточно пуста и требует установки специальных пакетов с документацией.
Каталог /var
#
/var в отличие от большинства предыдущих каталогов предназначен для хранения изменяемых данных. Примерами таких данных являются: содержимое баз данных, журналы работы приложений и так далее. Данный каталог наряду с каталогом /srv может быть самым большим для сервера, на котором запущены службы СУБД и так далее.
/var/cacheсодержит кэш для работы различных приложений./var/libсодержит собственно данные, обрабатываемые различными приложениями: базами данных, пакетными менеджерами и т.д./var/lockсодержит lock-файлы, которые нужны для отображения занятых ресурсов./var/mailсодержит данные почтового сервера./var/optдополнительные данные, управляемые приложениями из каталога/opt./var/spoolсодержит задачи для дальнейшей обработки, например задачи для печати документов./var/tmpсодержит временные файлы, которые должны сохраниться после перезагрузки.
Сравнение с известными структурами файловых систем #
Для каждого каталога, который находится в корне файловой системы GNU/Linux приведите соответствующие примеры из файловой системы знакомой Вам операционной системы.
Компиляция приложений на языке Си #
Для выполнения компиляции приложения необходимо иметь установленный компилятор языка. Основным компилятором в GNU/Linux является компилятор GCC, Gnu C Compiler.
Для установки компилятора в дистрибутиве ALT Linux выполните следующие команды с правами суперпользователя:
apt-get update
apt-get install gccПосле установки компилятора можно выполнить компиляцию простого приложения состоящего из одного файла app.c следующим образом:
gcc -o test_app app.cРассмотрим следующее простое приложение:
#include <stdio.h>
int main(int argc, char* argv[]) {
printf("Привет, мир!\n");
}Затем получившийся исполняемый файл можно запустить, указав на месте команды полный путь к исполняемому файлу. Или относительный путь, начинающийся с точки. Рассмотрим пример запуска:
$ ./test_app
Привет, мир!
$ /home/user/test_app
Привет, мир!
$Текущий рабочий каталог в приложении на языке Си #
Концепция текущего рабочего каталога присутствует в любом приложении. В рамках системы POSIX предоставляются следующие системные вызовы:
- getcwd для выяснения текущего рабочего каталога.
- chdir для изменения текущего рабочего каталога.
- realpath для преобразования любого пути в абсолютный путь.
- basename для получения пути к каталогу, в котором находится файл.
Задача на управление путями #
Реализуйте приложение, которое будет выполнять задачу № по выполнению переходов по относительным а абсолютным путям. Запустите приложение и проверьте, что оно полностью выполняет возложенную на него задачу.
Исходный код приложения можно на настоящем этапе формировать в графическом редакторе.
Задача на понимание рабочего каталога #
Реализуйте приложение, которое будет выполнять следующие действия:
- Выводить абсолютный путь к текущему рабочему каталогу.
- Выводить путь к приложению, который использовался для запуска (содержится в первом аргументе к приложению).
- Выводить абсолютный путь к исполняемому файлу.
- Открывать на чтение файл исходным кодом приложения и выводить первые 3 строки.
Запустите приложение из следующих каталогов:
- Из каталога приложения с использованием относительного пути к исполняемому файлу.
- Из каталога приложения с использованием абсолютного пути к исполняемому файлу.
- Из родительского каталога относительно каталога приложения с использованием относительного пути к исполняемому файлу.
- Из родительского каталога относительно каталога приложения с использованием абсолютного пути к исполняемому файлу.
Задача на понимание путей к файлам #
Реализуйте приложение, которое будет выполнять следующие действия:
- Проверять, что приложению передан минимум один аргумент.
- Выводить значение аргумента.
- Преобразовывать аргумент к абсолютному пути.
- Выводить преобразованный аргумент.
Запустите приложение, передавая ему следующие аргументы:
~- Абсолютный путь к каталогу с временными файлами.
- Относительный путь к каталогу с системными файлами настроек приложения.