Виртуальные файловые системы
/proc и /sys – это не файлы на диске. Это интерфейс к ядру, оформленный как файловая система. Их можно читать обычным cat:
BashКопировать
cat /proc/cpuinfo
cat /proc/meminfo
cat /proc/uptime
Получите модель процессора, состояние памяти и uptime в секундах – все актуальное на момент чтения, прямо из ядра. У каждого процесса в системе есть своя папка в /proc под номером PID:
bashКопировать▶Запустить
ls /proc/1/
PID 1 – это init или systemd, первый процесс системы. Внутри лежат файлы со всем, что ядро знает о процессе: открытые файлы, лимиты, рабочая директория, переменные окружения. Когда ps, top, htop показывают информацию о процессах – они читают именно отсюда.
/dev и спецфайлы
/dev – устройства, оформленные как файлы. Жесткий диск – /dev/sda, разделы – /dev/sda1, /dev/sda2. Кроме реальных устройств, в /dev есть несколько спецфайлов, которые регулярно используются:
| файл | что делает |
|---|---|
/dev/null | черная дыра: все, что записано, исчезает |
/dev/zero | бесконечный поток нулевых байт |
/dev/random | источник случайных байт от ядра |
/dev/urandom | то же, но не блокируется при нехватке энтропии |
/dev/null мы уже использовали в 1.1 для подавления вывода. /dev/zero пригодится при создании файлов фиксированного размера – например, swap-файлов. /dev/random и /dev/urandom – источники для генерации SSH-ключей, паролей, токенов.
Все вместе – /proc, /dev, файлы устройств – это пример принципа Unix «все есть файл». Один и тот же набор команд (cat, ls, перенаправление) работает с чем угодно: с обычным текстом, с состоянием процессора, с жестким диском.
—
Шаг 1: Скрипт подготовки пространства (prepare_lab.sh)
Чтобы вы случайно не сломали свою основную систему, скрипт создаст изолированную рабочую директорию, запустит там фоновый процесс для экспериментов и подготовит тестовые файлы.
Скопируйте этот код, сохраните в файл prepare_lab.sh и запустите (bash prepare_lab.sh):
bash
#!/bin/bash
set -e
LAB_DIR="$HOME/linux_files_lab"
echo "=== 1. Создаем рабочую директорию: $LAB_DIR ==="
mkdir -p "$LAB_DIR"
cd "$LAB_DIR"
echo "=== 2. Запускаем фоновый подопытный процесс ==="
# Этот процесс просто спит, но мы будем препарировать его через /proc
sleep 9999 > /dev/null 2>&1 &
SUICIDE_PID=$!
echo $SUICIDE_PID > "$LAB_DIR/target_pid.txt"
echo "=== 3. Создаем секретный файл окружения для процесса ==="
# Обновляем переменные окружения для запущенного sleep
# (В реальной жизни это делается при старте, мы сэмулируем структуру)
echo "SECRET_TOKEN=DevOps_Master_2026" > "$LAB_DIR/.env_sample"
echo ""
echo "🎉 Пространство готово!"
echo "📁 Ваша папка: $LAB_DIR"
echo "🆔 PID подопытного процесса: $SUICIDE_PID (сохранен в target_pid.txt)"
echo "🚀 Погнали выполнять задания!"
Используйте код с осторожностью.
Шаг 2: Пакет практических заданий «Всё есть файл»
Выполняйте эти задания последовательно в терминале. Для ответов вам понадобятся только стандартные утилиты: cat, echo, grep, ls, head, dd.
🧠 Блок 1: Препарируем процессы через /proc
Задание 1: Поиск подопытного
- Условие: Прочитайте файл
~/linux_files_lab/target_pid.txt, чтобы узнать PID нашего фонового процесса. Перейдите в директорию/proc/<PID>. - Что сделать: Найдите в этой директории файл, который доказывает, что этот процесс — именно команда
sleep. Прочитайте его. - Критерий успеха: Вы увидели слово
sleepбез использования командpsилиhtop.
Задание 2: Шпионаж за переменными окружения
- Условие: В папке процесса лежит файл
environ. В нем хранятся переменные окружения, с которыми запущен процесс. - Что сделать: Попробуйте прочитать его через
cat environ. Вы увидите кашу, потому что вместо пробелов там используются zero-bytes (\0). Используйте командуcat environ | tr '\0' '\n', чтобы сделать вывод читаемым. - Критерий успеха: Вы смогли четко прочитать список переменных окружения процесса.
Задание 3: Куда смотрят дескрипторы?
- Условие: В папке процесса есть подпапка
fd/(file descriptors). В ней лежат ссылки на файлы, которые процесс открыл (0 — stdin, 1 — stdout, 2 — stderr). - Что сделать: Сделайте
ls -l fd/. - Критерий успеха: Вы должны увидеть, куда наш скрипт перенаправил вывод
sleep(подсказка: посмотрите на/dev/nullв выводе).
🕳️ Блок 2: Магия черных дыр и бесконечности в /dev
Задание 4: Создание мусорного бака
- Условие: Напишите команду, которая запускает бесконечный вывод текста (например,
yes "Я люблю Linux"), но перенаправляет этот поток в «черную дыру»/dev/null, чтобы экран оставался чистым. - Что сделать: Запустите команду в фоне (добавив
&в конце). Проверьте черезtop, что процессор нагружен, но на экране ничего нет. Убейте этот процесс командойkillall yes.
Задание 5: Инженерный лайфхак с /dev/zero (Генерация файла)
- Условие: DevOps-инженерам часто нужно симулировать нехватку места или создавать swap-файлы. Для этого создают пустые файлы фиксированного размера.
- Что сделать: Используйте утилиту
dd, чтобы вырезать из бесконечного потока нулей/dev/zeroровно 50 Мегабайт и сохранить их в файл~/linux_files_lab/test_swap.img. - Команда-подсказка:
dd if=/dev/zero of=~/linux_files_lab/test_swap.img bs=1M count=50 - Критерий успеха: Команда
ls -lh ~/linux_files_lab/test_swap.imgпоказывает размер ровно 50M.
Задание 6: Генератор паролей из шума вселенной
- Условие: Нам нужно сгенерировать случайный безопасный пароль для базы данных из
/dev/urandom. - Что сделать: Извлеките случайные байты из
/dev/urandom, отфильтруйте только буквы и цифры с помощьюtr, и отрежьте первые 16 символов с помощьюhead. - Команда-подсказка:
cat /dev/urandom | tr -dc 'A-Za-z0-9' | head -c 16; echo "" - Критерий успеха: В консоли напечатался случайный 16-символьный пароль (например,
4gH7kLp9zXwQ21mN).
🔧 Блок 3: Железо и Ядро через /proc и /sys
Задание 7: Сколько секунд живет сервер?
- Условие: Файл
/proc/uptimeсодержит два числа. Первое — это общее время работы системы в секундах. - Что сделать: Прочитайте этот файл. Возьмите первое число и мысленно (или в уме) переведите его в минуты/часы.
- Критерий успеха: Вы узнали точное время работы вашей виртуалки.
Задание 8: Проверка батареи/питания (Только для ноутбуков или некоторых облаков)
- Условие: В
/sys/class/power_supply/лежит информация о питании. - Что сделать: Зайдите туда (если папка есть) и найдите файл
capacityвнутри папки батареи (обычноBAT0илиBAT1). Прочитайте его. - Критерий успеха: Вы увидите текущий процент заряда батареи вашего ноутбука прямо из текстового файла.
Речь идет о практике
Виртуальные файловые системы
/proc и /sys – это не файлы на диске. Это интерфейс к ядру, оформленный как файловая система. Их можно читать обычным cat:
BashКопировать
cat /proc/cpuinfo
cat /proc/meminfo
cat /proc/uptime
Получите модель процессора, состояние памяти и uptime в секундах – все актуальное на момент чтения, прямо из ядра. У каждого процесса в системе есть своя папка в /proc под номером PID:
bashКопировать▶Запустить
ls /proc/1/
PID 1 – это init или systemd, первый процесс системы. Внутри лежат файлы со всем, что ядро знает о процессе: открытые файлы, лимиты, рабочая директория, переменные окружения. Когда ps, top, htop показывают информацию о процессах – они читают именно отсюда.
/dev и спецфайлы
/dev – устройства, оформленные как файлы. Жесткий диск – /dev/sda, разделы – /dev/sda1, /dev/sda2. Кроме реальных устройств, в /dev есть несколько спецфайлов, которые регулярно используются:
| файл | что делает |
|---|---|
/dev/null | черная дыра: все, что записано, исчезает |
/dev/zero | бесконечный поток нулевых байт |
/dev/random | источник случайных байт от ядра |
/dev/urandom | то же, но не блокируется при нехватке энтропии |
/dev/null мы уже использовали в 1.1 для подавления вывода. /dev/zero пригодится при создании файлов фиксированного размера – например, swap-файлов. /dev/random и /dev/urandom – источники для генерации SSH-ключей, паролей, токенов.
Все вместе – /proc, /dev, файлы устройств – это пример принципа Unix «все есть файл». Один и тот же набор команд (cat, ls, перенаправление) работает с чем угодно: с обычным текстом, с состоянием процессора, с жестким диском.