Путь к файлу

Доброе время суток участники образовательной IT площадки GeekSpace. Меня зовут Юрий Сиротенко и сегодня мне бы хотелось поговорить о путях к файлам. Многие начинающие разработчики путают два совершенно разных понятия “пути” и “адреса” и мало знакомы с такими понятиями как абсолютные и относительные пути и адреса. Именно поэтому сегодня мне хотелось бы начать разговор на эту тему. Итак тема сегодняшнего конспекта “Путь к файлу”.

Если вы хотите ознакомиться с данным материалом в видео формате, вы можете найти запись в лектории или просто перейти по ссылке. Также вы сможете получить методичку и перезентацию на данную тему под видео - лекцией.

Дерево

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


Математическое дерево в теории графов очень схоже с реальным деревом. Математическое дерево - это грубо скажем точки, соединенные линиями.


Корнем математического дерева называют точку, в которую не входят другие линии, но она порождает эти самые линии. Например на рисунке выше корнем дерева является точка 1, она порождает 2 линии которые входят в узлы 2 и 3.

Еще раз, дерево характеризуется тем, что у каждого узла, кроме одного единственного корневого, всегда есть родитель.

Корень у дерева всегда один. Если корней несколько, то это уже не дерево, а лес, иначе говоря некоторое множество деревьев.

Путь

Смотря на это дерево мы можем построить путь от корня до некоторой точки. Например чтобы добраться до точки 6, нужно пройти по следующему пути:

1 -> 3 -> 6

Это и называется заурядным и самым обыкновенным путем.

Деревья находят применения повсеместно. Если мы рассмотрим обыкновенные веб - сайты, то при помощи деревьев конструируют каталоги меню, древовидные комментарии и многое другое.

В наше время мы уже привыкли работать с так называемыми папками или, по другому говоря - директориями, независимо от операционной системы. Но еще во времена ОС CP/M написанной в 1973 году привычного в наше время понимания “директория” не существовало. Файлы в такой ОС хранились в так скажем едином пространстве и список мог выглядеть примерно следующим образом

file1
my_file
my_document

Разумеется понятно, что число таких файлов на диске вполне себе ограничено. Довольно сложно было записывать большое количество таких файлов на диск потому что для каждого из этих файлов приходилось придумывать уникальное имя. Поэтому в системе CP/M возникло понятие “директория”.

Директория это специального рода файл который имеет метку “директория”. Это не просто файл, это список других файлов которые могут в него входить. Так и появилась всем нам знакомая и привычная иерархическая структура директорий:

Давайте рассмотрим некоторый путь в файловой системе в ОС Linux

В корневой папке “home” есть директория “farza”, в ней “Documents” и т.д. То есть каждая директория является тем самым узлом дерева, а символ “/” является корнем

Это означает что каждый узел дерева можно описать с помощью пути, как и было показано ранее.

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

Абсолютный путь

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

Полный путь до узла под номером 6 - это:

1 -> 3 -> 6

Полный путь до узла 4 - это

1 -> 2 -> 4

Все просто, абсолютный путь - это такой путь, который ведет от корня дерева до нужной точки.

Давайте еще раз рассмотрим дерево файловой системы Linux

Абсолютный путь в рамках данной схемы это:

/ -> home -> farza -> Documents -> GeekSpace -> Notes -> path_and_urls

То есть путь от корня “/” до конечной директории “path_and_urls”.

Разделение узлов в ОС Linux производится при помощи символа прямой слеш “/”. Если мы говорим о ОС Windows, то там разделение делается при помощи обратного слеша “/”.

Относительный путь

В любой современной операционной системе есть понятие “текущая директория”. Текущая директория - это такая директория в которой находится пользователь в настоящий момент времени. Давайте рассмотрим пример в терминале с командным интерпретатором Bash. Когда мы откроем терминал видим следующее:

username@pc_name ~ $

Где username - имя пользователя, pc_name - имя компьютера, а знак тильда “~” означает - домашний каталог пользователя. Командная оболочка автоматически преобразует данный символ в директорию пользователя по умолчанию. В данный момент времени “username” находится в своей домашней директории. Проще говоря его текущая директория относительно файловой системы это его домашняя директория. Чтобы посмотреть абсолютный путь до текущей позиции можно воспользоваться командой “pwd”

username@pc_name ~ $ pwd
/home/farza

Путь “/home/farza” является абсолютным путем до текущей позиции. Изменить текущую директорию можно при помощи команды “cd”

username@pc_name ~ $ cd /home/farza/Documents/
username@pc_name ~/Documents $ pwd
/home/farza/Documents

Сейчас текущая директория пользователя это “/home/farza/Documents”

Теперь мы напрямую подошли к термину “относительный путь”. Относительный путь - это путь ОТ текущей директории. Что значит “относительно”? Давайте я приведу пример.

У меня на машине в директории “Documents” существует папка “GeekSpace” и я хочу посмотреть содержимое данной директории. Для того чтобы это сделать я могу воспользоваться командой “ls”

username@pc_name ~/Documents $ ls /home/farza/Documents/GeekSpace

То есть при помощи команды “ls” я попросил у командного интерпретатора bash показать содержимое директории “GeekSpace”. В качестве параметра для команды “ls” был передан абсолютный путь до директории “GeekSpace”. Это абсолютно правильная запись, но учитывая то, что я уже нахожусь в директории Documents, я могу воспользоваться следующей записью:

username@pc_name ~/Documents $ ls GeekSpace

Результат будет абсолютно тем же самым. Путь который я указал в данной команде является относительным, то есть относительно текущей директории.

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

/home/farza/Documents + GeekSpace = /home/farza/Documents/GeekSpace

То есть если я пишу

cd GeekSpace

это означает, что я ожидаю, что директория “GeekSpace” находится в текущей директории.

Специальные директории

В любой директории есть две специальных скрытых директории - это “.” (точка) и “..” (две точки). Увидеть их вы можете воспользовавшись командой “ls” с флагом “-a”

  • “.” - специальная директория которая ссылается на текущую папку
  • “..” - специальная директория которая ссылается на родительскую директорию (на сегмент выше в иерархии)

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

ls .

чтобы посмотреть содержимое текущей папки. Также мы можем посмотреть содержимое родительской папки при помощи команды

ls ..

или

ls ./GeekSpace

Означает “Уважаемый командный интерпретатор, покажи мне пожалуйста содержимое директории GeekSpace, которая вложена в текущую папку”.

В качестве примера можно привести следующее:

ls ../Desktop

Что означает “От текущей папке нужно подняться на уровень вверх, затем зайти в директорию Desktop и показать ее содержимое”

Мы также можем подняться на несколько уровней вверх:

ls ../../../etc

Заключение

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

Информация

Автор конспекта


Дата создания: 20.01.2019
Категория: Веб-разработка