Linux: Các biến môi trường được lưu trữ ở đâu?


79

Nếu tôi nhập vào một thiết bị đầu cuối,

export DISPLAY=:0.0

... shell lưu trữ biến môi trường đó ở đâu?

Tôi đang sử dụng Ubuntu 8.10. Tôi đã xem các tệp ~ / .profile và / etc / profile và không tìm thấy dấu vết của HIỂN THỊ.


Câu trả lời:


114

Các biến môi trường của một quy trình tồn tại trong thời gian chạy và không được lưu trữ trong một số tệp hoặc lâu hơn. Chúng được lưu trữ trong bộ nhớ riêng của quá trình (đó là nơi chúng được tìm thấy để truyền lại cho trẻ em). Nhưng có một tệp ảo trong

/ proc / pid / environ

Tệp này hiển thị tất cả các biến môi trường đã được chuyển khi gọi tiến trình (trừ khi tiến trình ghi đè lên phần bộ nhớ của nó - hầu hết các chương trình thì không). Kernel làm cho chúng hiển thị thông qua tệp ảo đó. Người ta có thể liệt kê chúng. Ví dụ: để xem các biến của quy trình 3940, người ta có thể làm

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

Mỗi biến được phân định bằng số 0 nhị phân với biến tiếp theo. tr thay thế số 0 thành một dòng mới.


11
Kernel không lưu trữ các biến môi trường, chúng được lưu trữ trong chế độ người dùng. / proc / <pid> / environ có thể trả về các giá trị sai nếu khối môi trường đã được phân bổ lại.
atomice

1
@atomice Tôi có ấn tượng rằng hạt nhân lưu trữ chúng và làm cho chúng hiển thị với các chương trình người dùng, có thể ghi vào các chương trình người dùng. Doesthe environtập tin đại diện cho các giá trị sai nếu một biến môi trường đã thay đổi một cách định nghĩa? Bạn có thể hiển thị một chương trình khai thác điều đó?
Johannes Schaub - litb

14
Kernel lưu trữ chúng tại một vị trí cụ thể trong không gian người dùng và đó là những gì / proc / <pid> / environ bộc lộ. Tuy nhiên, nếu bạn sửa đổi môi trường trong một chương trình sử dụng putenv hoặc setenv, khối môi trường ban đầu có trách nhiệm được cấp phát lại (để chứa biến mới). Các biến mới sẽ không hiển thị trong đầu ra từ / proc / <pid> / environ.
atomice,

1
@atomice Vậy, môi trường cập nhật mới sẽ ở đâu? Lệnh nào để hiển thị nó?
Antonio Rizzo

1
@atomice: sau đó chúng được lưu trữ tại địa chỉ ảo nào? Đó là trong trường hợp của x86_64.
user2284570

40

Gõ "set" và bạn sẽ nhận được danh sách tất cả các biến hiện tại. Nếu bạn muốn thứ gì đó tồn tại lâu dài, hãy đặt nó vào ~ / .bashrc hoặc ~ / .bash_profile (nếu bạn đang sử dụng bash)


14

Nếu bạn muốn đặt môi trường để sử dụng trên toàn hệ thống, bạn có thể làm như vậy với /etc/environmenttệp.


Câu hỏi là về vị trí trong ʀᴀᴍ.
dùng2284570

8
@ user2284570 ở đâu trong câu hỏi chỉ định điều đó? Bạn có thể vui lòng nói rõ hơn?
JohnnyQ

9

Nó được lưu trữ trong process (shell) và kể từ khi bạn xuất nó, bất kỳ process nào xử lý sẽ sinh ra.

Làm như trên không lưu trữ nó ở bất kỳ đâu trong hệ thống tệp như / etc / profile. Bạn phải đặt nó ở đó một cách rõ ràng để điều đó xảy ra.


-8

Biến đó không được lưu trữ trong một số tập lệnh. Nó chỉ đơn giản được thiết lập bởi các tập lệnh máy chủ X. Bạn có thể kiểm tra các biến môi trường hiện được thiết lập bằng cách sử dụng set .


Trên thực tế, nó được thiết lập bởi shell cho các máy khách X.
paxdiablo 10/02/09

Tất nhiên, nó được thiết lập bởi các tập lệnh đưa máy chủ X lên.
Eduard - Gabriel Munteanu 10/02/09
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.