Всё есть файл
Одна из ключевых философий 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- директория внутри/varnginx- директория логов nginxaccess.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.
