Переменные окружения, PATH, права и процессы

Разбираемся в окружении процесса, путях, правах файлов и управлении процессами.

Переменная окружения — это переменная, которую дочерние процессы наследуют от родителя; так настройки передаются запускаемым программам.

export и наследование

Обычная переменная видна только текущей оболочке. Чтобы её увидели запускаемые программы, переменную экспортируют.

API_KEY="secret123"
export API_KEY
export DATABASE_URL="postgres://localhost/app"
env | grep API_KEY

Вывод:

API_KEY=secret123

После export переменная попадает в окружение и наследуется дочерними процессами. Команда env показывает все переменные окружения.

PATH: где искать программы

Переменная PATH — это список папок через двоеточие, в которых Bash ищет команды. Именно поэтому ls работает без указания полного пути.

echo "$PATH"
export PATH="$HOME/bin:$PATH"
which python3

Здесь мы добавили свою папку ~/bin в начало PATH, чтобы собственные скрипты находились первыми. which показывает, какой именно файл запустится.

Права доступа: rwx

У каждого файла есть права для владельца, группы и остальных: чтение (r), запись (w), исполнение (x).

chmod 755 script.sh
chmod +x deploy.sh
chmod 600 secret.key

Число — это восьмеричная запись прав: 7 = rwx, 5 = r-x, 4 = r--. Так 755 значит «владельцу всё, остальным чтение и запуск», а 600 — «только владельцу читать и писать» (для секретов).

ЦифраПрава
7rwx (всё)
6rw-
5r-x
4r--

Процессы и фоновые задачи

ps aux | grep nginx
sleep 100 &
jobs
kill %1

ps aux показывает процессы, символ & в конце запускает команду в фоне, jobs показывает фоновые задачи оболочки, kill завершает процесс по номеру задачи (%1) или по PID.

Как работает под капотом

Каждый процесс имеет копию окружения, унаследованную от родителя. Когда Bash запускает программу, он передаёт ей экспортированные переменные. Поэтому, изменив PATH в текущей оболочке без export... — на самом деле PATH уже экспортирован системой, поэтому достаточно его переприсвоить. Права хранятся в метаданных файла (inode) как набор битов; восьмеричное число — компактная запись трёх групп по три бита.

Частые ошибки

  • Забыть export. Переменная без export не дойдёт до запускаемой программы.
  • Затереть PATH. export PATH="$HOME/bin" без :$PATH сотрёт остальные пути, и обычные команды перестанут находиться.
  • chmod 777 на всё. Это дыра в безопасности: писать сможет кто угодно. Давайте минимально необходимые права.

Итог

  • export VAR=значение делает переменную видимой дочерним процессам; env показывает окружение.
  • PATH — список папок поиска команд через двоеточие; добавляйте свои пути, не затирая старые.
  • Права rwx задаются восьмерично (755, 600); процессами управляют ps, &, jobs, kill.
Проверьте себя
1. Зачем переменной нужен export?
AЧтобы она стала числом
BЧтобы её унаследовали запускаемые дочерние процессы
CЧтобы ускорить доступ
DЧтобы защитить от изменения
2. Почему опасно писать export PATH="$HOME/bin" без :$PATH в конце?
AЭто синтаксическая ошибка
BЗатрётся прежний PATH, и обычные команды (ls, grep) перестанут находиться
CPATH станет числом
DНичего не произойдёт
3. Что означают права 600 у файла секрета?
AВсем чтение и запись
BТолько владельцу чтение и запись, остальным ничего
CВсем исполнение
DТолько чтение для всех