Sau khi cài đặt một số chương trình /opt/xxx/bin, tôi muốn thêm /opt/xxx/binvào hệ thống $PATHcho tất cả trình bao không đăng nhập của người dùng. Tôi nên làm gì?
Sau khi cài đặt một số chương trình /opt/xxx/bin, tôi muốn thêm /opt/xxx/binvào hệ thống $PATHcho tất cả trình bao không đăng nhập của người dùng. Tôi nên làm gì?
Câu trả lời:
Trên Debian và các hệ thống khác sử dụng PAM (hầu hết trong số chúng hiện nay), bạn có thể đặt các biến môi trường (bao gồm PATH) trong /etc/environment. Điều này sẽ làm việc cho bất kỳ phương thức đăng nhập nào sử dụng pam_envmô-đun (trong authphần hoặc trong sessionphần); trên Debian phải là tất cả trong số họ (ít nhất là những người cung cấp cách đăng nhập và chạy lệnh).
Đường dẫn mặc định có thể được đặt trong /etc/profilenhư Joe đã nói nhưng cũng có thể vào $HOME/.profile. Tôi cũng có rất nhiều gói tôi tự biên dịch (với thủ tục chung ./configure --prefix=/opt/<name>) được cài đặt trong /opt. Để thực hiện các nhị phân trong /opt/<name>/binmà không cần bất kỳ nỗ lực bổ sung nào, tôi đã thêm
OPTDIR=/opt
for i in $OPTDIR/* ; do
BINDIR=$i/bin
if [ -d $BINDIR ] ; then
if [ -z $PATH ] ; then
PATH=$BINDIR
else
PATH=$BINDIR:$PATH
fi
fi
done
export PATH
với tôi $HOME/.profilemà trong trường hợp của bạn sẽ được /etc/profile. Bây giờ ngay cả khi tôi cài đặt các gói /opttrong tương lai, tôi không phải lo lắng về việc truy cập các tệp nhị phân có liên quan /opt/.*/binvì đường dẫn được tự động thêm vào $PATH.
Bởi vì phần mềm bổ sung là không cần thiết ổn định, tôi thích $HOME/.profilehơn /etc/profile.
Một lưu ý nhỏ: /etc/.profiletương ứng $HOME/profilekhông được thực thi bởi shell mặc định của bạn mà bởi dash. Một biến thể nhẹ bashgiúp giảm tải trong quá trình khởi động.
Xsession). Bây giờ mọi tiến trình con của trình quản lý hiển thị đều có $PATHbiến được xác định . Trong hai trường hợp được mô tả, cách tiếp cận của tôi chắc chắn hoạt động và bạn có thể truy cập mọi nhị phân theo /opt/.*/bin.
Tôi đã tìm thấy câu trả lời tuyệt vời nhất trên serverfault của Gilles :
Làm cách nào để thiết lập PATH cho tất cả người dùng trong Debian?
Nơi đầu tiên đặt PATH là
/etc/login.defs. Có một thiết lập cho root và một thiết lập cho những người khác.Một nơi khác mà bạn có thể xác định các biến môi trường là
/etc/environment. Các cài đặt này sẽ áp dụng cho tất cả mọi người (bạn không thể viết mã shell tùy ý ở đó).Một nơi thứ ba nơi bạn có thể xác định các biến môi trường là
/etc/profile. Ở đó bạn có thể viết mã shell tùy ý. Nếu bạn muốn có cài đặt dành riêng cho người dùng, có tệp tương ứng cho mỗi người dùng~www-data/.profile. Nhưng điều này sẽ chỉ áp dụng cho đăng nhập tương tác giao diện điều khiển; đặc biệt nó sẽ không áp dụng cho các công việc định kỳ trừ khi chúng rõ ràng là nguồn/etc/profile.Nếu bạn chỉ cần
PATHcài đặt đó trong crontab của người dùng, bạn có thể viết nó ở đầu crontab. Lưu ý rằng bạn cần danh sách đầy đủ (PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/zend/bin), bạn không thể sử dụng thay thế biến (PATH=$PATH:/usr/local/zend/binsẽ không hoạt động ở đó).
/etc/profilephải cũng không~/.profileđược thực thi bởi shell không đăng nhập.