Về liên kết
Bạn thường không liên kết /usr/local/*
với /bin
, nhưng đây là một thực tế lịch sử. Nói chung, có một vài lý do "kỹ thuật" tại sao bạn không thể làm những gì bạn đề xuất.
Tạo liên kết đến các tệp thực thi /bin
có thể gây ra sự cố:
Có lẽ sự cảnh báo lớn nhất sẽ là nếu hệ thống của bạn có các gói được quản lý bởi một số loại quản lý gói như RPM, dpkg, APT, YUM, pacman, pkg_add, v.v. Trong những trường hợp này, bạn thường muốn để gói quản lý làm công việc của mình và quản lý thư mục như /sbin
, /bin
, /lib
, và /usr
. Một ngoại lệ /usr/local
thường là nơi an toàn để làm khi bạn thấy phù hợp trên hộp, mà không phải lo lắng về trình quản lý gói can thiệp vào các tệp của bạn.
Thông thường các lần thực thi được xây dựng cho /usr/local
sẽ có mã PATH này được mã hóa cứng vào các tệp thực thi của chúng. Cũng có thể có các tệp cấu hình được bao gồm trong /usr/local
quá trình cài đặt các ứng dụng này. Vì vậy, liên kết đến chỉ có thể thực thi có thể gây ra sự cố với các ứng dụng này khi tìm các .cfg
tệp sau này. Đây là một ví dụ về trường hợp như vậy:
$ strings /usr/local/bin/wit | grep '/usr/local'
/usr/local/share/wit
/usr/local/share/wit/
Vấn đề tương tự áp dụng cho việc tìm kiếm .cfg
tệp cũng có thể xảy ra với các tệp thực thi "người trợ giúp" mà ứng dụng chính cần chạy. Những điều này cũng sẽ cần phải được liên kết vào /usr/bin
, biết rằng điều này có thể có vấn đề và chỉ hiển thị khi bạn thực sự cố gắng thực thi ứng dụng được liên kết.
LƯU Ý: nói chung, tốt nhất là tránh sự cám dỗ để liên kết với một ứng dụng tắt /usr/bin
.
/etc/profile.d
Thay vào đó, sau đó tất cả người dùng cung cấp quản lý này, quản trị viên có thể dễ dàng thêm phần này $PATH
vào hộp của mọi người bằng cách thêm một tệp tương ứng trong /etc/profile.d
thư mục.
Một tệp như thế này , /etc/profile.d/maven.sh
:
PATH=$PATH:/usr/local/maven/bin
Bạn thường làm điều này với tư cách quản trị viên thay vì làm ô nhiễm tất cả các thiết lập của người dùng với điều này.
Sử dụng thay thế
Hầu hết các bản phân phối hiện cung cấp một công cụ khác gọi là alternatives
(Fedora / CentOS) hoặc update-alternatives
(Debian / Ubuntu) mà bạn cũng có thể sử dụng để lặp vào các $PATH
công cụ có thể nằm ngoài /bin
. Sử dụng các công cụ như thế này là tốt hơn vì chúng tuân thủ nhiều hơn những gì hầu hết các quản trị viên sẽ coi là "thực hành tiêu chuẩn" và do đó làm cho các hệ thống dễ dàng chuyển từ quản trị viên này sang quản trị viên khác.
Công cụ này thực hiện một điều tương tự trong việc tạo liên kết trong /bin
; nhưng nó quản lý việc tạo và hủy các liên kết này, do đó dễ hiểu hơn về thiết lập dự định của hệ thống khi được thực hiện thông qua một công cụ so với thực hiện trực tiếp như bạn đề xuất.
Ở đây tôi đang sử dụng hệ thống đó để quản lý Java của Oracle trên một hộp:
$ ls -l /etc/alternatives/ | grep " java"
lrwxrwxrwx. 1 root root 73 Feb 5 13:15 java -> /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.60-2.4.4.1.fc19.x86_64/jre/bin/java
lrwxrwxrwx. 1 root root 77 Feb 5 13:15 java.1.gz -> /usr/share/man/man1/java-java-1.7.0-openjdk-1.7.0.60-2.4.4.1.fc19.x86_64.1.gz
lrwxrwxrwx. 1 root root 70 Feb 5 13:19 javac -> /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.60-2.4.4.1.fc19.x86_64/bin/javac
lrwxrwxrwx. 1 root root 78 Feb 5 13:19 javac.1.gz -> /usr/share/man/man1/javac-java-1.7.0-openjdk-1.7.0.60-2.4.4.1.fc19.x86_64.1.gz
lrwxrwxrwx. 1 root root 72 Feb 5 13:19 javadoc -> /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.60-2.4.4.1.fc19.x86_64/bin/javadoc
lrwxrwxrwx. 1 root root 80 Feb 5 13:19 javadoc.1.gz -> /usr/share/man/man1/javadoc-java-1.7.0-openjdk-1.7.0.60-2.4.4.1.fc19.x86_64.1.gz
Bạn có thể thấy tác dụng của việc này:
$ type java
java is /usr/bin/java
$ readlink -f /usr/bin/java
/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.60-2.4.4.1.fc19.x86_64/jre/bin/java
0,02 đô la của tôi
/bin
Mặc dù việc tạo liên kết trong , mặc dù hợp lý, có thể sẽ bị nản lòng bởi hầu hết các sysadmin:
- Sẽ nhăn mặt vì nó được xem là tùy chỉnh và có thể dẫn đến nhầm lẫn nếu một quản trị viên khác được yêu cầu nhận hộp
- Có thể dẫn đến một hệ thống bị phá vỡ ở trạng thái trong tương lai do kết quả của tùy chỉnh "mong manh" này.
/opt
.