Полное руководство по команде env в Linux
env — очень практичный инструмент командной строки в системах Linux/Unix, в основном используется для отображения и изменения переменных окружения, а также для запуска программ в пользовательской среде.
Переменные окружения — это динамические значения, устанавливаемые операционной системой или пользователями; они влияют на поведение запущенных процессов. Команда env предоставляет нам удобный способ просматривать эти переменные и управлять ими.
Аналогия: представьте переменные окружения как доску объявлений в офисе. Все сотрудники (программы) могут видеть на ней информацию (переменные окружения) и корректировать свой стиль работы на основе этой информации.
Базовый синтаксис команды env
Базовый формат синтаксиса команды env выглядит следующим образом:
env [OPTION]... [NAME=VALUE]... [COMMAND [ARG]...]
Если запустить её напрямую без каких-либо параметровenv, она выведет все текущие переменные среды и их значения.
Общие опции и параметры
Команда env поддерживает следующие общие опции:
| Опция | Описание |
|---|---|
-i, --ignore-environment |
Начать с пустой среды, игнорируя унаследованные переменные среды |
-u, --unset=NAME |
Удалить указанные переменные из среды |
-C, --chdir=DIR |
Перейти в указанный каталог перед запуском команды |
-S, --split-string=S |
Разделить аргументы на несколько аргументов |
--help |
Показать справочную информацию |
--version |
Показать информацию о версии |
Основные примеры использования
1. Просмотр всех переменных среды
Простейший вариант использования — напрямую ввестиenvкоманда:
Пример
Это выведет все переменные среды в текущей оболочке в форматеVariable name=value, например:
USER=john HOME=/home/john PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
2. Запуск команд в пользовательской среде
Вы можете временно установить переменные окружения для запуска программы:
Пример
В этом примере мы временно устанавливаемLANG=Cа затем запускаемlsкоманду, которая повлияет наlsязык вывода команды.
3. Создайте чистое окружение для запуска программ
Используйте-iопция для создания чистого окружения (без наследования каких-либо существующих переменных окружения):
Пример
Здесь мы создали чистое окружение только сPATHпеременной для запускаlsкоманды.
Продвинутое использование
1. Временно измените переменные для запуска скриптов
Пример
Эта команда временно установитEDITORпеременную среды вnano, затем запуститcrontab -e, которая будет использовать редактор nano для редактирования crontab.
2. Удалите определённые переменные среды
Пример
Эта команда при запускеlsудалитHOMEпеременную среды.
3. Использование с shebang
env часто используется в строке shebang скриптов, чтобы сделать их более переносимыми:
Пример
Этот подход более гибок, чем прямое указание/bin/bashболее гибок, потому что он будетPATHискать расположение bash в переменной окружения.
Практические сценарии применения
1. Отладка проблем с переменными окружения
Когда программа ведёт себя ненормально, можно использовать env для проверки её среды выполнения:
Пример
Это позволяет исключить влияние переменных окружения и определить, вызвана ли проблема переменными окружения.
2. Безопасный запуск недоверенных скриптов
При запуске скриптов неизвестного происхождения можно создать ограниченную среду:
Пример
3. Тестирование поведения программы в различных средах локали
Пример
env LANG=zh_CN.UTF-8 program
Это позволяет тестировать поведение программы в различных локалях/языковых средах.
Примечания
- Перезапись переменных: Переменные, заданные через env, перезапишут существующие переменные окружения с тем же именем.
- Влияние на дочерние процессы: Переменные окружения, изменённые с помощью env, влияют только на дочерние процессы, которые запускает env, а не на текущую оболочку.
- Безопасность: Конфиденциальную информацию (например, пароли) не следует передавать через переменные окружения.
- Порядок переменных: Переменные, заданные позже, перезапишут переменные с тем же именем, заданные раньше.