ОП.05Файловая система Linuxзанятие 3Материалы

Часть 1 из 8

Дерево каталогов и пути

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

  1. 1.1 Единое дерево каталогов
  2. 1.2 Командная оболочка и текущий каталог
  3. 1.3 Абсолютный и относительный путь
  4. 1.4 Домашний каталог
  5. 1.5 Рабочий каталог для примеров

1.1 Единое дерево каталогов

В Windows каждый том получает собственную букву, и путь к файлу начинается с неё: C:\Users, D:\Backup. В Linux устройство другое. Все файлы, к которым система имеет доступ, образуют одно дерево каталогов, и у этого дерева одна вершина — корневой каталог, который обозначается косой чертой /.

Второй диск, флешка или сетевое хранилище в Linux не получают отдельного имени. Их содержимое подключается к одному из каталогов общего дерева и становится его ветвью. Благодаря этому программе достаточно знать путь к файлу: на каком физическом устройстве он находится, для неё значения не имеет. Как именно происходит такое подключение, разберём в части 7.

Путь к файлу читается как почтовый адрес — от общего к частному: страна, город, улица, дом. Например, /home/ubuntu/notes.txt означает: от корня перейти в каталог home, затем в каталог ubuntu и взять в нём файл notes.txt.

1.2 Командная оболочка и текущий каталог

Работать с файловой системой мы будем в терминале, через командную оболочку Bash. Оболочка печатает приглашение вида ubuntu@ubuntu:~$ и ожидает команду. В приглашении указаны имя пользователя, имя компьютера и текущий каталог.

Текущий каталог — это каталог, в котором оболочка находится в данный момент. От него зависят команды, в которых путь указан не полностью. Узнать текущий каталог можно командой pwd, сменить — командой cd, посмотреть содержимое — командой ls.

Терминал и оболочка — разные программы. Терминал — это окно: он показывает текст и передаёт нажатия клавиш. Оболочка Bash работает внутри терминала: она читает введённую строку, разбирает её и запускает нужную программу.

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

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

Текущий каталог похож на отметку «Вы находитесь здесь» на схеме торгового центра: от неё отсчитываются все направления. Если вы находитесь в /home/ubuntu и вводите ls Documents, оболочка покажет содержимое /home/ubuntu/Documents.

Снимок 1.1Ubuntu 24.04
  1. 1имя пользователя
  2. 2имя компьютера
  3. 3текущий каталог
  4. 4$ — обычный пользователь, у администратора здесь #
В приглашении оболочки виден текущий каталог.Весь снимок ↗

В приглашении оболочки виден текущий каталог.

Что показывает снимок. Приглашение оболочки состоит из четырёх частей: имя пользователя, имя компьютера, текущий каталог и знак $.

Где это пригодится. По приглашению всегда видно, под каким пользователем и в каком каталоге вы работаете. Прежде чем удалять или перемещать файлы, стоит убедиться, что вы находитесь в нужном каталоге и работаете не от имени root.

В терминалеСодержимое корневого каталога
  1. cd /# перейти в корневой каталог
    что делает

    Что делает команда. Переходит в корневой каталог. После неё все относительные пути отсчитываются от /.

    По частям:

    cd
    сменить текущий каталог
    /
    куда перейти (корневой каталог)
  2. pwd# вывести текущий каталог
    что делает

    Что делает команда. Выводит полный путь каталога, в котором сейчас находится оболочка.

    По частям:

    pwd
    вывести путь текущего каталога
  3. ls -lah /# подробный список, включая скрытые файлы
    что делает

    Что делает команда. Показывает подробный список корневого каталога вместе со скрытыми элементами и размерами в K и M.

    По частям:

    ls
    вывести содержимое каталога
    -l
    подробный список: права, владелец, размер, дата
    -a
    показать и скрытые файлы, имена которых начинаются с точки
    -h
    размеры в понятном виде: K, M, G
    /
    что показать (корневой каталог)
Результат

pwd выводит /, в списке есть каталоги etc, home, usr, var.

Снимок 1.2Ubuntu 24.04
  1. 1результат pwd
  2. 2буква l обозначает ссылку, об этом в части 6
  3. 3обычные каталоги
Корневой каталог Ubuntu. Каждый из этих каталогов имеет своё назначение, его мы разберём в части 2.Весь снимок ↗

Корневой каталог Ubuntu. Каждый из этих каталогов имеет своё назначение, его мы разберём в части 2.

Что показывает снимок. Команда pwd подтверждает, что текущий каталог — корень, а ls -lah выводит каталоги верхнего уровня, в том числе ссылки bin, lib и sbin.

Где это пригодится. С этого списка начинается знакомство с любым незнакомым Linux-компьютером или сервером: по нему видно, какие основные каталоги есть в системе.

Файловый менеджер показывает то же самое дерево в графическом виде:

Снимок 1.3Ubuntu 24.04
Корневой каталог в файловом менеджере Ubuntu.Весь снимок ↗

Корневой каталог в файловом менеджере Ubuntu.

Что показывает снимок. Графический файловый менеджер показывает то же самое дерево каталогов, что и команда ls.

Где это пригодится. Терминал и файловый менеджер работают с одними и теми же файлами: всё, что сделано в терминале, видно в менеджере, и наоборот. На серверах графического интерфейса обычно нет, поэтому с файлами там работают только в терминале.

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

Путь к файлу можно записать двумя способами. Абсолютный путь начинается с корня и содержит все каталоги от вершины дерева до файла: /usr/share/doc. Такой путь указывает на одно и то же место независимо от того, где находится оболочка.

Относительный путь отсчитывается от текущего каталога и не начинается с /. В нём используются два специальных имени: . — сам текущий каталог и .. — каталог уровнем выше. Если текущий каталог /usr/share, то путь ../bin указывает на /usr/bin. Из другого каталога тот же относительный путь приведёт в другое место, поэтому в скриптах и настройках обычно используют абсолютные пути.

Пример. Вы находитесь в /home/ubuntu. Файл report.txt из каталога Documents можно указать абсолютным путём /home/ubuntu/Documents/report.txt или относительным Documents/report.txt. Если перейти в /tmp, относительный путь перестанет находить этот файл, а абсолютный продолжит.

Схема · переходы между каталогами
  • /
  • etc
  • home
  • ubuntu
  • usr
  • bin
  • share

ubuntu@ubuntu:/$

Выберите команду: схема покажет, в какой каталог она ведёт.

В терминалеПереход по абсолютному и относительному пути
  1. cd /usr/share# абсолютный путь
    что делает

    Что делает команда. Переходит в каталог /usr/share по абсолютному пути — из любого места попадёт туда же.

    По частям:

    cd
    сменить текущий каталог
    /usr/share
    куда перейти (абсолютный путь)
  2. pwd
    что делает

    Что делает команда. Выводит полный путь каталога, в котором сейчас находится оболочка.

    По частям:

    pwd
    вывести путь текущего каталога
  3. cd ..# на уровень выше
    что делает

    Что делает команда. Поднимается на один уровень вверх, в родительский каталог.

    По частям:

    cd
    сменить текущий каталог
    ..
    куда перейти (каталог уровнем выше)
  4. pwd
    что делает

    Что делает команда. Выводит полный путь каталога, в котором сейчас находится оболочка.

    По частям:

    pwd
    вывести путь текущего каталога
  5. cd /
    что делает

    Что делает команда. Переходит в корневой каталог. После неё все относительные пути отсчитываются от /.

    По частям:

    cd
    сменить текущий каталог
    /
    куда перейти (корневой каталог)
  6. cd usr# относительный путь от /
    что делает

    Что делает команда. Переходит в подкаталог usr текущего каталога. Из корня это /usr, из другого места — другой каталог.

    По частям:

    cd
    сменить текущий каталог
    usr
    куда перейти
  7. cd bin# относительный путь от /usr
    что делает

    Что делает команда. Переходит в подкаталог bin текущего каталога. Из /usr это /usr/bin.

    По частям:

    cd
    сменить текущий каталог
    bin
    куда перейти
  8. pwd
    что делает

    Что делает команда. Выводит полный путь каталога, в котором сейчас находится оболочка.

    По частям:

    pwd
    вывести путь текущего каталога
Результат

первый pwd выводит /usr, второй — /usr/bin.

Снимок 1.4Ubuntu 24.04
  1. 1.. — переход из /usr/share в /usr
  2. 2два относительных перехода
  3. 3итоговый каталог /usr/bin
Цепочка относительных переходов приводит в тот же каталог, что и абсолютный путь.Весь снимок ↗

Цепочка относительных переходов приводит в тот же каталог, что и абсолютный путь.

Что показывает снимок. Цепочка переходов cd .., cd usr, cd bin привела в тот же каталог /usr/bin, что и абсолютный путь.

Где это пригодится. Относительные пути сокращают ввод, когда вы работаете внутри одного проекта. Абсолютные пути нужны в скриптах и настройках, которые могут запускаться из любого каталога.

1.4 Домашний каталог

У каждого пользователя есть домашний каталог — место для его личных файлов и настроек программ. Домашние каталоги обычных пользователей находятся в /home: у пользователя ubuntu это /home/ubuntu. Оболочка позволяет записывать этот путь коротко, символом ~. В свой домашний каталог пользователь может записывать файлы без прав администратора.

Это аналог папки C:\Users\Имя в Windows. У каждого пользователя свой домашний каталог, поэтому файлы разных людей на одном компьютере не смешиваются, и один пользователь не может случайно испортить файлы другого.

Файлы и каталоги, имена которых начинаются с точки, называются скрытыми. Команда ls по умолчанию их не показывает, ключ -a выводит все имена. Так программы хранят свои настройки, например .bashrc или .config. Скрытие влияет только на отображение: доступ к таким файлам определяется правами, как и для любых других.

В терминалеДомашний каталог и скрытые файлы
  1. cd ~# перейти в домашний каталог
    что делает

    Что делает команда. Возвращает в домашний каталог пользователя, у ubuntu это /home/ubuntu.

    По частям:

    cd
    сменить текущий каталог
    ~
    куда перейти (домашний каталог)
  2. echo "$HOME"# путь к домашнему каталогу из переменной HOME
    что делает

    Что делает команда. Печатает путь к домашнему каталогу, записанный в переменной HOME.

    По частям:

    echo
    вывести текст или значение переменной
    "$HOME"
    значение переменной HOME — путь к домашнему каталогу
  3. pwd
    что делает

    Что делает команда. Выводит полный путь каталога, в котором сейчас находится оболочка.

    По частям:

    pwd
    вывести путь текущего каталога
  4. ls# список без скрытых файлов
    что делает

    Что делает команда. Показывает имена файлов и каталогов в текущем каталоге без скрытых.

    По частям:

    ls
    вывести содержимое каталога
  5. ls -a# полный список
    что делает

    Что делает команда. Показывает все имена в текущем каталоге, включая скрытые, которые начинаются с точки.

    По частям:

    ls
    вывести содержимое каталога
    -a
    показать и скрытые файлы, имена которых начинаются с точки
  6. getent passwd root# домашний каталог пользователя root
    что делает

    Что делает команда. Выводит строку учётной записи root: номер пользователя, домашний каталог /root и оболочку.

    По частям:

    getent
    получить запись из системной базы данных
    passwd
    база учётных записей пользователей
    root
    учётная запись пользователя root
Результат

pwd выводит /home/ubuntu, во втором списке появляются имена с точкой.

Снимок 1.5Ubuntu 24.04
  1. 1путь к домашнему каталогу
  2. 2скрытые файлы и каталоги
Домашний каталог пользователя ubuntu.Весь снимок ↗

Домашний каталог пользователя ubuntu.

Что показывает снимок. Домашний каталог пользователя — /home/ubuntu; скрытые файлы с точкой видны только с ключом -a; домашний каталог root — /root.

Где это пригодится. Личные настройки программ, например .bashrc или каталог .config, хранятся в скрытых файлах домашнего каталога. Если программа ведёт себя не так, как ожидается, её настройки ищут именно там.

1.5 Рабочий каталог для примеров

Все примеры дальнейших частей выполняются в каталоге ~/linux-fhs-lab. Системные каталоги мы только читаем. Создадим рабочий каталог и два файла, которые понадобятся в частях 6–8.

В терминалеСоздание рабочего каталога
  1. mkdir -p ~/linux-fhs-lab/{config,data,logs,tmp,screenshots}# создать каталог и подкаталоги
    что делает

    Что делает команда. Создаёт каталог linux-fhs-lab в домашнем каталоге и сразу пять подкаталогов внутри него.

    По частям:

    mkdir
    создать каталог
    -p
    создать и все промежуточные каталоги; не выдавать ошибку, если каталог уже есть
    ~/linux-fhs-lab/{config,data,logs,tmp,screenshots}
    какой каталог создать (путь от домашнего каталога; фигурные скобки: оболочка превратит запись в несколько путей)
  2. cd ~/linux-fhs-lab
    что делает

    Что делает команда. Переходит в рабочий каталог урока linux-fhs-lab.

    По частям:

    cd
    сменить текущий каталог
    ~/linux-fhs-lab
    куда перейти (путь от домашнего каталога)
  3. printf "Linux filesystem\n" > data/info.txt# записать текст в файл
    что делает

    Что делает команда. Создаёт файл data/info.txt и записывает в него строку «Linux filesystem».

    По частям:

    printf
    вывести текст по шаблону
    "Linux filesystem\n"
    шаблон текста (\n — перевод строки)
    >
    записать вывод в файл; если файл есть, он будет перезаписан
    data/info.txt
    файл, в который записывается вывод
  4. printf "mode=lab\n" > config/app.conf
    что делает

    Что делает команда. Создаёт файл настроек config/app.conf со строкой mode=lab.

    По частям:

    printf
    вывести текст по шаблону
    "mode=lab\n"
    шаблон текста (\n — перевод строки)
    >
    записать вывод в файл; если файл есть, он будет перезаписан
    config/app.conf
    файл, в который записывается вывод
  5. find . -maxdepth 2 -type f# вывести список файлов
    что делает

    Что делает команда. Ищет в текущем каталоге и на один уровень глубже все обычные файлы и печатает их пути.

    По частям:

    find
    найти файлы и каталоги
    .
    где искать (текущий каталог)
    -maxdepth 2
    искать не глубже 2 уровней вложенности
    -type f
    отбирать только обычные файлы
Результат

find выводит ./data/info.txt и ./config/app.conf.

Снимок 1.6Ubuntu 24.04
  1. 1созданные файлы
Рабочий каталог и созданные файлы.Весь снимок ↗

Рабочий каталог и созданные файлы.

Что показывает снимок. Команда mkdir создала каталоги, printf — два файла, а find подтвердила, что файлы на месте.

Где это пригодится. Так быстро создают структуру проекта. Команда find пригодится, когда нужно найти файл по имени или типу в большом дереве каталогов.

Итоги части 1

  • Файлы Linux образуют одно дерево каталогов с вершиной в корневом каталоге /.
  • Текущий каталог показывает pwd, переход выполняет cd, содержимое выводит ls.
  • Абсолютный путь начинается с / и не зависит от текущего каталога, относительный отсчитывается от текущего.
  • Личные файлы пользователя хранятся в домашнем каталоге ~, имена с точкой — скрытые.

В отчётСнимок с pwd и ls -lah /.

Открыть в отдельной вкладке ↗