Введение
Добро пожаловать на практическое занятие по переменным окружения в Linux! Переменные окружения — это динамические значения, которые могут влиять на поведение запущенных процессов в компьютере. Они играют ключевую роль в настройке системы и выполнении программ. Освоив работу с ними, вы получите важные навыки для системного администрирования Linux и разработки программного обеспечения.
В ходе этого практикума вы научитесь создавать, просматривать, изменять и удалять переменные окружения. Мы также разберем, как сделать эти изменения постоянными, и изучим некоторые наиболее важные встроенные переменные окружения Linux. Независимо от того, являетесь ли вы новичком или хотите закрепить свои знания, этот лабораторный модуль предоставит вам ценный практический опыт.
Приступим!
Понимание переменных в Linux
Прежде чем мы перейдем к переменным окружения, начнем с базовых переменных оболочки (shell variables). Это поможет вам понять саму концепцию переменных в Linux.
Откройте терминал. Вы должны находиться в директории
/home/labex/project. Если нет, перейдите в нее с помощью следующей команды:cd /home/labex/projectТеперь создадим простую переменную оболочки. В Linux переменную можно создать, просто присвоив значение имени. Создадим переменную с именем
my_var:my_var="Hello, Linux"Важное примечание: При присваивании значений переменным в Bash (и Zsh, которую мы используем в этом практикуме) вокруг знака равенства (
=) не должно быть пробелов. Записи видаmy_var = "Hello, Linux"илиmy_var= "Hello, Linux"приведут к ошибке.Чтобы просмотреть значение переменной, используйте команду
echoс символом$перед именем переменной. Символ$указывает оболочке подставить значение переменной:echo $my_varВы должны увидеть вывод:
Hello, LinuxВы также можете использовать переменные внутри других команд или присваиваний. Например:
echo "The value of my_var is: $my_var"Это выведет:
The value of my_var is: Hello, Linux
Отличная работа! Вы только что создали и использовали свою первую переменную оболочки. Однако эта переменная доступна только в текущей сессии терминала. Если вы откроете новое окно или вкладку терминала, эта переменная там будет недоступна. Именно здесь на помощь приходят переменные окружения.
Введение в переменные окружения
Теперь, когда мы понимаем основы, изучим переменные окружения. Переменные окружения — это переменные, доступные любому дочернему процессу оболочки. Это означает, что к ним могут обращаться скрипты и программы, запущенные из этой оболочки.
Чтобы просмотреть все текущие переменные окружения, используйте команду
env:envПоявится длинный список. Не беспокойтесь, если пока не понимаете их все — позже мы разберем самые важные.
Одной из наиболее значимых переменных окружения является
PATH. Давайте взглянем на нее:echo $PATHПеременная
PATHсодержит список директорий, в которых система ищет исполняемые файлы программ. Директории разделяются двоеточием (:).Теперь создадим собственную переменную окружения. Для этого используется команда
export:export MY_ENV_VAR="This is an environment variable"Команда
exportделает переменную доступной для дочерних процессов. В этом и заключается ключевое различие между обычными переменными оболочки и переменными окружения.Чтобы проиллюстрировать разницу, создадим скрипт, который пытается получить доступ и к обычной переменной оболочки, и к переменной окружения. Мы сделаем это с помощью конструкции
heredocи командыcat— это стандартный способ записи многострочного текста в файл:cat << 'EOF' > test_vars.sh #!/bin/bash echo "Shell variable: $my_var" echo "Environment variable: $MY_ENV_VAR" EOFСделайте скрипт исполняемым:
chmod +x test_vars.shТеперь запустите его:
./test_vars.shВы увидите, что переменная окружения (
MY_ENV_VAR) доступна, а переменная оболочки (my_var) — нет. Это произошло потому, чтоmy_varне была экспортирована, и дочерние процессы (такие как наш скрипт) о ней не знают.Чтобы убедиться, что
MY_ENV_VARтеперь является переменной окружения, можно снова использоватьenv, но отфильтровать вывод с помощьюgrep:env | grep MY_ENV_VARВы должны увидеть вашу новую переменную в выводе.
Вы также можете напрямую проверить значение вашей новой переменной окружения:
echo $MY_ENV_VAR
Превосходно! Вы создали свою первую переменную окружения и увидели, чем она отличается от переменной оболочки. Главное отличие: переменные окружения, созданные с помощью export, наследуются дочерними процессами.
Переменные окружения и переменные оболочки имеют свою область видимости. Когда вы экспортируете переменную (например, export MY_ENV_VAR="something"), она становится доступной любому подпроцессу, запущенному из этой оболочки. Однако, если вы откроете совершенно отдельную сессию оболочки, она не унаследует переменные из текущей, если только вы не пропишете их в конфигурационном файле (например, .zshrc или .bashrc).
Иными словами:
- Обычная переменная оболочки видна только внутри текущей сессии.
- Экспортированная переменная доступна дочерним процессам, запущенным из этой сессии.
- Переменная, установленная в конфигурационном файле (например,
.zshrc), применяется ко всем новым сессиям этой оболочки.
Вы не можете напрямую прочитать переменные другого пользователя или другой оболочки, так как каждый процесс поддерживает свое собственное окружение.
На следующих этапах мы научимся делать переменные окружения постоянными.
Уровни постоянства переменных
Для визуализации различий между типами переменных и уровнями их постоянства приведена следующая схема:
graph LR
A["Типы переменных Linux"] --> B["Переменная оболочки"]
A --> C["Переменная окружения"]
A --> D["Постоянная переменная"]
B --> B1["Только текущая сессия"]
B --> B2["Не наследуется"]
B --> B3["Утеряется при выходе"]
C --> C1["Область сессии"]
C --> C2["Доступна детям"]
C --> C3["Утеряется при выходе"]
D --> D1["Все сессии"]
D --> D2["Доступна детям"]
D --> D3["Сохраняется"]
B1 --> E1["my_var='value'"]
C2 --> E2["export VAR='value'"]
D3 --> E3["Файл ~/.zshrc"]
style B fill:#ffebee
style C fill:#fff3e0
style D fill:#e8f5e8
В этой таблице приведена краткая справка:
| Тип переменной | Область видимости | Доступ дочерним процессам | Сохранность | Пример синтаксиса |
|---|---|---|---|---|
| Переменная оболочки | Только текущая сессия | Нет | Исчезает при выходе | my_var='value' |
| Переменная окружения | Текущая сессия | Да | Исчезает при выходе | export VAR='value' |
| Постоянная переменная | Все новые сессии | Да | Сохраняется после выхода | В файле ~/.zshrc |
Понимание этих трех уровней критически важно для эффективного администрирования Linux.
Изменение переменной окружения PATH
Переменная PATH — одна из самых важных в Linux. Она указывает системе, где искать исполняемые файлы. Давайте изменим ее, добавив новую директорию.
Сначала создадим новую директорию, где мы могли бы хранить свои скрипты:
mkdir ~/my_scriptsЭто создаст папку
my_scriptsв вашем домашнем каталоге. Символ~— это сокращение пути к домашней директории (в данном случае/home/labex).Теперь добавим эту директорию в ваш
PATH. Мы снова используемexport, но на этот раз модифицируем существующую переменную:export PATH="$PATH:$HOME/my_scripts"Разберем команду:
$PATH— это текущее значение переменной PATH. Мы берем старое значение и дополняем его.:используется как разделитель путей в PATH. Если его пропустить, оболочка не сможет корректно распознать пути.$HOME— переменная окружения, указывающая на ваш домашний каталог.- Таким образом, мы добавляем
:$HOME/my_scriptsв конец существующего списка. Система будет искать программы вmy_scriptsпосле того, как проверит все стандартные директории.
Проверьте, что новая директория добавлена:
echo $PATHВы должны увидеть
/home/labex/my_scriptsв конце вывода.Чтобы протестировать это, создадим простой скрипт в нашей новой директории:
cat << 'EOF' > ~/my_scripts/hello.sh #!/bin/zsh echo "Hello from my custom script!" EOFПервая строка
#!/bin/zsh(шебанг) сообщает системе, что это скрипт zsh и его нужно запускать соответствующим интерпретатором.Сделайте скрипт исполняемым:
chmod +x ~/my_scripts/hello.shКоманда
chmod +xдает права на выполнение. Без этого шага при попытке запуска вы получите ошибку "permission denied" (отказано в доступе).Теперь вы сможете запустить этот скрипт из любого места, просто введя его имя:
hello.shЕсли все сделано правильно, вы увидите:
Hello from my custom script!
Это работает, потому что мы добавили my_scripts в PATH. Когда вы вводите команду, оболочка по порядку просматривает все директории из списка PATH в поисках файла с таким именем.
Для демонстрации попробуйте перейти в другую директорию и запустить скрипт снова:
cd /tmp
hello.sh
Скрипт все равно сработает. В этом и заключается мощь переменной PATH — она позволяет запускать программы из любой точки системы.
Как сделать переменные окружения постоянными
Переменные окружения, которые мы устанавливали ранее, исчезнут после закрытия терминала. Чтобы они сохранялись, их нужно добавить в конфигурационный файл оболочки. Конкретный файл зависит от того, какую оболочку вы используете.
В этой среде используется Z shell (zsh). Это расширенная версия Bourne Shell (sh) с множеством улучшений. Zsh очень популярна и является оболочкой по умолчанию в macOS.
Если бы вы использовали Bash, вы бы редактировали .bashrc. Но так как у нас Zsh, мы будем изменять .zshrc. Очень важно использовать правильный файл. Если вы измените .bashrc, работая в zsh, переменные не подгрузятся.
Откройте файл
.zshrcв домашней директории с помощью текстового редактора. Мы используемnano— простой консольный редактор:nano ~/.zshrcЭтот файл выполняется каждый раз при запуске новой сессии терминала.
Прокрутите файл в самый низ (используйте стрелки на клавиатуре) и добавьте следующие строки:
export MY_ENV_VAR="This is an environment variable" export PATH="$PATH:$HOME/my_scripts"Убедитесь, что синтаксис верен и вокруг знака
=нет пробелов.Сохраните файл и выйдите. В nano это делается нажатием
Ctrl+X, затемY(для подтверждения сохранения) иEnter.Чтобы применить изменения немедленно, не перезапуская терминал, используйте команду
source:source ~/.zshrcКоманда
sourceсчитывает и выполняет содержимое файла в текущем окружении оболочки. Это отличается от простого запуска файла, который создал бы новую оболочку. Если вы пропустите этот шаг, изменения вступят в силу только в новых окнах терминала.
Теперь эти переменные будут устанавливаться автоматически при каждом открытии терминала.
Изучение важных встроенных переменных окружения
В Linux есть несколько встроенных переменных, критически важных для работы системы:
HOME: Указывает на домашнюю директорию текущего пользователя.echo $HOMEUSER: Содержит имя текущего пользователя.echo $USERSHELL: Определяет оболочку пользователя по умолчанию.echo $SHELLPWD: Сокращение от "Print Working Directory". Содержит путь к текущей рабочей директории.echo $PWDTERM: Определяет тип эмуляции терминала.echo $TERM
Знание этих переменных помогает лучше ориентироваться в среде Linux и управлять ею.
Удаление переменных окружения
Иногда возникает необходимость удалить переменную окружения. Это делается с помощью команды unset.
Сначала проверим, установлена ли наша переменная
MY_ENV_VAR:echo $MY_ENV_VARЧтобы удалить переменную, используйте
unset:unset MY_ENV_VARУбедитесь, что переменная удалена:
echo $MY_ENV_VARВывод должен быть пустым.
Вы также можете использовать опцию
-v, чтобы гарантированно удалять именно переменную, а не функцию оболочки с тем же именем:unset -v MY_ENV_VAR
Помните: если вы добавили переменную в файл .zshrc, она снова появится при следующем открытии терминала или при выполнении команды source .zshrc.
Резюме
Поздравляем! Вы завершили комплексный практикум по переменным окружения в Linux. Давайте повторим, что вы узнали:
- Вы научились создавать простые переменные оболочки и поняли их область видимости.
- Вы изучили переменные окружения и их отличие от обычных переменных, особенно в контексте наследования дочерними процессами через команду
export. - Вы изменили важную переменную
PATH, добавив в нее свою директорию, что позволило запускать скрипты из любого места системы. - Вы научились делать переменные постоянными, добавляя их в
.zshrc, и узнали, как применять изменения с помощью командыsource. - Вы познакомились с основными встроенными переменными окружения Linux.
- Вы освоили удаление переменных с помощью команды
unset.
Эти навыки являются фундаментальными для системного администрирования и разработки. Переменные окружения позволяют гибко настраивать систему и приложения. Продолжая работу с Linux, вы найдете множество применений этим знаниям в скриптах и конфигурациях.
Помните: практика — залог успеха. Попробуйте создавать свои переменные для различных задач и исследуйте, как другие программы используют их для управления своим поведением. Удачи в обучении!



