В предыдущем параграфе мы научились вводить команды, выполнять их, а также делать это эффективно за счёт сочетаний клавиш, истории команд и алиасов.
В этом параграфе научимся ориентироваться в файловой системе Linux. Мы разберёмся, чем файл отличается от каталога, что такое абсолютные и относительные пути, как устроены специальные каталоги (., .., ~) и что такое символьные ссылки. После этого вы сможете свободно перемещаться по системе и находить нужные файлы, даже если они скрыты.
Ключевые вопросы параграфа
- Что такое файл и каталог? Чем они различаются?
- Что такое путь к файлу и в чём разница между абсолютным и относительным путём?
- Как перемещаться по каталогам и как узнать, где вы находитесь?
- Как просматривать содержимое каталога?
- Что такое ссылки — символьные и жёсткие?
Файлы и каталоги
Начнём мы с главного:
В Linux всё хранится в виде файлов.
Файл — это единица данных: текстовый документ, картинка, программа или даже устройство (например, диск или принтер). Файл может содержать текст, бинарные данные или быть пустым.
Бинарные данные?
Бинарные данные — это информация, записанная не в виде читаемого текста, а в виде байтов, понятных только программе.
Например, фотографии, видео, исполняемые файлы и архивы состоят из бинарных данных. Главное отличие от текста в том, что текстовые файлы можно открыть и прочитать обычным редактором (например, cat), а бинарные при этом покажут набор непонятных символов, потому что они содержат не буквы, а закодированные двоичные значения.
Подробнее о том, как компьютер хранит данные в памяти, можно прочитать в нашем хендбуке по компьютерным наукам.
Каталог (или директория) — это особый тип файла, который хранит ссылки на другие файлы и каталоги. Каталог можно рассматривать как «папку», в которой находятся имена и пути к содержимому.
Пример:
/home/alice/document.txt— обычный файл;/home/alice/Pictures/— каталог.
Важно: файл хранит данные, а каталог — это список файлов и других каталогов.
Каталоги могут содержать вложенные каталоги, образуя иерархию. В Linux нет дисков C: или D:, как в Windows. Вместо этого вся система файлов оорганизована в едином дереве, начинающееся с корня /. Например:
1/
2├── bin/
3├── etc/
4├── home/
5│ └── alice/
6│ └──── Documents/
7└── var/
/bin— каталог, который содержит базовые программы (например,ls,cat);/etc— каталог, который содержит конфигурационные файлы; они определяют, как именно работают система и программы, какие настройки для работы используются;/home— домашние каталоги пользователей, где хранятся личные файлы и настройки;/var— журналы и временные данные — файлы, необходимые для работы программ; например, если что-то перестаёт работать, в журналах/var/logможно найти причину.
Все устройства (жёсткие диски, USB-флешки) после подключения становятся доступны в дереве каталогов — это называется монтированием. Например, флешка может появиться в /media/alice/USB.
Это лишь небольшая часть дерева Linux. На самом деле каталогов гораздо больше: /usr, /lib, /tmp, /dev, /proc и многие другие. Каждый из них играет свою роль. Например, одни хранят библиотеки и драйверы, другие представляют устройства или служат для временных файлов. Мы познакомимся с ними подробнее по мере изучения системы Linux.
Главное, что стоит запомнить
- В Linux всё организовано в едином дереве с корнем
/. - Пути к файлам записываются через прямой слеш
/(в Windows — обратный слеш\). - Нет разделения на диски с буквами — все носители подключаются в дерево каталогов.
Файловая система Linux выглядит сложной только на первый взгляд. На деле она проще и логичнее: всё находится в одном дереве, начиная от корня /.
Абсолютный и относительный пути
Чтобы обратиться к файлу или каталогу в Linux, нужно указать путь — последовательность каталогов, которые ведут к нужному объекту. В терминале существуют два способа описывать местоположение объекта — через абсолютный путь и через относительный. Давайте разберём, чем они различаются.
Абсолютный путь
Когда в одном из предыдущих параграфов мы читали переменную $HOME, то получали путь к домашнему каталогу текущего пользователя:
1alice@ubuntu:~$ echo $HOME
2/home/alice
/home/alice — это абсолютный путь, или полный путь к файлу, начинающийся от корневого каталога /.
Абсолютный путь показывает точное расположение файла в системе и не зависит от того, где вы находитесь сейчас — в домашнем каталоге ~ (эта запись эквивалентна /home/alice) или в другом месте.
Пример абсолютного пути:
1/home/alice/Documents/report.txt
Путь до файла report.txt можно изобразить как полное дерево, которое начинается от корня /:
1/
2├── bin/
3├── etc/
4├── home/
5│ └── alice/
6│ └── Documents/
7│ └── report.txt
8└── var/
Относительный путь
Относительный путь задаётся относительно текущего каталога, в котором вы находитесь. Чтобы узнать, где вы находитесь, используйте команду pwd:
1alice@ubuntu:~$ pwd
2/home/alice
Название команды
pwdрасшифровывается какprint working directory— «показать рабочий каталог».
Если вы находитесь в каталоге /home/alice, то для перехода в подкаталог /home/alice/Documents можно написать:
1alice@ubuntu:~$ cd Documents
Здесь Documents — это относительный путь, он указывает не полный адрес, а лишь путь от текущего положения.
Мы можем проверить, что мы действительно перешли в подкаталог Documents при помощи команды pwd:
1alice@ubuntu:~/Documents$ pwd
2/home/alice/Documents
Как видим, наше местоположение изменилось на /home/alice/Documents.
Команда cd позволяет изменить текущее положение или текущий каталог, и это основной способ путешествия по иерархии каталогов в Linux.
В домашнем каталоге вашего пользователя может не быть каталога Documents, тогда вы увидите следующую ошибку:
1alice@ubuntu:~$ cd Documents
2-bash: cd: Documents: No such file or directory
Но не смущайтесь, мы можем создать каталог Documents сами. Помните команду для создания пустого каталога?
1alice@ubuntu:~$ mkdir Documents
Теперь мы можем перейти в него (cd) и проверить текущий каталог (pwd).
1alice@ubuntu:~$ cd Documents
2alice@ubuntu:~/Documents$ pwd
3/home/alice/Documents
Мы перешли в каталог Documents из домашнего каталога ~ или /home/alice по относительному пути, но то же самое можно сделать, используя абсолютный путь:
1alice@ubuntu:~$ cd /home/alice/Documents
2alice@ubuntu:~/Documents$ pwd
3/home/alice/Documents
Специальные обозначения
Кроме абсолютного и относительного путей, есть ещё и специальные обозначения:
.— текущий каталог;..— родительский каталог;~— уже знакомый вам домашний каталог текущего пользователя.
Например, если мы находимся в каталоге /home/alice/Documents, мы можем вернуться на уровень выше при помощи cd ..:
1alice@ubuntu:~/Documents$ pwd
2/home/alice/Documents
1alice@ubuntu:~/Documents$ cd ..
2alice@ubuntu:~$ pwd
3/home/alice
Представим, что мы оказались в корне / и хотим быстро вернуться в наш домашний каталог ~. Здесь нам поможет команда cd ~:
1alice@ubuntu:~$ cd /
2alice@ubuntu:/$ pwd
3/
Сейчас мы находимся в корне /.
1alice@ubuntu:/$ cd ~
2alice@ubuntu:~$ pwd
3/home/alice
А теперь мы снова вернулись в домашний каталог /home/alice.
С .. и ~ мы разобрались. Но для чего может потребоваться .?
. (текущий каталог) используется довольно часто, особенно при работе с командами, которые принимают путь к файлу или к каталогу.
Например, мы хотим скопировать файл из текущего каталога или в текущий каталог, и, чтобы не писать полный путь, мы можем использовать .:
1alice@ubuntu:~$ pwd
2/home/alice
3alice@ubuntu:~$ cp /home/alice/Documents/document.txt .
Мы находимся в каталоге /home/alice, мы копируем файл document.txt из каталога /home/alice/Documents/ в нашу текущую папку . (в нашем случае home/alice). Очень удобно!
Файловую систему можно представить как город.
- Абсолютный путь — это полный адрес, включая страну, город, улицу и номер дома. Такой адрес уникален, понятен любому и позволяет добраться до нужного дома независимо от начального местоположения.
- Относительный путь — это короткое указание вроде «зайди в соседнюю комнату» или «поднимись на следующий этаж».
Мы научились переходить по веткам нашего дерева (cd) и узнавать, на какой именно ветке мы находимся (pwd).
Дальше научимся смотреть, что есть на каждой из веток, с помощью команды ls.
Просмотр каталога
С командой ls вы уже знакомы. Но она очень важна для перемещения по дереву каталогов, поэтому давайте повторим ещё раз.
Посмотрим, какие файлы и каталоги находятся внутри текущего каталога:
1alice@ubuntu:~$ ls
2Documents alice.txt document.txt
По умолчанию ls выводит список имён в алфавитном порядке, но у неё есть множество полезных и незаменимых опций:
-l— подробный список: права доступа, владелец, размер, дата изменения;-a— показать все файлы, включая скрытые (имена начинаются с символа.);-h— отображать размеры файлов в удобном виде (KB, MB, GB); обычно используется вместе с-l.
Полный список опций можно посмотреть при помощи команды ls --help.
Опции можно комбинировать, чтобы получить вывод в необходимом для вас формате. Например, мы можем показать вывод в подробном формате и с отображением удобных размеров файлов:
1alice@ubuntu:~$ ls -lh /var/log
Иногда команда ls показывает меньше файлов, чем мы ожидаем. Дело в том, что часть файлов в Linux скрыты от обычного взгляда — они начинаются с точки (.) и служат для хранения служебных данных и настроек.
Скрытые файлы
Команда ls -a позволит увидеть скрытые файлы в каталоге:
1alice@ubuntu:~$ ls -a
2. .. .bash_history .bash_logout .bashrc .cache .lesshst .profile .ssh Documents alice.txt document.txt
Давайте добавим опцию -l для удобства просмотра:
1alice@ubuntu:~$ ls -al
2total 40
3drwxr-x--- 5 alice alice 4096 Oct 6 08:41 .
4drwxr-xr-x 3 root root 4096 Sep 23 14:54 ..
5-rw------- 1 alice alice 739 Oct 3 14:28 .bash_history
6-rw-r--r-- 1 alice alice 220 Mar 31 2024 .bash_logout
7-rw-r--r-- 1 alice alice 3771 Mar 31 2024 .bashrc
8drwx------ 2 alice alice 4096 Sep 23 14:54 .cache
9-rw------- 1 alice alice 64 Sep 29 06:52 .lesshst
10-rw-r--r-- 1 alice alice 807 Mar 31 2024 .profile
11drwx------ 2 alice alice 4096 Oct 2 06:12 .ssh
12drwxrwxr-x 2 alice alice 4096 Oct 6 08:40 Documents
13-rw-rw-r-- 1 alice alice 0 Oct 1 05:19 alice.txt
14-rw-rw-r-- 1 alice alice 0 Oct 6 08:41 document.txt
Обратите внимание на файлы, которые начинаются с точки (.). По умолчанию они скрыты и не будут отображены без использования опции -a, чтобы не загромождать список файлов.
В начале списка мы также можем заметить два уже знакомых нам особых имени:
.— текущий каталог;..— родительский каталог.
Они всегда присутствуют внутри каждого каталога и позволяют быстро перемещаться по дереву файловой системы.
Скрытые файлы — это служебные настройки пользователя и программ. Они хранят конфигурацию среды, историю команд и другие настройки.
В домашнем каталоге ~ обычно есть следующие скрытые файлы:
|
Файл |
Назначение |
|
|
Настройки командной оболочки Bash (например, алиасы, цвета, переменные окружения) |
|
|
История введённых команд |
|
|
Команды, которые выполняются при входе в систему |
|
|
Ключи и настройки SSH |
|
|
Временные данные программ |
Скрытие таких файлов делает работу в терминале удобнее: вы видите только свои документы, а не десятки системных конфигураций.
Также обратите внимание на файл ~/.bash_history — это постоянное хранилище истории команд пользователя, той самой, с которой мы работали в предыдущем параграфе при помощи команды history.
Мы можем вывести содержимое файла при помощи команды cat:
1alice@ubuntu:~$ cat ~/.bash_history
И сравнить его с выводом команды history.
Коротко остановимся и запомним. Чтобы путешествовать по иерархии каталогов, достаточно следующих команд:
cd <путь>— для того, чтобы перейти в новый каталог;cd ..— для того, чтобы вернуться в родительский каталог;pwd— для того, чтобы знать, где мы находимся сейчас;ls— для того, чтобы посмотреть содержимое каталога, в котором мы находимся.
Давайте проверим, насколько вы освоились с навигацией по файловой системе:
Мы уже умеем находить и просматривать файлы. Теперь давайте посмотрим, как Linux позволяет связывать файлы между собой. Это называется ссылками (англ. links).
Ссылки
Символьные ссылки
Символьная ссылка (или symlink) — это особый файл, который указывает на другой файл или каталог. Если вы создавали ярлыки на рабочем столе Windows для удобства запуска программ, то поймёте, что здесь работает тот же принцип: при обращении к ссылке система переходит к объекту, на который ссылка указывает.
Давайте создадим новый пустой файл, заполненный текстом:
1alice@ubuntu:~$ touch report.txt
2alice@ubuntu:~$ echo "Important report contents" > report.txt
3alice@ubuntu:~$ cat report.txt
4Important report contents
Мы создали файл report.txt при помощи команды touch, а затем мы сохранили текст в этот файл, перенаправив вывод (>) из команды echo в report.txt. Мы убедились, что файл теперь имеет содержимое, при помощи команды cat.
Что за перенаправление вывода?
Символ > называется оператором перенаправления вывода.
Он говорит системе записать результат работы команды в файл. Мы очень подробно разберём это в одном из следующих параграфов. Пока нам просто нужно чем-то заполнить файл, и перенаправление из команды echo позволяет нам именно этого и достичь.
Теперь создадим ссылку на файл report.txt, назовём её report-link и используем для этого новую для нас команду ln -s:
1alice@ubuntu:~$ ln -s report.txt report-link
Если мы посмотрим список файлов в каталоге, мы увидим наш новый объект:
1alice@ubuntu:~$ ls -l
2
3lrwxrwxrwx 1 alice alice 10 Oct 6 12:51 report-link -> report.txt
4-rw-rw-r-- 1 alice alice 26 Oct 6 12:47 report.txt
Прежде всего обратите внимание на букву l в списке прав (lrwxrwxrwx) для файла report-link. Она говорит о том, что перед нами ссылка, а не сам файл.
Указатель -> также говорит о том, что перед нами ссылка, и указывает она на файл report.txt.
Мы можем прочитать как сам файл, так и его ссылку и получить один и тот же результат:
1alice@ubuntu:~$ cat report.txt
2Important report contents
3
4alice@ubuntu:~$ cat report-link
5Important report contents
Давайте обновим содержание файла report.txt:
1alice@ubuntu:~$ echo "Another important report contents" > report.txt
2alice@ubuntu:~$ cat report.txt
3Another important report contents
Если мы проверим содержимое по ссылке — её содержимое также будет изменено:
1alice@ubuntu:~$ cat report-link
2Another important report contents
Жёсткие ссылки (hardlink)
Заметьте, мы использовали команду ln с опцией -s, и это не случайно: команда с опцией -s и команда без неё делают абсолютно разные вещи.
- Команда с опцией
-sсоздаёт символьную, или мягкую, ссылку, то есть просто «ярлык», и если удалить исходный файл, то ссылка сломается. - Команда без опции
-sсоздаёт жёсткую ссылку. Мы ссылаемся не просто на уже существующий файл по его имени в файловой системе, а на те же самые данные на физическом диске. Удаление одного файла не повлияет на работу второго, пока существует хотя бы один.
Давайте посмотрим, как создать жёсткую ссылку. У нас уже есть файл report.txt:
1alice@ubuntu:~$ cat report.txt
2Important report contents
Создадим для него жёсткую ссылку с именем new-report.txt:
1alice@ubuntu:~$ ln report.txt new-report.txt
Посмотрим на список файлов в каталоге:
1alice@ubuntu:~$ ls -l
2
3-rw-rw-r-- 2 alice alice 34 Oct 6 13:06 new-report.txt
4lrwxrwxrwx 1 alice alice 10 Oct 6 12:51 report-link -> report.txt
5-rw-rw-r-- 2 alice alice 34 Oct 6 13:06 report.txt
Обратите внимание: у нас появился новый файл new-report.txt, но он не выглядит как ссылка report-link, у него отсутствует флаг l в начале строки.
Давайте попробуем изменить файл report.txt, чтобы убедиться, что new-report.txt — это ссылка, а не самостоятельный файл:
1alice@ubuntu:~$ echo "Another very important report contents" > report.txt
2alice@ubuntu:~$ cat report.txt
3Another very important report contents
Попробуем проверить нашу ссылку new-report.txt:
1alice@ubuntu:~$ cat new-report.txt
2Another very important report contents
Содержимое тоже изменилось!
Это происходит потому, что файлы report.txt и new-report.txt указывают на один и тот же inode (от англ. index node) — внутренний идентификатор файла в файловой системе.
inode — «паспорт» файла: тип, права, владелец/группа, размер, временные метки, счётчик ссылок и указатели на блоки данных. При этом имя файла хранится не в inode, а в каталоге, как ссылка на этот inode.
Чтобы увидеть этот идентификатор, можно воспользоваться командой ls с опцией -i (добавим -l для читабельности):
1alice@ubuntu:~$ ls -il
2
3524303 -rw-rw-r-- 2 alice alice 39 Oct 6 13:22 new-report.txt
4524306 lrwxrwxrwx 1 alice alice 10 Oct 6 12:51 report-link -> report.txt
5524303 -rw-rw-r-- 2 alice alice 39 Oct 6 13:22 report.txt
Обратите внимание, что у обоих файлов одинаковый идентификатор 524303 — он указывает на один и тот же inode.
Также обратите внимание на цифру 2 после прав доступа: это счётчик ссылок, и он говорит о том, что на этот inode сейчас указывают два файла.
Ещё один интересный момент: символьная ссылка report-link создала свой собственный inode, в котором хранит путь до файла report.txt, и не увеличивает число в счётчике ссылок.

Каждый файл в Linux — это одна (первая) жёсткая ссылка на свой inode. При помощи команды ln мы можем создать дополнительные ссылки.
Давайте подытожим для мягких и жёстких ссылок:
|
Характеристика |
Жёсткая ссылка ( |
Символьная ссылка ( |
|
На что указывает |
inode (фактические данные) |
путь к другому файлу |
|
При удалении оригинала |
данные остаются доступны |
ссылка ломается |
|
Может ссылаться на каталог |
нет |
да |
|
Может ссылаться на файл на другом диске |
нет |
да |
|
Как выглядит в |
обычный файл, без |
виден как |
|
Количество ссылок ( |
увеличивает |
не изменяет |
Также зафиксируем, для чего вообще нужны ссылки:
- Упрощают доступ к часто используемым файлам и каталогам (можно создать ярлык в удобном месте).
- Позволяют иметь несколько имён для одного и того же файла — особенно полезно при совместной работе или автоматизации.
- Избавляют от необходимости дублировать файлы — экономят место и упрощают обновления.
- Позволяют создавать стабильные «ярлыки» на динамически изменяемые файлы или каталоги.
- Часто используются в конфигурациях: например, в каталогах
/etcи/usr/libчасто встречаются символьные ссылки, ведущие на актуальные версии программ и библиотек.
Давайте попробуем составить команду для создания символьной ссылки link на для файла file.txt:
Что дальше
Мы уже научились ориентироваться в дереве каталогов, создавать и находить файлы. Теперь сделаем шаг дальше — узнаем подробнее, как работать с файлами и каталогами: создавать, перемещать, удалять их.
В следующем параграфе вы узнаете:
- Как создать файл и каталог.
- Как копировать и перемещать или переименовывать файлы и каталоги.
- Как удалять файлы и каталоги.
- Что такое шаблоны glob.
После этого вы сможете уверенно управлять содержимым своей файловой системы.
А пока закрепите материал на практике:
- Отметьте, что урок прочитан, при помощи кнопки ниже.
- Пройдите мини-квиз, чтобы проверить, насколько хорошо вы разобрались с навигацией по файловой системе.
- Перейдите к задачам этого параграфа и потренируйтесь.
- Перед этим — загляните в короткий гайд о том, как работает система проверки.
Ключевые выводы по параграфу
- В Linux всё является файлами — документы, каталоги, устройства и даже процессы.
- Каталоги — это особые файлы, которые содержат ссылки на другие файлы и каталоги.
- Вся файловая система образует единое дерево, начинающееся с корня
/. - Абсолютный путь начинается с
/и указывает полное местоположение объекта. - Относительный путь задаётся относительно текущего каталога.
- Специальные обозначения:
.— текущий каталог;..— родительский каталог;~— домашний каталог пользователя.
- Основные команды навигации:
pwd— показать текущий каталог;cd <путь>— перейти в другой каталог;cd ..— подняться на уровень выше;ls— показать содержимое каталога.
- Скрытые файлы начинаются с точки (
.) и обычно содержат настройки программ и пользователя (например,.bashrc,.ssh/). - Символьные ссылки (
ln -s) — это ярлыки, которые указывают на путь к другому файлу. - Жёсткие ссылки (
ln) указывают на один и тот жеinodeи делят общее содержимое. Каждый файл в Linux — это минимум одна жёсткая ссылка на свойinode.
