📖 Теория — Занятие 10

К оглавлению урока

⚡ Ядро темы

  • Переменная = поименованная область памяти. Системные переменные — БОЛЬШИЕ буквы (PATH, HOME, TERM).
  • PATH — список каталогов через :; bash ищет программы слева направо.
  • env — показать все переменные сессии.
  • export MY_VAR=hello — объявить переменную; echo $MY_VAR — прочитать.
  • unset MY_VAR — удалить переменную.
  • top — интерактивный монитор процессов; ps -ef — список всех; kill PID — завершить.

1. Что такое переменные

Переменная — это поименованная область памяти, в которой хранится значение. В bash переменные используются для хранения путей, настроек, временных данных.

Системные переменные задаются операционной системой или оболочкой и определяют поведение системы и программ. Примеры: PATH, HOME, LANG, TERM.

Соглашение об именах: системные и экспортируемые переменные принято писать БОЛЬШИМИ буквами (MY_VAR, PATH). Это джентльменское соглашение — bash его не требует, но все его соблюдают.

Значение переменной читается через знак $:

echo $HOME     # /home/ec2-user
echo $PATH     # /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
echo $TERM     # xterm-256color
Важно: без $ bash выведет не значение, а сам текст: echo PATH выведет PATH, а не путь. Это частая ошибка новичков.

2. Переменная PATH

PATH — одна из важнейших системных переменных. Она содержит список каталогов, разделённых двоеточием :. Когда вы вводите команду (например, ls), bash ищет исполняемый файл слева направо по всем каталогам из PATH.

echo $PATH
# /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

Стандартные каталоги:

  • /usr/local/bin — локально установленные программы
  • /usr/bin — основные пользовательские утилиты
  • /bin — базовые системные утилиты (ls, cp, mv)
  • /usr/sbin, /sbin — утилиты администрирования

Добавить свой каталог в PATH (в текущей сессии):

export PATH=/opt/mybin:$PATH

Чтобы изменение сохранялось после перезагрузки — добавить в ~/.bashrc или ~/.bash_profile:

# ~/.bashrc
export PATH=/opt/mybin:$PATH

3. Команда env — список переменных сессии

Команда env показывает все переменные окружения текущей сессии.

env
# Вывод (пример):
# SHLVL=1
# HOME=/home/ec2-user
# OLDPWD=/home/ec2-user
# PAGER=less
# PS1=\u@\h:\w\$
# TERM=xterm-256color
# PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
# PWD=/home/ec2-user
# TZ=UTC

Разбор переменных учебной среды (sandbox):

Переменная Значение Описание
SHLVL1, 2, …Уровень вложенности оболочек (при запуске bash внутри bash увеличивается)
HOME/home/ec2-userДомашняя директория текущего пользователя
OLDPWD/home/ec2-userПредыдущая рабочая директория (используется в cd -)
PS1\u@\h:\w\$Вид приглашения командной строки (prompt)
TERMxterm-256colorТип терминала (влияет на цвета и управляющие последовательности)
PWD/home/ec2-userТекущая рабочая директория
TZUTCЧасовой пояс (влияет на вывод date)

4. Объявление переменной: export, чтение через $, unset

Объявление и экспорт

export MY_VAR=hello
export var=world
echo $MY_VAR $var
# вывод: hello world
⚠️ Проверить по документации
Локальная переменная vs экспортированная: MY_VAR=hello (без export) — переменная доступна только в текущей оболочке, дочерние процессы её не увидят. export MY_VAR=hello — переменная передаётся дочерним процессам (подоболочкам, запущенным программам). В учебных задачах всегда используйте export, если хотите, чтобы переменная была видна в скриптах.

Чтение значения

Значение переменной читается через $. Можно использовать в командах и строках:

echo $MY_VAR          # hello
echo "Value: $MY_VAR" # Value: hello
ls $HOME              # содержимое домашней директории

Сброс переменной

unset MY_VAR
echo $MY_VAR   # (пусто)

Просмотр информации о системе

# Версия и дистрибутив Linux
cat /etc/os-release

# Информация о CPU
cat /proc/cpuinfo

5. Менеджмент ресурсов и управление процессами

top — интерактивный монитор

top показывает процессы в реальном времени. Ключевые показатели:

  • Load Average: три числа — нагрузка за последние 1, 5, 15 минут. Значение 1.0 = 100% загрузки одного ядра.
  • PID — уникальный идентификатор процесса
  • PPID — PID родительского процесса

Выход из top: нажать q.

ps — список процессов (снимок)

# Все процессы системы (BSD-стиль)
ps aux

# Все процессы (Unix-стиль, показывает PPID)
ps -ef

ps отличается от top: делает снимок в момент запуска и завершается. top обновляется непрерывно.

kill и killall — завершение процессов

# Завершить процесс по PID (сигнал SIGTERM=15, даёт время завершиться)
kill PID

# Принудительно завершить (SIGKILL=9, немедленно, без очистки)
kill -9 PID

# Завершить все процессы по имени
killall имя_процесса
Сигнал Номер Значение
SIGTERM15 (по умолчанию)Мягкое завершение — процесс может сохранить данные и завершиться корректно
SIGKILL9Принудительное завершение — нельзя перехватить или проигнорировать
SIGINT2Прерывание (Ctrl+C)
SIGQUIT3Завершение с дампом памяти (Ctrl+\)
⚠️ Проверить по документации
kill -9 — крайняя мера. Процесс не успевает освободить ресурсы, закрыть файлы или сохранить состояние. Используйте сначала обычный kill PID (SIGTERM), и только если процесс не реагирует — kill -9.

df — свободное место на дисках

df -h   # -h: human-readable (KB/MB/GB вместо блоков)

free — оперативная память

free -m   # -m: в мегабайтах

Столбцы: total — всего; used — используется; free — свободно; available — реально доступно (учитывает кэш).