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.