Андрей Михайлович Васильев, 2024
Версии презентации
ФС — это подсистема ядра ОС, обеспечивающая общий и регулируемый доступ к данным на энергонезависимых источниках: жёстких дисках, оптических дисках, твердотельных носителях и т.д.
На физическом уровне каждый такой носитель представляет собой последовательность из блоков одинакового размера
Для процессов и конечного пользователя была предложена древовидная структура
В задачу ОС входит преобразования логического обращения к дререву файловой системы на обращение к последовательности блоков
При работе за компьютером пользователи постоянно взаимодействуют с файловой системой:
При работе с командным интерфейсом пользователю необходимо указывать приложениям местоположение файлов, с которыми они должны работать
В Windows существует множество файловых деревьев, для идентификации которых
используются названия C
, D
и так далее
В UNIX-подобных ОС существует только одно дерево каталогов, различные дисковые
разделы подключаются к единому дереву каталогов, начиная с корневого каталога
/
Для удобства построения путей к нужным файлам была введена концепция текущего рабочего каталога
Без её помощи можно стоить пути только абсолютно, начиная с корневого каталога
/
/home/user/my-data/marks.ods
Это соответствует следующей структуре каталогов
/
└── home
└── user
└── my-data
└── marks.ods
С помощью рабочего каталога можно сократить вводимый пользователем путь:
marks.ods
Эти пути будут указывать на один и тот же файл, если текущий рабочий каталог
/home/user/my-data/
Путь к файлу = текущий рабочий каталог + относительный путь
/home/user/my-data/ + marks.ods = /home/user/my-data/marks.ods
Относительные пути значительно сокращают скорость работы с нужными файлами, если их правильно применять
Общая рекомендация: перед работой с файлами смените рабочий каталог на тот, из которого ближе всего будет писать относительные пути к файлам
Команда pwd
позволяет узнать текущий рабочий каталог
andrey@hp-laptop:~$ pwd
/home/andrey
/home/andrey
— это вывод команды pwd
Согласно древовидному представлению мы можем двигаться в трёх направлениях:
Для движения «вверх» необходимо использовать специальный путь: ..
Например для составления пути к файлу data.txt
в родительском каталоге необходимо составить относительный путь ../data.txt
Родительский каталог/
├── Рабочий каталог/
│ ├── cute-animals/
│ │ └── cat.png
│ └── picture.png
└── data.txt
Для указания текущего каталога используется специальное название: .
Для указания пути к файлу picture.jpg
в текущем каталоге следующие формы будут одинаковыми:
./picture.jpg
picture.jpg
Родительский каталог/
├── Рабочий каталог/
│ ├── cute-animals/
│ │ └── cat.png
│ └── picture.png
└── data.txt
Для указания пути к файлу cat.png
, расположенному в подкаталоге cute-animals
необходимо сформировать: cute-animals/cat.png
Родительский каталог/
├── Рабочий каталог/
│ ├── cute-animals/
│ │ └── cat.png
│ └── picture.png
└── data.txt
Для получения информации о файлах в каталоге используется приложение ls
andrey@hp-laptop:~$ ls
bin Desktop Documents libvirt-images Postman
snap ...
Если не давать ей дополнительных аргументов, то можно получить информацию о текущем рабочем каталоге
Согласно соглашению об именах файлы, которые начинаются с символа точки, считаются скрытыми и их приложение ls
в своём выводе по умолчанию не показывает
Чтобы увидеть все файлы, включая скрытые необходимо приложению ls
передать аргумент -a
: ls -a
[andrey@hp-laptop ~]$ ls -a
. .. .bash_history .bash_logout .bash_profile .bashrc .cache
.config .local .lpoptions .mutt .psql_history .rpmmacros .ssh
.wget-hsts .xprofile .xsession.d ...
Для изменения текущего рабочего каталога используется команда 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 будут разными в отличие от Windows и macOS:
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 покажет возможные варианты для дополнения