Навигация в файловой системе

Навигация в файловой системе #

Андрей Михайлович Васильев, 2022

Версии презентации


Важность файловой системы #

При работе за компьютером пользователи постоянно взаимодействуют с файловой системой:

  • Приложение — это файл, который располагается где-то в файловой системе
  • Все данные пользователя расположены в файлах: текстовые документы, фотографии, таблицы и так далее
  • Приложения для своей работы используют разделяемые библиотеки, файлы, различные ресурсы
  • Приложения используют файлы для хранения собственной конфигурации

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


Структура файловых каталогов #

В современных полноценных ОС (не мобильной iOS) для организации дискового пространства используется используется иерархическая структура каталогов:

  • Единицей организации данных является каталог, который может содержать другие файлы и каталоги
  • Первый каталог файловой системы называется корневой директорией
  • В результате формируется древовидная структура файловой системы

В Windows существует множество файловых деревьев, для идентификации которых используются названия C, D и так далее

В UNIX-подобных ОС существует только одно дерево каталогов, различные дисковые разделы подключаются к единому дереву каталогов


Текущий рабочий каталог #

Для удобства построения путей к нужным файлам была введена концепция текущего рабочего каталога

С её помощью можно стоить пути либо абсолютно:

/home/user/my-data/marks.ods

Либо относительно текущего каталога:

marks.ods

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

/home/user/my-data

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

Путь к файлу: текущий рабочий каталог + относительный путь

Относительные пути значительно сокращают скорость работы с нужными файлами, если их правильно применять

Общая рекомендация: перед работой с файлами смените рабочий каталог на тот, из которого ближе всего будет писать относительные пути к файлам

Как узнать текущий рабочий каталог #

pwd позволяет узнать текущий рабочий каталог

andrey@hp-laptop:~$ pwd
/home/andrey

Как указывать относительные пути к другим каталогам #

Согласно древовидному представлению мы можем двигаться в трёх направлениях:

  • Вверх, к родительскому каталогу
  • Остаться на месте в текущем каталоге
  • Вниз, в один из подкаталогов

Вверх #

Для движения «вверх» необходимо использовать специальное название: ..

Например для составления пути к файлу data.txt в родительском каталоге необходимо составить относительный путь ../data.txt


Относительные пути, продолжение #

Остаться на месте #

Для указания текущего каталога используется специальное название: .

Для указания пути к файлу picture.jpg в текущем каталоге следующие формы будут одинаковыми:

  • ./picture.jpg
  • picture.jpg

Спуститься вниз в один из подкаталогов #

Для указания пути к файлу cat.png, расположенному в подкаталоге cute-animals необходимо сформировать: cute-animals/cat.png


Отображение файлов в каталоге #

Для получения информации о файлах в каталоге используется приложение ls

andrey@hp-laptop:~$ ls
 bin           Desktop   Documents     libvirt-images   Postman    snap
 ...

Если не давать ей дополнительных аргументов, то можно получить информацию о текущем рабочем каталоге

Скрытые файлы в UNIX #

Согласно соглашению об именах файлы, которые начинаются с символа точки, считаются скрытыми и их приложение ls в своём выводе по умолчанию не показывает

Чтобы увидеть все файлы, включая скрытые необходимо приложению ls передать аргумент -a: ls -a

Аргументы приложению пишутся через пробел


Изменение текущего рабочего каталога #

Для изменения текущего рабочего каталога используется команда cd

Для перехода в другой каталог необходимо в качестве аргументу команды cd передать либо абсолютный, либо относительный путь к целевому каталогу

Пример структуры каталогов

/
└── usr
    ├── bin
    ├── doc
    ├── lib
    ├── sbin
    └── share

Использование абсолютных путей

С помощью абсолютного пути можно перейти в целевой каталог из любого места файловой системы

Для перехода в /usr/bin можно написать

cd /usr/bin

Изменение рабочего каталога с относительными путями #

При использовании относительных путей экономим время на набор, но надо быть аккуратным - путь зависит от текущего рабочего каталога

Предположим, что мы находимся в каталоге /usr/bin проведём ряд переходов

Пример структуры каталогов

/
└── usr
    ├── bin
    ├── doc
    ├── lib
    ├── sbin
    └── share
$ pwd
/usr/bin
$ cd .. # Переход в /usr
$ pwd
/usr
$ cd lib # Переход в /usr/lib
$ pwd
/usr/lib
$ cd ../share # Переход в /usr/share
$ pwd
/usr/share

Специальные аргументы команды cd #

Команда cd может также принимать следующие специальные аргументы:

  • - — переход в предыдущий каталог
  • без аргументов — переход в домашний каталог
  • ~bob — переход в домашний каталог пользователя bob

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


Особенности файловой системы Linux #

Имена файлов чувствительны к регистру #

Следующие наборы имён в Linux будут разными в отличие от Windows:

  • File.txt, file.txt
  • DataBase.db, database.DB

Командный интерфейс не различает расширения файлов #

В графическом интерфейсе мы привыкли взаимодействовать с данными путём двойного нажатия на соответствующий файл. В результате этого действия ОС открывает приложение, которое позволяет выполнять действия над этим файлом

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


Пробелы в названий файлов и каталогов #

В Linux можно строить достаточно длинные пути к файлам и каталогам, однако для текстового интерфейса пробелы в названии файлов представляют определённую сложность

Предположим, что мы хотим перейти в каталог с названием cool things и напишем команду cd cool things

Данная команда не будет успешна, т.к. для cd будет передано 2 аргумента: cool и things, а не один

Для решения этой задачи надо либо экранировать пробел:

  • С помощью кавычек: cd 'cool things'
  • С помощью слеша: cd cool\ things

Либо по возможности избегать пробелов в названиях файлов


Автоматическое дополнение пути #

Может показаться, что формировать длинные пути сложно с клавиатуры и неудобно, но это не так. Для ускорения процесса можно воспользоваться клавишей <TAB>, которая позволяет автоматически разрешить путь к каталогу

Рассмотрим следующую структуру каталогов

И построим путь к каталогу path

.
├── another
└── some
    ├── complex
    │   ├── path
    │   └── picture
    └── data
$ cd # начинаем набирать команду cd
$ cd s # нажимаем TAB
$ cd some/ # дополнение
$ cd some/c # вводим c и TAB
$ cd some/complex/ # дополнение
$ cd some/complex/pa # TAB
$ cd some/complex/path

В последнем шаге потребовалось ввести pa, а не p, т.к. существует 2 каталога, которые начинаются на букву p

Если автоматическое дополнение не сработало сразу, то можно нажать на клавишу <TAB> ещё раз и Bash покажет возможные варианты для дополнения

© A. M. Васильев, 2022, CC BY-SA 4.0, andrey@crafted.su