Symlink
添加到路徑與從 /bin 連結
我們的系統管理員在伺服器上安裝了一個軟體應用程序 (Maven),並告訴每個人將該
/usr/local/maven/bin/
文件夾添加到他們的路徑中。
/bin
我認為從文件夾(或每個人在其路徑中的其他文件夾)中連結該文件夾中的幾個程序可能會更方便,如下所示:ln -s /usr/local/maven/bin/* /bin
它是否正確?我的建議有一些隱藏的副作用嗎?
關於連結
您通常不
/usr/local/*
與連結/bin
,但這更像是一種歷史做法。一般來說,有一些“技術”原因導致您無法按照您的建議進行操作。在其中創建執行檔的連結
/bin
可能會導致問題:
- 可能最大的警告是,如果您的系統正在由某種包管理器(例如 RPM、dpkg、APT、YUM、pacman、pkg_add 等)管理包。在這些情況下,您通常希望讓包manager 完成其工作並管理目錄,例如
/sbin
、/bin
、/lib
和/usr
。一個例外是/usr/local
,這通常是一個安全的地方,可以按照您認為合適的方式進行操作,而不必擔心包管理器會干擾您的文件。- 通常,建構的執行檔
/usr/local
會將這個 PATH 硬編碼到它們的執行檔中。/usr/local
作為這些應用程序安裝的一部分,還可能包含一些配置文件。因此,僅連結到執行檔可能會導致這些應用程序.cfg
稍後查找文件時出現問題。這是這種情況的一個例子:$ strings /usr/local/bin/wit | grep '/usr/local' /usr/local/share/wit /usr/local/share/wit/
- 適用於查找
.cfg
文件的相同問題也可能發生在主應用程序需要執行的“幫助”執行檔中。這些也需要連結到/usr/bin
,知道這可能是有問題的,並且僅在您實際嘗試執行連結的應用程序時才會顯示。**注意:**一般來說,最好避免連結到
/usr/bin
./etc/profile.d
與其讓所有使用者都提供此管理,管理員可以
$PATH
通過在目錄中添加相應的文件,輕鬆地將其添加到盒子上的每個人/etc/profile.d
。像這樣的文件,
/etc/profile.d/maven.sh
:PATH=$PATH:/usr/local/maven/bin
您通常以管理員身份執行此操作,而不是以此污染所有使用者的設置。
使用替代品
大多數發行版現在提供了另一個工具,稱為
alternatives
(Fedora/CentOS) 或update-alternatives
(Debian/Ubuntu),您也可以使用它來循環進入$PATH
可能在/bin
. 最好使用此類工具,因為這些工具更符合大多數管理員認為的“標準做法”,因此更容易將系統從一個管理員移交給另一個管理員。
/bin
這個工具在;中創建連結時做類似的事情 但它管理這些連結的創建和銷毀,因此通過工具完成與您建議的直接完成相比,更容易理解系統的預期設置。在這裡,我使用該系統在一個盒子上管理 Oracle 的 Java:
$ 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
你可以看到這樣的效果:
$ 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 美元
在 中建立連結
/bin
,雖然看似合理,但可能會受到大多數係統管理員的強烈反對:
- 會被皺眉,因為它被視為自定義,如果需要其他管理員拿起盒子,可能會導致混亂
- 由於這種“脆弱”的定制,可能會導致系統在未來狀態下崩潰。