Symlink

添加到路徑與從 /bin 連結

  • October 3, 2017

我們的系統管理員在伺服器上安裝了一個軟體應用程序 (Maven),並告訴每個人將該/usr/local/maven/bin/文件夾添加到他們的路徑中。

/bin我認為從文件夾(或每個人在其路徑中的其他文件夾)中連結該文件夾中的幾個程序可能會更方便,如下所示:

ln -s /usr/local/maven/bin/* /bin

它是否正確?我的建議有一些隱藏的副作用嗎?

關於連結

您通常不/usr/local/*與連結/bin,但這更像是一種歷史做法。一般來說,有一些“技術”原因導致您無法按照您的建議進行操作。

在其中創建執行檔的連結/bin可能會導致問題:

  1. 可能最大的警告是,如果您的系統正在由某種包管理器(例如 RPM、dpkg、APT、YUM、pacman、pkg_add 等)管理包。在這些情況下,您通常希望讓包manager 完成其工作並管理目錄,例如/sbin/bin/lib/usr。一個例外是/usr/local,這通常是一個安全的地方,可以按照您認為合適的方式進行操作,而不必擔心包管理器會干擾您的文件。
  2. 通常,建構的執行檔/usr/local會將這個 PATH 硬編碼到它們的執行檔中。/usr/local作為這些應用程序安裝的一部分,還可能包含一些配置文件。因此,僅連結到執行檔可能會導致這些應用程序.cfg稍後查找文件時出現問題。這是這種情況的一個例子:
$ strings /usr/local/bin/wit | grep '/usr/local'
/usr/local/share/wit
/usr/local/share/wit/
  1. 適用於查找.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,雖然看似合理,但可能會受到大多數係統管理員的強烈反對:

  1. 會被皺眉,因為它被視為自定義,如果需要其他管理員拿起盒子,可能會導致混亂
  2. 由於這種“脆弱”的定制,可能會導致系統在未來狀態下崩潰。

引用自:https://unix.stackexchange.com/questions/116508