Всё есть файл
Одна из ключевых философий Linux: в Linux всё является файлом.
- Обычный файл на диске? Файл.
- Директория? Тоже файл (специального типа).
- Жёсткий диск? Файл —
/dev/sda. - Оперативная память? Файл —
/proc/meminfo. - Запущенный процесс? Набор файлов в директории
/proc/1234/.
Это не метафора — это архитектурное решение. Благодаря ему одни и те же команды работают и с файлами на диске, и с данными от устройств, и с информацией о процессах.
Дерево вместо дисков
Первое, что удивляет людей после Windows: в Linux нет дисков C:, D:, E:. Есть одно дерево директорий, которое начинается с корня /.
/
├── etc/ ← конфигурационные файлы
├── home/ ← домашние директории пользователей
│ ├── alice/
│ └── bob/
├── var/ ← изменяемые данные (логи, базы данных...)
│ └── log/
├── tmp/ ← временные файлы (очищаются при перезагрузке)
├── usr/ ← программы и данные
│ └── bin/ ← основная масса программ
├── bin/ ← базовые программы (ls, cat, cp...)
├── root/ ← домашняя директория root
└── proc/ ← виртуальная ФС: информация о процессах
Этот стандарт называется FHS (Filesystem Hierarchy Standard) — ему следуют все Linux-дистрибутивы.
Основные директории и их назначение
| Директория | Что там хранится |
|---|---|
/ |
Корень — начало всего дерева |
/etc |
Конфигурационные файлы сервисов и системы |
/home |
Домашние директории пользователей (/home/alice, /home/bob) |
/root |
Домашняя директория суперпользователя root |
/bin, /usr/bin |
Исполняемые программы (ls, cp, grep, python3...) |
/var/log |
Логи — системные, nginx, приложений |
/var/lib |
Данные приложений (базы данных, docker images...) |
/tmp |
Временные файлы, удаляются при перезагрузке |
/dev |
Устройства: диски /dev/sda, терминалы /dev/tty |
/proc |
Виртуальная ФС с информацией о запущенных процессах |
/opt |
Программы, установленные вручную (не через пакетный менеджер) |
/srv |
Данные для сервисов (веб-сервер, FTP...) |
Ключевые директории
/etc — сердце конфигурации
Почти все настройки системы и сервисов хранятся здесь:
/etc/hosts # таблица DNS-имён
/etc/ssh/sshd_config # настройки SSH-сервера
/etc/nginx/nginx.conf # настройки Nginx
/etc/systemd/ # конфигурация systemd-сервисов
Хочешь что-то настроить — сначала смотри в /etc.
/var/log — логи
/var/log/syslog # системный лог
/var/log/nginx/ # логи Nginx
/var/log/auth.log # логи аутентификации
Что-то сломалось — смотри сюда.
/home — твоя территория
Каждый пользователь получает свою директорию. ~ — специальный символ, который означает твою домашнюю директорию.
У root особая директория: /root (не /home/root).
/tmp — временный склад
Файлы здесь удаляются при перезагрузке. Идеально для скачанных архивов и промежуточных данных.
Абсолютные и относительные пути
Абсолютный путь начинается с / — однозначно указывает на файл из любой точки:
/root/project/main.go
/etc/nginx/nginx.conf
Относительный путь — относительно текущей директории:
project/main.go # от текущей директории
../other/file.txt # на уровень выше, затем в other/
Специальные обозначения:
- . — текущая директория
- .. — родительская директория
- ~ — домашняя директория
- - — предыдущая директория (работает с cd)
Скрытые файлы
Файл считается скрытым, если имя начинается с точки:
.bashrc # настройки оболочки
.ssh/ # SSH-ключи и конфиги
.env # переменные окружения (секреты!)
.gitignore # правила для git
ls по умолчанию их не показывает. Чтобы увидеть — флаг -a:
ls -a # показывает все файлы включая скрытые
ls -la # + длинный формат с правами, размером, датой
Типы файлов
ls -la показывает тип первым символом строки:
| Символ | Тип |
|---|---|
- |
Обычный файл |
d |
Директория |
l |
Символическая ссылка |
b |
Блочное устройство (/dev/sda) |
s |
Сокет (/var/run/docker.sock) |
