Nơi tốt nhất để thiết lập các biến môi trường trên toàn hệ thống trên Linux là gì?


26

Tôi chỉ muốn thiết lập một biến môi trường toàn hệ thống, JAVA_HOMEcho tất cả người dùng, bao gồm cả người dùng root .

Yêu cầu:

  • người dùng bình thường có thể truy cập
  • có thể truy cập vào root
  • luôn được tải, không chỉ cho bash (gnome-terminal không bắt đầu bash theo mặc định)
  • để hoạt động trên Ubuntu, Debian và Red Hat tùy chọn
  • tuyệt vời nếu bổ sung có thể dễ dàng được kịch bản

Đối với hệ vỏ tương tác, hãy kiểm tra chủ đề ubfox này .
quickshiftin

Câu trả lời:


26

Vì không ai thêm câu trả lời đầy đủ ở đây là những gì tôi hiện đang xem là tốt nhất, ít nhất là đối với Ubuntu nhưng tôi sẵn sàng điều chỉnh câu trả lời cho các nền tảng * nix khác.

# **create**: /etc/profile.d/java.sh
export JAVA_HOME=/usr/lib/jvm/default-java

Các tùy chọn khác đã được xem xét nhưng loại trừ:

  • /etc/environment hoạt động nhưng khó bảo trì hơn vì các công cụ khác hoặc mọi người có thể chỉnh sửa nó.
  • /etc/profile - giống như trên

11

Trên Debian / Ubuntu sẽ là / etc / môi trường

Tôi không biết Red Hat tương đương.


1
Tôi tin rằng / etc / môi trường không được chấp nhận
Pat James

@PatJames bạn có thêm thông tin về điều này? Tôi đã thử / etc / môi trường không được tải cho root ngay cả sau khi tôi khởi động lại máy.
sorin

@SorinSbarnea một số thông tin có ở đây: wiki.debian.org/Locale chỉ / etc / môi trường không còn được sử dụng trong các bản phát hành mới hơn
Pat James

1
Trang đó chỉ nói rằng bạn không nên nhưng biến địa phương các biến liên quan trong /etc/environment. Xem thêm serverfault.com/a/584072/26218
Lưu lượng

11

Tôi không hiểu tại sao bạn loại trừ / etc / profile. Đó là vị trí chính xác.


9

Một số người đã trả lời rằng nó /etc/environmentbị lỗi và / hoặc không được sử dụng trong Debian nữa, và điều này là (như ở phiên bản 7) sai.

Tệp thực sự được đọc bởi PAM - cụ thể pam_env(8), thông qua mặc định cho envfilecờ. Trang này cũng nêu mặc định này trong phần PHIM.

Các wiki được trích dẫn (đặc biệt là miền địa phương) chỉ nêu rõ rằng các biến môi trường dựa trên miền địa phương hiện có nghĩa là được đặt trong /etc/profile. Tuyên bố của họ "(trong các phiên bản cũ hơn của Debian, cũng / etc / môi trường)" là mơ hồ và nằm trong bối cảnh của các địa phương.

Một grep nhanh thông qua các /etc/pam.dchương trình:

root@box:/etc/pam.d# grep pam_env.so *
atd:auth        required        pam_env.so
cron:session       required   pam_env.so
cron:session       required   pam_env.so envfile=/etc/default/locale
login:session       required   pam_env.so readenv=1
login:session       required   pam_env.so readenv=1 envfile=/etc/default/locale
sshd:auth       required     pam_env.so # [1]
sshd:auth       required     pam_env.so envfile=/etc/default/locale
su:session       required   pam_env.so readenv=1
su:session       required   pam_env.so readenv=1 envfile=/etc/default/locale

Những dòng cấu hình đó là phụ gia, và như là dòng đầu tiên bị thiếu envfile, do đó nó được mặc định là /etc/environment.

Tất cả điều này, tất nhiên, phụ thuộc vào bất kỳ nhị phân nào bạn đang sử dụng ( crond, shell đăng nhập, v.v.) được biên dịch theo PAM.

Cuối cùng, điều này ngụ ý rằng các hệ thống khác sử dụng PAM (ví dụ RedHat), hoạt động tương tự, như có thể thấy trong trang chủ tương ứng của nó.


2

Một lưu ý phụ: Hãy nhìn vào Môi trường Mô-đun . Tôi sử dụng điều này mỗi khi tôi phải cung cấp một môi trường UNIX phức tạp, có phiên bản, tự mở rộng, ngắn gọn cho hàng chục hoặc hàng trăm người dùng. Nó chủ yếu được sử dụng trên các môi trường HPC đa người dùng quy mô lớn. Chỉ sử dụng nó cho một biến cụ thể chắc chắn là quá kỹ thuật, nhưng nó thực sự là một công việc tuyệt vời khi bạn cần nhiều hơn một vài gói phần mềm và môi trường của chúng.


1

/etc/profilenên làm việc. Tôi đã thử nghiệm ngay bây giờ để chắc chắn, đưa export SOMETEST=1234vào /etc/profilevà sau khi đăng nhập echo $SOMETESTlại cho tôi 1234như mong đợi. Cũng từgnome-terminal



0

Bạn không thể sử dụng bất kỳ ~ tập tin cụ thể trong trường hợp này. vì thế....

/etc/profilesẽ là nơi thích hợp cho nó trong trường hợp này. Người dùng đăng nhập hiện tại phải có một phiên đăng nhập mới, nhưng điều này không phải là vấn đề lớn.

@ wk01: /etc/profiletheo mặc định không được tải bởi trình bao nonlogin. .bashrc có lẽ bạn đang tải nó ...

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.