Cách thêm đường dẫn đến hệ thống $ PATH cho tất cả trình bao không đăng nhập của người dùng cho debian


7

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:


8

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).


2

Đườ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.


Không /etc/profilephải cũng không ~/.profileđược thực thi bởi shell không đăng nhập.
Yang Bo

Bạn nói đúng, câu trả lời của tôi không hoàn toàn liên quan đến câu hỏi của bạn. Tôi chỉ mô tả những gì tôi đã làm để có được mọi thứ đang chạy. Nếu bạn không sử dụng X, cách tiếp cận của tôi sẽ thực hiện những gì bạn muốn vì mọi shell không đăng nhập là một quá trình con của shell đăng nhập. Nếu bạn đang sử dụng X, bạn có thể nguồn tập lệnh nhỏ mà tôi đã đăng trong tệp init của trình quản lý hiển thị của bạn (trong hầu hết các trường hợp 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.
dùng1146332

1

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 ở đó).


0

Đường dẫn mặc định có thể được đặt trong / etc / profile

Nhưng tôi chỉ tìm kiếm trên hệ thống Ubuntu của mình và nó được đặt trong / etc / môi trường


2
/etc/profilekhông được thực thi bởi shell không đăng nhập.
Yang Bo
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.