Tôi có thể có một số cài đặt phổ biến cho tất cả người dùng của mình không?
Tôi có thể có một số cài đặt phổ biến cho tất cả người dùng của mình không?
Câu trả lời:
Cũng như /etc/profile
những gì người khác đã đề cập, một số hệ thống Linux hiện sử dụng một thư mục /etc/profile.d/
; bất kỳ .sh
tập tin trong đó sẽ có nguồn gốc bởi /etc/profile
. Nó gọn gàng hơn một chút để giữ các công cụ môi trường tùy chỉnh của bạn trong các tệp này hơn là chỉ chỉnh sửa /etc/profile
.
Nếu LinuxOS của bạn có tệp này:
/etc/environment
Bạn có thể sử dụng nó để đặt các biến môi trường vĩnh viễn cho tất cả người dùng.
Trích xuất từ: http://www.sysadmit.com/2016/04/linux-variables-de-entorno-permanentes.html
Nếu tất cả các dịch vụ đăng nhập sử dụng PAM và tất cả các dịch vụ đăng nhập đều có session required pam_env.so
trong các /etc/pam.d/*
tệp cấu hình tương ứng , thì tất cả các phiên đăng nhập sẽ có một số biến môi trường được đặt theo quy định trongpam_env
tệp cấu hình.
Trên hầu hết các bản phân phối Linux hiện đại, tất cả đều ở đó theo mặc định - chỉ cần thêm các biến môi trường toàn cầu mong muốn của bạn vào /etc/security/pam_env.conf
.
Điều này hoạt động bất kể shell của người dùng và cũng hoạt động cho thông tin đăng nhập đồ họa (nếu xdm / kdm / gdm / lối vào / Lỗi được thiết lập như thế này).
echo foo>/home/me/bar
và khởi động lại (và đăng nhập lại), tệp đó sẽ không được tạo. (Có lẽ có một cách thanh lịch hơn để kiểm tra điều này, nhưng tôi muốn chắc chắn trước khi bình luận ở đây.)
Thật đáng ngạc nhiên, Unix và Linux thực sự không có nơi để đặt các biến môi trường toàn cầu. Điều tốt nhất bạn có thể làm là sắp xếp cho bất kỳ shell cụ thể nào để có một khởi tạo cụ thể theo trang web.
Nếu bạn đặt nó vào /etc/profile
, điều đó sẽ giải quyết mọi thứ cho hầu hết người dùng shell tương thích posix. Điều này có lẽ là "đủ tốt" cho các mục đích không quan trọng.
Nhưng bất cứ ai có vỏ csh
hoặc tcsh
vỏ sẽ không nhìn thấy nó và tôi không tin csh
có tệp khởi tạo toàn cầu.
/etc/environment
thực sự có vẻ như đặt các biến môi trường cho tôi, ngay cả với tư cách là người dùng root. Tôi biết đó /etc/environment
là trên amazon linux và ubfox. Tôi đã không kiểm tra xem có hoạt động với csh, tcsh hoặc zsh không.
Một số trích đoạn thú vị từ trang bash:
Khi bash được gọi dưới dạng shell đăng nhập tương tác hoặc dưới dạng shell không tương tác với
--login
tùy chọn, đầu tiên nó sẽ đọc và thực thi các lệnh từ tệp/etc/profile
, nếu tệp đó tồn tại. Sau khi đọc tệp đó, nó tìm kiếm~/.bash_profile
,~/.bash_login
và~/.profile
, theo thứ tự đó, đọc và thực thi các lệnh từ cái đầu tiên tồn tại và có thể đọc được. Các--noprofile
tùy chọn có thể được sử dụng khi vỏ được bắt đầu để ức chế hành vi này.
...
Khi một vỏ tương tác không phải là vỏ đăng nhập được khởi động, bash đọc và thực thi các lệnh từ/etc/bash.bashrc
và~/.bashrc
, nếu các tệp này tồn tại. Điều này có thể bị ức chế bằng cách sử dụng--norc
tùy chọn. Các--rcfile
tùy chọn tệp sẽ buộc bash đọc và thực thi các lệnh từ tệp thay vì/etc/bash.bashrc
và~/.bashrc
.
Vì vậy, hãy xem /etc/profile
hoặc /etc/bash.bashrc
, các tệp này là nơi thích hợp cho các cài đặt toàn cầu. Đặt một cái gì đó như thế này vào chúng để thiết lập một biến môi trường:
export MY_VAR=xxx
Sử dụng PAM là thực thi.
# modify the display PAM
$ cat /etc/security/pam_env.conf
# BEFORE: $ export DISPLAY=:0.0 && python /var/tmp/myproject/click.py &
# AFTER : $ python $abc/click.py &
DISPLAY DEFAULT=${REMOTEHOST}:0.0 OVERRIDE=${DISPLAY}
abc DEFAULT=/var/tmp/myproject
Mỗi tiến trình chạy trong nhân Linux đều nhận được môi trường riêng, duy nhất mà nó thừa hưởng từ cha mẹ của nó. Trong trường hợp này, cha mẹ sẽ là một vỏ chính (sinh ra một vỏ con) hoặc chương trình 'đăng nhập' (trên một hệ thống điển hình).
Vì môi trường của mỗi tiến trình được bảo vệ, không có cách nào để 'tiêm' một biến môi trường cho mọi quy trình đang chạy, vì vậy ngay cả khi bạn sửa đổi shell .rc / profile mặc định, nó sẽ không có hiệu lực cho đến khi mỗi tiến trình thoát ra và tải lại cài đặt khởi động của nó.
Xem trong / etc / để sửa đổi các biến khởi động mặc định cho bất kỳ shell cụ thể nào. Chỉ cần nhận ra rằng người dùng có thể (và thường làm) thay đổi chúng trong cài đặt cá nhân.
Unix được thiết kế để tuân theo người dùng, trong giới hạn.
NB : Bash không phải là vỏ duy nhất trên hệ thống của bạn. Hãy chú ý cẩn thận đến những gì liên kết tượng trưng / bin / sh thực sự trỏ đến. Trên nhiều hệ thống, đây thực sự có thể là dấu gạch ngang (theo mặc định, không có lời gọi đặc biệt) đúng POSIXLY. Do đó, bạn nên cẩn thận sửa đổi cả mặc định hoặc tập lệnh bắt đầu bằng / bin / sh sẽ không kế thừa mặc định toàn cầu của bạn. Tương tự, hãy cẩn thận để tránh cú pháp chỉ bash hiểu khi chỉnh sửa cả hai, aka avoiding bashisms
.