Переменные окружения, 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 — «только владельцу читать и писать» (для секретов).
| Цифра | Права |
7 | rwx (всё) |
6 | rw- |
5 | r-x |
4 | r-- |
Процессы и фоновые задачи
ps aux | grep nginx
sleep 100 &
jobs
kill %1ps 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.