На зв'язування
Ви зазвичай не пов'язують /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
.