Материал открыт для чтения

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

Войти
Linux: Старт в терминале

Файловая система: корень, FHS, пути и скрытые файлы

чтение ~8 минУрок 3 из 18

Всё есть файл

module linux start Image02

Одна из ключевых философий Linux: в Linux всё является файлом.

  • Обычный файл на диске? Файл.
  • Директория? Тоже файл специального типа.
  • Жёсткий диск? Файл устройства, например /dev/sda.
  • Оперативная память? Информация через файл вроде /proc/meminfo.
  • Запущенный процесс? Набор файлов в директории /proc/1234/.
  • Сокет Docker? Файл вроде /var/run/docker.sock.

Это не просто красивая фраза, а архитектурное решение. Многие объекты системы представлены через файловую систему, поэтому одни и те же привычки работают в разных местах: посмотреть список, прочитать содержимое, проверить права, найти по имени, передать путь другой команде.

Важная идея: в Linux путь к объекту часто важнее того, “что это внутри” - обычный файл, директория, устройство, процесс или виртуальная информация ядра.

Если система показывает объект как файл, с ним можно работать привычными инструментами: читать, фильтровать, смотреть права, передавать путь команде. Поэтому навык уверенно читать файловую систему помогает не только “ходить по папкам”, но и диагностировать процессы, устройства, логи и настройки.

Например, файл /proc/cpuinfo не лежит на диске как обычный текстовый документ. Его создаёт ядро "на лету", когда ты его читаешь:

cat /proc/cpuinfo

С точки зрения пользователя это всё равно файл: его можно открыть, отфильтровать через grep, посчитать строки через wc -l.


Дерево вместо дисков

В Linux нет дисков C:, D:, E:. Есть одно дерево директорий, начинающееся с корня /.

/
├── etc/      <- конфигурационные файлы
├── home/     <- домашние директории пользователей
│   ├── alice/
│   └── bob/
├── root/     <- домашняя директория root, не /home/root
├── var/
│   ├── log/  <- системные логи
│   └── lib/  <- данные приложений
├── tmp/      <- временные файлы
├── usr/
│   └── bin/  <- большинство программ
├── bin/      <- базовые программы
└── proc/     <- виртуальная ФС: информация о процессах

Корень / - это не "диск", а начало единого дерева. Физические диски, сетевые хранилища и специальные файловые системы подключаются внутрь этого дерева в конкретные точки. Такое подключение называется mount. Например, отдельный диск может быть смонтирован в /data, а сетевое хранилище - в /mnt/backups.

Важная идея: в Linux нет набора независимых дисков как C: и D:; есть одно дерево, а диски и специальные файловые системы подключаются в его ветки.

Для начинающего администратора важна практическая мысль: путь всегда читается слева направо от корня или от текущей директории. В пути /var/log/nginx/access.log:

  • / - начало дерева
  • var - директория первого уровня
  • log - директория внутри /var
  • nginx - директория логов nginx
  • access.log - конкретный файл

FHS: почему директории называются одинаково

Стандарт расположения директорий называется FHS (Filesystem Hierarchy Standard). Благодаря ему на разных Linux-серверах конфиги, логи, бинарники и временные файлы ожидаемо лежат в похожих местах.

Директория Что там хранится
/ Корень, начало всего дерева
/etc Конфигурационные файлы: nginx.conf, sshd_config, hosts
/home Домашние директории обычных пользователей
/root Домашняя директория суперпользователя root
/bin, /usr/bin Исполняемые программы: ls, cp, grep, python3
/sbin, /usr/sbin Системные утилиты администрирования
/var/log Логи системы, nginx, баз данных и приложений
/var/lib Изменяемые данные приложений: базы, docker images, state
/tmp Временные файлы, часто очищаются при перезагрузке
/dev Устройства: диски, терминалы, псевдоустройства
/proc Виртуальная ФС с информацией о ядре и процессах
/opt Программы, установленные вручную или сторонними пакетами
/srv Данные, которые отдают сервисы

Для DevOps особенно часто встречаются:

  • /etc - когда нужно поправить конфигурацию сервиса
  • /var/log - когда нужно понять, почему сервис падает
  • /var/lib - когда важно найти состояние приложения или контейнерного движка
  • /tmp - когда нужен временный файл для проверки
  • /opt - когда приложение установлено не через стандартный пакет

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

Обычные пользователи обычно живут в /home:

/home/alice
/home/bob

root - суперпользователь. Его домашняя директория — /root.

Это не то же самое, что /. Корень файловой системы - /, а домашняя директория root - /root.

Символ ~ (тильда) означает домашнюю директорию текущего пользователя:

  • для root: ~ = /root
  • для alice: ~ = /home/alice

В лабораторных ты работаешь как root, поэтому cd ~, cd /root и просто cd будут приводить в одно и то же место.


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

Абсолютный путь начинается с / и не зависит от текущей директории:

/root/project/main.go
/etc/nginx/nginx.conf
/var/log/syslog

Такой путь можно использовать из любого места. Если ты находишься в /tmp, путь /etc/hosts всё равно означает один и тот же файл.

Относительный путь считается от текущей директории:

project/main.go
../other/file.txt
./script.sh

Специальные обозначения:

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

Пример:

cd /var/log
ls nginx
ls ../tmp

В первой команде мы переходим в /var/log. После этого относительный путь nginx означает /var/log/nginx, а ../tmp означает /var/tmp, потому что .. сначала поднимает нас из /var/log в /var.


Скрытые файлы

Файл считается скрытым, если имя начинается с точки:

.bashrc       настройки оболочки bash
.ssh/         SSH-ключи и конфиги
.env          переменные окружения, часто секреты
.gitignore    правила для git

Это соглашение, а не отдельное право доступа. Файл .env скрыт только для обычного вывода ls, но если знать имя, его можно открыть напрямую:

cat .env

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

ls -a
ls -la

ls -la особенно полезен, потому что показывает скрытые файлы, тип объекта, права, владельца, размер и дату изменения.


Типы файлов в ls -l

Команда ls -la показывает тип файла первым символом строки:

drwxr-xr-x  2 root root  4096 Jan 15 10:23 notes/
-rw-r--r--  1 root root   512 Jan 15 10:23 config.txt
lrwxrwxrwx  1 root root    12 Jan 15 10:23 link -> /etc/hosts
Символ Тип
- Обычный файл
d Директория
l Символическая ссылка
b Блочное устройство, например диск
c Символьное устройство
s Сокет
p Именованный канал

Когда задание просит найти "обычные файлы", имеются в виду строки, где первый символ -. Директория (d) и симлинк (l) не считаются обычными файлами, даже если у них есть имя и путь.


inode: имя не равно данные

Каждый файл в Linux хранится через inode - структуру данных с метаданными: права, владелец, временные метки, размер, указатели на блоки данных. Имя файла хранится отдельно в директории и указывает на inode. Директорию можно представить как таблицу имя -> inode.

Посмотреть inode можно так:

ls -i /etc/hosts
stat /etc/hosts

Упрощённо:

имя config.txt -> inode 12345 -> данные на диске

Это объясняет две важные вещи:

  • файл можно переименовать, но данные останутся теми же;
  • жёсткая ссылка может дать второе имя тому же inode.

Запомни коротко: путь - это способ найти имя в дереве директорий, имя ведёт к inode, а inode уже описывает сам объект файловой системы. В следующих главах ты увидишь, как это связано с mv, hard link и symlink.

Материал изучен?

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

Войти и продолжить