Linux: де зберігаються змінні середовища?


79

Якщо я вводжу в термінал,

export DISPLAY=:0.0

... де оболонка, що зберігає цю змінну середовища?

Я використовую Ubuntu 8.10. Я заглянув у файли ~ / .profile та / etc / profile і не можу знайти жодного сліду DISPLAY.


Відповіді:


114

Змінні середовища процесу існують під час виконання і не зберігаються в якомусь файлі чи близько того. Вони зберігаються у власній пам’яті процесу (саме там вони передаються дітям). Але у віртуальному файлі є

/ proc / pid / environment

Цей файл відображає всі змінні середовища, передані під час виклику процесу (якщо процес не перезаписав ту частину своєї пам'яті - більшість програм цього не роблять). Ядро робить їх видимими через цей віртуальний файл. Можна їх перелічити. Наприклад, щоб переглянути змінні процесу 3940, це можна зробити

cat /proc/3940/environ | tr '\0' '\n'

Кожна змінна відокремлюється двійковим нулем від наступної. tr замінює нуль на новий рядок.


11
Ядро не зберігає змінні середовища, вони зберігаються в користувацькому режимі. / proc / <pid> / environment може повернути неправильні значення, якщо блок середовища був перерозподілений.
atomice

1
@atomice У мене склалося враження, що ядро ​​зберігає їх і робить їх видимими для користувацьких програм, доступними для користувацьких програм. Чи environфайл відображає неправильні значення, якщо змінна середовища була змінена певним чином? Чи можете ви показати програму, яка це використовує?
Йоханнес Шауб - літ

14
Ядро зберігає їх у певному місці в користувацькому просторі, і саме це виставляє / proc / <pid> / environment. Однак якщо ви модифікуєте середовище в програмі за допомогою putenv або setenv, початковий блок середовища підлягає перерозподілу (для розміщення нової змінної). Нові змінні не відображатимуться у вихідних даних із / proc / <pid> / environment.
atomice

1
@atomice Отже, де залишиться нове оновлене середовище? Якою командою це показати?
Антоніо Ріццо,

1
@atomice: за якою віртуальною адресою вони зберігаються тоді? Це у випадку з x86_64.
user2284570

40

Введіть "set", і ви отримаєте список усіх поточних змінних. Якщо ви хочете, щоб щось зберігалося, помістіть це в ~ / .bashrc або ~ / .bash_profile (якщо ви використовуєте bash)


14

Якщо ви хочете застосувати середовище для загальносистемного використання, ви можете зробити це за допомогою /etc/environmentфайлу.


Питання в тому, де в ʀᴀᴍ.
user2284570

8
@ user2284570 де у питанні це вказано? Ви можете, будь ласка, детальніше розказати?
JohnnyQ

9

Він зберігається в процесі (оболонці), і оскільки ви його експортували, будь-які процеси, які обробляються, виникають.

Виконання вищезазначеного не зберігає його ніде у файловій системі, як-от / etc / profile. Щоб це сталося, ви повинні чітко вказати його там.


-8

Ця змінна не зберігається в якомусь сценарії. Це просто встановлюється сценаріями сервера X. Ви можете перевірити змінні середовища, встановлені на даний момент, за допомогою set .


На насправді, це встановлено з допомогою оболонки для Й клієнтів.
paxdiablo

Звичайно, це встановлюється сценаріями, які підносять X-сервер.
Едуард - Габріель Мунтеану
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.