Sau khi cài đặt một số chương trình /opt/xxx/bin
, tôi muốn thêm /opt/xxx/bin
vào hệ thống $PATH
cho 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/bin
vào hệ thống $PATH
cho 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_env
mô-đun (trong auth
phần hoặc trong session
phầ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/profile
như 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>/bin
mà 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/.profile
mà 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 /opt
trong 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/.*/bin
vì đườ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/.profile
hơn /etc/profile
.
Một lưu ý nhỏ: /etc/.profile
tương ứng $HOME/profile
khô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ẹ bash
giú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ó $PATH
biế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
PATH
cà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/bin
sẽ không hoạt động ở đó).
/etc/profile
phải cũng không~/.profile
được thực thi bởi shell không đăng nhập.