Андрей Михайлович Васильев, 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
...
Если не давать ей дополнительных аргументов, то можно получить информацию о текущем рабочем каталоге
Согласно соглашению об именах файлы, которые начинаются с символа точки, считаются скрытыми и их приложение 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 будут разными в отличие от 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 покажет возможные варианты для дополнения