На зв'язування
Ви зазвичай не пов'язують /usr/local/*з /bin, але це більше історичної практики. Загалом, є кілька "технічних" причин, чому ви не можете робити те, що пропонуєте.
Створення посилань на виконувані файли /binможе спричинити проблеми:
Напевно, найбільшим застереженням буде, якщо у вас система має пакети, якими керує якийсь менеджер пакунків, такий як RPM, dpkg, APT, YUM, pacman, pkg_add тощо. У цих випадках, як правило, ви хочете відпустити пакет менеджер робити свою роботу і керувати каталогами , таких як /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; але він керує створенням та знищенням цих посилань, тому легше зрозуміти передбачувану установку системи, якщо це зроблено за допомогою інструменту проти зробленого безпосередньо, як ви пропонуєте.
Ось я використовую цю систему для управління Java Oracle на коробці:
$ 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, хоч і правдоподібне, можливо, буде сильно відштовхувати більшість системних адміністраторів:
- Нахмуриться, оскільки це розглядається як звичайне і може призвести до плутанини, якщо інший адміністратор потрібен, щоб забрати вікно
- Це може призвести до розбиття системи в майбутньому стані в результаті цього "крихкого" налаштування.
/opt.