1757444658266.png


TL;DR
В Linux всё — файл. Файлы — это не только документы, скрипты или фотографии, а абсолютно всё:
устройства, процессы, сокеты, память, сеть, драйверы и даже настройки ядра.
Этот принцип — не шутка, а фундаментальная философия UNIX.

---

## 🔹 Оглавление
  • [1. Философия UNIX: «Everything is a file»]
  • [2. Как работает VFS — Virtual File System]
  • [3. Файловая иерархия Linux]
  • [4. /dev — устройства как файлы]
  • [5. /proc — процессы и ядро]
  • [6. /sys — драйверы и атрибуты]
  • [7. Управление системой через файлы]
  • [8. Сокеты, TTY и файловые дескрипторы]
  • [9. Память как файл]
  • [10. FIFO, каналы и пайпы]
  • [11. Плюсы и минусы подхода]
  • [12. Чек-лист практики]
  • [13. Полезные ссылки и man-страницы]
---

## 1. Философия UNIX: «Everything is a file»

В 1970-х создатели UNIX решили:
"Любой ресурс системы должен быть доступен через один универсальный интерфейс — файловые операции."

Это значит, что:
  • Жёсткий диск, веб-камера, сетевой порт, процесс и даже сокет TCP/IP — всё имеет файловый интерфейс.
  • Мы используем одинаковые вызовы: open(), read(), write(), ioctl(), close().

Это делает систему универсальной: если ты умеешь читать файл, значит умеешь читать температуру процессора, управлять сетью и работать с USB-устройствами.

---

## 2. Как работает VFS — Virtual File System

VFS — слой ядра, который абстрагирует доступ к разным источникам данных:
  • EXT4, XFS, Btrfs, ZFS — обычные файловые системы
  • /proc и /sys — виртуальные системы
  • /dev — устройства как файлы
  • Сетевые сокеты
  • Пайпы и FIFO

VFS делает так, что приложение видит всё как файлы, хотя ядро под капотом работает с совершенно разными объектами.

---

## 3. Файловая иерархия Linux

Linux использует единую иерархию — нет разделения на диски (C:, D:) как в Windows. Всё смонтировано в /.

| Путь | Назначение |
|--------|-------------------------------------------|
| / | Корень всей системы |
| /dev | Файлы устройств |
| /proc| Виртуальные файлы процессов и ядра |
| /sys | Драйверы, устройства, параметры системы |
| /etc | Конфигурационные файлы |
| /home| Домашние каталоги пользователей |
| /var | Логи, базы данных, очереди |
| /tmp | Временные файлы |
| /run | Временные сокеты и данные процессов |

Пример:

Bash:
tree -L 1 /
/
├── bin
├── boot
├── dev
├── etc
├── home
├── lib
├── proc
├── sys
└── var

---

## 4. /dev — устройства как файлы

Всё оборудование отображается как файлы.

Примеры устройств:
  • Жёсткие диски: /dev/sda, /dev/nvme0n1
  • USB: /dev/bus/usb/001/002
  • Веб-камера: /dev/video0
  • Звук: /dev/snd/
  • Клавиатура/мышь: /dev/input/*

Посмотрим диск:

Bash:
ls -lh /dev/sda
brw-rw---- 1 root disk 8, 0 Sep  9 18:42 /dev/sda

  • b → блочное устройство
  • rw → права
  • 8,0 → идентификатор

Прочитаем первые 512 байт MBR:

Bash:
sudo dd if=/dev/sda bs=512 count=1 | hexdump -C

---

## 5. /proc — процессы и ядро

/procвиртуальная файловая система, которую ядро создаёт «на лету».
Содержит информацию о процессах и параметрах ядра.

Полезные файлы:
Bash:
cat /proc/cpuinfo      # Информация о CPU
cat /proc/meminfo      # Оперативная память
cat /proc/uptime       # Время работы системы
cat /proc/partitions   # Разделы дисков

Информация о процессах:

Bash:
ls /proc             # PID процессов
ls /proc/$$/fd       # Файлы текущего shell
cat /proc/$$/status  # Статус shell-процесса

---

## 6. /sys — драйверы и атрибуты

/sys (sysfs) — интерфейс к драйверам и железу.

Примеры:
Bash:
ls /sys/class/net         # Сетевые интерфейсы
ls /sys/block            # Диски и разделы
ls /sys/class/thermal    # Датчики температуры

Чтение температуры CPU:

Bash:
cat /sys/class/thermal/thermal_zone0/temp

Обычно значение делится на 1000: 42000 → 42.0°C.

---

## 7. Управление системой через файлы

Изменение параметров ядра = запись значения в файл.

Пример: включаем IP forwarding:
Bash:
echo 1 > /proc/sys/net/ipv4/ip_forward

Альтернатива:
Bash:
sysctl -w net.ipv4.ip_forward=1

Меняем лимит открытых файлов:
Bash:
echo 65535 > /proc/sys/fs/file-max

Сделать изменения постоянными:
Bash:
sudo nano /etc/sysctl.conf

---

## 8. Сокеты, TTY и файловые дескрипторы

Файловые дескрипторы — числовые ссылки на открытые файлы:
  • 0 — stdin
  • 1 — stdout
  • 2 — stderr

Список дескрипторов текущего shell:
Bash:
ls -l /proc/$$/fd

Сетевые соединения — тоже файлы:
Bash:
lsof -i -P -n

Отправляем сообщение в чужой терминал:
Bash:
echo "Привет!" > /dev/pts/1

---

## 9. Память как файл

Linux предоставляет доступ к памяти как файлу:
  • /dev/mem → физическая память
  • /proc/kcore → дамп ядра

Пример:
Bash:
sudo hexdump -C /dev/mem | head

⚠️ Осторожно: запись может убить систему.

---

## 10. FIFO, каналы и пайпы

Linux позволяет соединять процессы через пайпы:
Bash:
dmesg | grep error

Создание именованного канала:
Bash:
mkfifo mypipe
echo "data" > mypipe &
cat mypipe

---

## 11. Плюсы и минусы подхода

### ✅ Преимущества:
  • Универсальный интерфейс
  • Простота API
  • Лёгкость автоматизации
  • Мощные пайплайны команд

### ⚠️ Недостатки:
  • /proc и /sys пугают новичков
  • Ошибочная запись может сломать ядро
  • Разные ядра → разные атрибуты

---

## 12. Чек-лист практики

  • [ ] Проверить CPU → cat /proc/cpuinfo
  • [ ] Посмотреть диски → lsblk
  • [ ] Изучить температуру CPU → cat /sys/class/thermal/thermal_zone0/temp
  • [ ] Найти сетевые сокеты → ss -tulpn
  • [ ] Проверить процессы → ps aux | less
  • [ ] Настроить sysctl → sysctl -a | less

---

## 13. Полезные ссылки и man-страницы


---

## 🎯 Заключение

Linux строится на фундаментальной идее:


Эта философия:
  • упрощает разработку,
  • делает систему гибкой,
  • открывает доступ к мощнейшим инструментам.

Если ты умеешь читать файлы — ты уже умеешь управлять системой.