Linux export to all users

Содержание
  1. Изучаем команды Linux: export
  2. 1. Введение
  3. 2. Часто используемые опции
  4. 3. Основы export
  5. 4. Дочерние и родительские процессы
  6. 5. Использование команды export
  7. 6. Экспорт функций командной оболочки
  8. 7. Удаление имен из списка экспорта
  9. 8. Заключение
  10. How to Set Environment Variables in Linux
  11. Overview
  12. Setting an Environment Variable
  13. Unsetting an Environment Variable
  14. Listing All Set Environment Variables
  15. Persisting Environment Variables for a User
  16. Export Environment Variable
  17. Setting Permanent Global Environment Variables for All Users
  18. Conclusion
  19. Переменные окружения в Linux
  20. Виды переменных окружения
  21. 1. Локальные переменные окружения
  22. 2. Пользовательские переменные оболочки
  23. 3. Системные переменные окружения
  24. Конфигурационные файлы переменных окружения Linux
  25. .bashrc
  26. .bash_profile
  27. /etc/environment
  28. /etc/bash.bashrc
  29. /etc/profile
  30. Добавление пользовательских и системных переменных окружения в Linux
  31. 1. Использование env
  32. 2. Использование unset
  33. 3. Установить значение переменной в »
  34. Создание пользовательских и системных переменных окружения
  35. 1. Устанавливаем и удаляем локальные переменные в Linux
  36. Установка и удаление пользовательских переменных
  37. Установка и удаление системных переменных окружения
  38. Выводы
  39. Оцените статью:
  40. Об авторе
  41. 11 комментариев

Изучаем команды Linux: export

1. Введение

Export — это одна из встроенных команд оболочки bash, поэтому она является неотъемлемой частью вашей командной строки. Она очень проста в использовании, так как синтаксис export допускает использование всего трех опций командной строки. В целом команда export отмечает переменную окружения для экспорта с любым новым дочерним процессом, и это позволяет дочернему процессу наследовать все отмеченные переменные. В данной статье этот процесс будет описан более подробно.

2. Часто используемые опции

-p
выводит список всех имен, экспортированных в текущей оболочке
-n
удаляет имена из списка экспорта
-f
имена экспортируются как функции

3. Основы export

Подумайте над следующим примером:

Строка 1: создается новая переменная с именем «a», содержащая строку «linuxcareer.com».
Строка 2: мы используем команду echo, чтобы вывести содержимое переменной «a».
Строка 3: мы создаем дочерний экземпляр оболочки bash.
Строка 4: переменная «a» теперь не определена.

Из приведенного выше примера можно видеть, что любой дочерний процесс, ответвляющийся от родительского процесса, по умолчанию не наследует переменные родителя. Для этого и нужна команда export. Что произойдет, если мы используем команду export в вышеприведенном примере?

Теперь в строке 3 мы использовали команду export, чтобы экспортировать переменную «a» в созданный новый дочерний процесс. В результате переменная «a» все еще содержит строку «linuxcareer.com», даже после создания нового экземпляра оболочки bash. Здесь важно отметить, что для успешного экспорта «a» необходимо, чтобы процесс, в который экспортируется переменная, ответвлялся от того родительского процесса, из которого экспортируется эта переменная. Связь между дочерним и родительским процессами описана ниже.

4. Дочерние и родительские процессы

В этом разделе мы коротко опишем взимосвязь между дочерним и родительским процессом. Все процессы могут быть родительскими и дочерними одновременно. Единственным исключением является процесс init, который всегда имеет PID (ID процесса) 1. Поэтому init является родительским для всех процессов, запущенных в системе Linux.

Любой создаваемый процесс имеет родительский процесс, из которого он создается, и может быть определен как потомок этого родительского процесса. Например:

Строка 1: вывести PID текущей командной оболочки — 27861
Строка 2: создать новый дочерний процесс из процесса с ID 27861
Строка 3: вывести PID текущей командной оболочки — 28034
Строка 4: вывести список дочерних процессов для PID 27861 с помощью команды ps

При создании нового дочернего процесса команда export просто обеспечивает, что все экспортируемые переменные родительского процесса доступны в дочернем процессе.

5. Использование команды export

Теперь, изучив основы, мы можем продолжить детальное исследование команды export. При использовании команды безо всяких опций и аргументов она просто выводит имена всех переменных, отмеченных для экспорта в дочерние процессы. То же самое происходит при использовании опции -p:

Как было показано выше, для экспорта переменной мы просто используем имя переменной в качестве аргумента команды export.

Как вы можете видеть, после экспорта переменной MYVAR, она будет показываться в списке экспортируемых переменных (строка 4). Приведенный выше пример можно сократить, используя команду export сразу при присваивании значения переменной.

Наиболее широко команда export применяется для объявления переменной оболочки PATH:

В этом примере мы включаем дополнительный путь /usr/local/bin в существующее определение PATH.

6. Экспорт функций командной оболочки

Используя опцию -f, команда export может быть также использована для экспорта функций. В примере ниже мы создаем функцию оболочки под именем printname, которая просто выводит строку «Linuxcareer.com» с помощью команды echo.

7. Удаление имен из списка экспорта

Выполнив один из вышеприведенных примеров, мы имеет переменную MYVAR, определенную в списке экспорта.

Чтобы удалить переменную из списка экспорта, необходимо использовать опцию -n.

8. Заключение

В этой статье рассмотрены основы использования команды export. Чтобы узнать больше подробностей, используйте команду:

Источник

How to Set Environment Variables in Linux

Overview

In this tutorial, you will learn how to set environment variables in Ubuntu, CentOS, Red Hat, basically any Linux distribution for a single user and globally for all users. You will also learn how to list all environment variables and how to unset (clear) existing environment variables.

Читайте также:  Linux adduser to group

Environment variables are commonly used within the Bash shell. It is also a common means of configuring services and handling web application secrets.

It is not uncommon for environment specific information, such as endpoints and passwords, for example, to be stored as environment variables on a server. They are also used to set the important directory locations for many popular packages, such as JAVA_HOME for Java.

Setting an Environment Variable

To set an environment variable the export command is used. We give the variable a name, which is what is used to access it in shell scripts and configurations and then a value to hold whatever data is needed in the variable.

For example, to set the environment variable for the home directory of a manual OpenJDK 11 installation, we would use something similar to the following.

To output the value of the environment variable from the shell, we use the echo command and prepend the variable’s name with a dollar ($) sign.

And so long as the variable has a value it will be echoed out. If no value is set then an empty line will be displayed instead.

Unsetting an Environment Variable

To unset an environment variable, which removes its existence all together, we use the unset command. Simply replace the environment variable with an empty string will not remove it, and in most cases will likely cause problems with scripts or application expecting a valid value.

To following syntax is used to unset an environment variable

For example, to unset the JAVA_HOME environment variable, we would use the following command.

Listing All Set Environment Variables

To list all environment variables, we simply use the set command without any arguments.

An example of the output would look something similar to the following, which has been truncated for brevity.

Persisting Environment Variables for a User

When an environment variable is set from the shell using the export command, its existence ends when the user’s sessions ends. This is problematic when we need the variable to persist across sessions.

To make an environment persistent for a user’s environment, we export the variable from the user’s profile script.

  1. Open the current user’s profile into a text editor
  2. Add the export command for every environment variable you want to persist.
  3. Save your changes.

Adding the environment variable to a user’s bash profile alone will not export it automatically. However, the variable will be exported the next time the user logs in.

To immediately apply all changes to bash_profile, use the source command.

Export Environment Variable

Export is a built-in shell command for Bash that is used to export an environment variable to allow new child processes to inherit it.

To export a environment variable you run the export command while setting the variable.

We can view a complete list of exported environment variables by running the export command without any arguments.

To view all exported variables in the current shell you use the -p flag with export.

Setting Permanent Global Environment Variables for All Users

A permanent environment variable that persists after a reboot can be created by adding it to the default profile. This profile is loaded by all users on the system, including service accounts.

All global profile settings are stored under /etc/profile. And while this file can be edited directory, it is actually recommended to store global environment variables in a directory named /etc/profile.d, where you will find a list of files that are used to set environment variables for the entire system.

  1. Create a new file under /etc/profile.d to store the global environment variable(s). The name of the should be contextual so others may understand its purpose. For demonstrations, we will create a permanent environment variable for HTTP_PROXY.
  2. Open the default profile into a text editor.
  3. Add new lines to export the environment variables
  • Save your changes and exit the text editor
  • Conclusion

    This tutorial covered how to set and unset environment variables for all Linux distributions, from Debian to Red Hat. You also learned how to set environment variables for a single user, as well as all users.

    Источник

    Переменные окружения в Linux

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

    Например, команда PWD использует системную переменную, чтобы сохранять прежнюю рабочую директорию. Пользовательские переменные окружения устанавливаются пользователем, для текущей оболочки, временно или постоянно. Вся концепция добавления и удаления переменных оболочки крутится вокруг нескольких файлов, команд и различных оболочек.

    Виды переменных окружения

    Если смотреть более широко, переменная окружения может быть трех типов:

    Читайте также:  Realtek high definition audio driver ��� linux

    1. Локальные переменные окружения

    Эти переменные определены только для текущей сессии. Они будут безвозвратно стерты после завершения сессии, будь то удаленный доступ или эмулятор терминала. Они не хранятся ни в каких файлах, а создаются и удаляются с помощью специальных команд.

    2. Пользовательские переменные оболочки

    Эти переменные оболочки в Linux определяются для конкретного пользователя и загружаются каждый раз когда он входит в систему при помощи локального терминала, или же подключается удаленно. Такие переменные, как правило, хранятся в файлах конфигурации: .bashrc, .bash_profile, .bash_login, .profile или в других файлах, размещенных в директории пользователя.

    3. Системные переменные окружения

    Эти переменные доступны во всей системе, для всех пользователей. Они загружаются при старте системы из системных файлов конфигурации: /etc/environment, /etc/profile, /etc/profile.d/ /etc/bash.bashrc.

    Конфигурационные файлы переменных окружения Linux

    Здесь мы кратко рассмотрим различные конфигурационные файлы, перечисленные выше, которые используются для настройки переменных окружения для всей системы или конкретного пользователя.

    .bashrc

    Это файл переменных конкретного пользователя. Загружается каждый раз, когда пользователь создает терминальный сеанс, то есть проще говоря, открывает новый терминал. Все переменные окружения, созданные в этом файле вступают в силу каждый раз когда началась новая терминальная сессия.

    .bash_profile

    Эти переменные вступают в силу каждый раз когда пользователь подключается удаленно по SSH. Если этот файл отсутствует система будет искать .bash_login или .profile.

    /etc/environment

    Этот файл для создания, редактирования и удаления каких-либо переменных окружения на системном уровне. Переменные окружения, созданные в этом файле доступны для всей системы, для каждого пользователя и даже при удаленном подключении.

    /etc/bash.bashrc

    Системный bashrc. Этот файл выполняется для каждого пользователя, каждый раз когда он создает новую терминальную сессию. Это работает только для локальных пользователей, при подключении через интернет, такие переменные не будут видны.

    /etc/profile

    Системный файл profile. Все переменные из этого файла, доступны любому пользователю в системе, только если он вошел удаленно. Но они не будут доступны, при создании локальной терминальной сессии, то есть если вы просто откроете терминал.

    Все переменные окружения Linux созданные с помощью этих файлов, могут быть удаленны всего лишь удалением их оттуда. Только после каждого изменения, нужно либо выйти и зайти в систему, либо выполнить эту команду:

    Добавление пользовательских и системных переменных окружения в Linux

    Теперь, когда вы знаете немного теории, перейдем к практике. Локальные переменные окружения в Linux можно создавать следующими командами:

    var=значение
    export var=значение

    Эти переменные будут доступны только для текущей терминальной сессии.

    Для удаления переменных окружения можно использовать несколько команд:

    1. Использование env

    По умолчанию с помощью env можно посмотреть все установленные переменные среды. Но с опцией -i она позволяет временно удалить все переменные оболочки и выполнить команду без переменных.

    $ env -i [переменная=значение] команда

    Var — это любая переменная, которую вы хотите передать этой команде.

    Такая команда запустит оболочку вообще без переменных окружения:

    После запуска такого окружения, не будет доступно никаких переменных, но после выхода все вернется на свои места.

    2. Использование unset

    Это другой способ удаления переменных окружения Linux. Unset удаляет переменную по имени до конца текущей сессии:

    3. Установить значение переменной в »

    Это самый простой способ удаления переменных окружения в Linux, устанавливая пустое значение переменной, вы удаляете ее до конца текущей сессии.

    Замечание: С помощью таких способов вы можете изменять значения системных или пользовательских переменных, но они будут актуальны только для текущего сеанса.

    Создание пользовательских и системных переменных окружения

    В этом разделе рассмотрим как установить и удалить системные и пользовательские переменные не только для текущего сеанса, а так чтобы эффект сохранялся после перезагрузки.

    1. Устанавливаем и удаляем локальные переменные в Linux

    Давайте создадим локальную переменную VAR и установим ей любое значение, затем удалим ее с помощью unset и убедимся что она удалена:

    VAR1=’Losst’
    echo $VAR1
    unset VAR1
    echo $VAR1

    Другой способ создать переменную — команда export. Удалим ее присвоив пустое значение:

    export VAR=’Losst’
    echo $VAR
    VAR=
    echo $VAR

    Теперь создадим переменную VAR2 также зададим ей значение. А потом временно удалим все локальные переменные выполнив env -i. Она запустит оболочку без каких-либо переменных. После ввода exit все переменные будут восстановлены.

    VAR2=’Losst’
    echo $VAR2
    env -i bash
    echo $VAR2

    Установка и удаление пользовательских переменных

    Отредактируйте файл .bashrc, в вашей домашней директории, добавив команду export, для экспортирования нужной переменной. Затем выполните команду source для применения изменений. Создадим, например, переменную CD:

    Добавьте такую строчку (o, затем вставить, затем Esc и :wq):

    export CD=’This is Losst Home’

    Теперь осталось обновить конфигурацию:

    source .bashrc
    echo $CD

    Для удаления этой переменной просто удалите ее из .bashrc.

    Теперь добавим переменную окружения с помощью .bash_profile. Эта переменная, как вы уже знаете будет доступна только при удаленном входе:

    export VAR2=’This is Losst Home’

    И выполните эти команды, чтобы применить изменения и проверить добавление переменной:

    source .bash_profile
    echo $VAR2

    Переменная недоступна, так как вы создали локальную терминальную сессию, теперь подключитесь по ssh:

    Читайте также:  Web камеры для линукс

    ssh user@localhost
    echo $VAR2

    Удалить эту переменную окружения можно так же как и в предыдущем случае, удалив ее из файла.

    Замечание: Эти переменные доступны всегда, но не для всех пользователей.

    Установка и удаление системных переменных окружения

    Создадим переменную, доступную для всех пользователей, во всех терминальных сессиях, кроме удаленных, добавлением ее в /etc/bash.profile:

    vi /etc/bash.profile
    export VAR=’This is system-wide variable’

    Теперь эта переменная доступна для всех пользователей, во всех терминалах:

    echo $VAR
    sudo su
    echo $VAR
    su —
    echo $VAR

    Если вы хотите сделать переменную окружения доступной для всех пользователей, которые подключаются к этой машине удаленно, отредактируйте файл /etc/profile:

    export VAR1=’This is system-wide variable for only remote sessions’

    Обновите конфигурацию, и проверьте доступность переменной, она будет доступна только удаленно:

    source /etc/profile
    echo $VAR1

    Если нужно добавить переменную окружения в Linux, так чтобы она была доступна и удаленно, и для локальных сессий, экспортируйте ее в /etc/environment:

    export VAR12=’I am available everywhere’

    source /etc/environment
    echo $VAR12
    sudo su
    echo $VAR12
    exit
    ssh localhost
    echo $VAR12

    Как видите, переменная доступна и для локальных пользователей и удаленно.

    Выводы

    С помощью этих нескольких способов мы можем изменить переменные окружения. Если вы знаете другие интересные способы это сделать, поделитесь в комментариях!

    Оцените статью:

    Об авторе

    Основатель и администратор сайта losst.ru, увлекаюсь открытым программным обеспечением и операционной системой Linux. В качестве основной ОС сейчас использую Ubuntu. Кроме Linux, интересуюсь всем, что связано с информационными технологиями и современной наукой.

    11 комментариев

    /etc/profile
    «Все переменные из этого файла, доступны любому пользователю в системе, только если он вошел удаленно. »
    А что значит вошел удаленно? Через SSH?

    Написанное справедливо для всех современных дистрибутивов?

    Здравствуйте! Скажите можно ли запускать видео на 2-м мониторе добавив переменную в ./bashrc к примеру:
    env DISPLAY=0:1 totem (ну или другой проигрыватель)?
    или лучше использовать:
    export DISPLAY=0:1 totem

    Думаю: лучше env -i DISPLAY=0:1 totem в

    /.xinputrc, только вот с totem’ом могут быть те ещё грабли — тут уже не подскажу. а вот если там же, в

    /.xinputrc, будет export DISPLAY=0:1, то это подействует и на X-сервер. Ну, и ваше export DISPLAY=0:1 totem — это уже ошибка, тогда уж в две строки:
    export DISPLAY=0:1
    totem
    Но, totem будет запускаться вместе с x-сервером. может проще создать alias с env в

    /.bashrc? А может в totem есть ещё какие опции, как, например, в mplayer -display?

    «. добавлением ее в /etc/bash.profile
    .
    Затем обновляем:
    source /etc/bash.bashrc»
    я думал обновлять надо отредактированный файл, или это опечатка?

    Позволю себе добавить к вышесказанному:
    VAR=1 # переменная видна только для ТЕКУЩЕГО процесса
    $VAR
    >> 1: команда не найдена
    set | grep VAR # set без параметров отобразит ВСЕ (как локальные так и глобальные) переменные
    >> VAR=1
    env | grep VAR
    >>
    bash # запустим дочерний процесс
    $VAR # наша переменная в нем не видна
    >>
    exit # выходим
    $VAR # переменная сохранилась в родительском процессе
    >> 1: команда не найдена
    VAR=2 bash # установим переменную для дочернего процесса
    $VAR # она видна в дочернем процессе
    >> 2: команда не найдена
    set | grep VAR # так же видна в set
    >> VAR=2
    exit # закрываем дочерний процесс
    $VAR # в родительском процессе хранится свой экземпляр переменной
    >> 1: команда не найдена
    unset VAR
    $VAR
    >> # значение переменной сброшено

    export VAR=3 # переменная видна в ТЕКУЩЕМ и ДОЧЕРНИХ процессах
    $VAR
    >> 3: команда не найдена
    set | grep VAR
    >> VAR=3
    env | grep VAR
    >> VAR=3
    printenv | grep VAR
    >> VAR=3
    bash # запускаем дочерний процесс
    env | grep VAR
    $VAR # переменная доступна
    >> 3: команда не найдена
    VAR=2 # можем изменить ее значение
    $VAR
    >> 2: команда не найдена
    unset VAR # сбросим значение
    $VAR
    >> # переменная не определена
    exit
    $VAR
    >> 3: команда не найдена # родительский процесс хранит значение переменной после сброса в дочернем
    env | grep VAR
    >> VAR=3

    «Системный файл profile. Все переменные из этого файла, доступны любому пользователю в системе, только если он вошел удаленно. Но они не будут доступны, при создании локальной терминальной сессии, то есть если вы просто откроете терминал.» – неверно. Переменная будет доступна везде: в терминале, GUI программах, не важно. Только что проверял локально.

    /.профиль; а иногда ничего этого не происходит и

    /.профиль не читается. »
    Поэтому поведение еще зависит и от системы. Для моего Debian все происходит так, вошел в систему через графическую оболочку, запустил Терминал переменных окружения нет, в этой же консоли залогинился заново под этим же пользователем ( i mean su — UserName) или под другим но с вводом пароля переменные окружения считываются, т.е. Если в консоли пароль вводился, файлы в /etc/profile.d/ отработались(принудительный логин,ssh, все что требует ввода пароля в консоли), если не вводился то этих переменных окружения не будет.
    Но здесь есть особенности настройки именно в вашей ОС, они могут немного отличаться

    Уровень маскировки — seriyyy95@seriyyy95-pc 😀

    Источник

    Оцените статью