Строим пространство

Виртуальные файловые системы

/proc и /sys – это не файлы на диске. Это интерфейс к ядру, оформленный как файловая система. Их можно читать обычным cat:

BashКопировать

cat /proc/cpuinfo
cat /proc/meminfo
cat /proc/uptime

Получите модель процессора, состояние памяти и uptime в секундах – все актуальное на момент чтения, прямо из ядра. У каждого процесса в системе есть своя папка в /proc под номером PID:

bashКопировать▶Запустить

ls /proc/1/

PID 1 – это init или systemd, первый процесс системы. Внутри лежат файлы со всем, что ядро знает о процессе: открытые файлы, лимиты, рабочая директория, переменные окружения. Когда pstophtop показывают информацию о процессах – они читают именно отсюда.

/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 «все есть файл». Один и тот же набор команд (catls, перенаправление) работает с чем угодно: с обычным текстом, с состоянием процессора, с жестким диском.







Шаг 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, первый процесс системы. Внутри лежат файлы со всем, что ядро знает о процессе: открытые файлы, лимиты, рабочая директория, переменные окружения. Когда pstophtop показывают информацию о процессах – они читают именно отсюда.

/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 «все есть файл». Один и тот же набор команд (catls, перенаправление) работает с чем угодно: с обычным текстом, с состоянием процессора, с жестким диском.

Оставьте комментарий