Na linkowanie
Ogólnie nie łączysz /usr/local/*
z /bin
, ale jest to raczej praktyka historyczna. Ogólnie istnieje kilka „technicznych” powodów, dla których nie możesz zrobić tego, co sugerujesz.
Tworzenie linków do plików wykonywalnych w /bin
może powodować problemy:
Prawdopodobnie największym zastrzeżeniem byłoby, jeśli system ma pakiety zarządzane przez jakiegoś menedżera pakietów, takiego jak RPM, dpkg, APT, YUM, pacman, pkg_add itp. W takich przypadkach zazwyczaj będziesz chciał pozwolić pakietowi menedżer wykonywać swoje zadania i zarządzać katalogi takie jak /sbin
, /bin
, /lib
, i/usr
. Jedynym wyjątkiem może być /usr/local
bezpieczne miejsce, które uważasz za stosowne, bez obawy, że menedżer pakietów zakłóci twoje pliki.
Często skonstruowane pliki wykonywalne /usr/local
będą miały na stałe zapisaną PATH w swoich plikach wykonywalnych. Mogą również istnieć pliki konfiguracyjne, które są /usr/local
częścią instalacji tych aplikacji. Zatem połączenie tylko z plikiem wykonywalnym może powodować problemy z wyszukiwaniem .cfg
plików przez aplikacje później. Oto przykład takiego przypadku:
$ strings /usr/local/bin/wit | grep '/usr/local'
/usr/local/share/wit
/usr/local/share/wit/
Ten sam problem, który dotyczy wyszukiwania .cfg
plików, może również wystąpić w przypadku plików wykonywalnych „pomocniczych”, które musi uruchomić główna aplikacja. Te również będą musiały być połączone /usr/bin
, wiedząc, że może to być problematyczne i pojawiają się tylko wtedy, gdy faktycznie próbujesz uruchomić połączoną aplikację.
UWAGA: ogólnie najlepiej jest unikać pokusy łączenia się z jednorazowymi aplikacjami /usr/bin
.
/etc/profile.d
Zamiast tego wszyscy użytkownicy zapewniają to zarządzanie, administrator może bardzo łatwo dodać to do wszystkich w $PATH
polu, dodając odpowiedni plik w /etc/profile.d
katalogu.
Plik taki jak ten /etc/profile.d/maven.sh
:
PATH=$PATH:/usr/local/maven/bin
Generalnie robisz to jako administrator, zamiast zanieczyszczać tym konfiguracje wszystkich użytkowników.
Korzystanie z alternatyw
Większość dystrybucji zawiera teraz inne narzędzie o nazwie alternatives
(Fedora / CentOS) lub update-alternatives
(Debian / Ubuntu), którego można również użyć do zapętlenia $PATH
narzędzi, które mogą znajdować się poza /bin
. Preferowane jest korzystanie z takich narzędzi, ponieważ są one bardziej zgodne z tym, co większość administratorów uważa za „standardową praktykę”, a tym samym ułatwia przekazywanie systemów od jednego administratora do drugiego.
To narzędzie działa podobnie do tworzenia linków /bin
; ale zarządza tworzeniem i niszczeniem tych łączy, więc łatwiej jest zrozumieć zamierzoną konfigurację systemu, gdy jest wykonywana za pomocą narzędzia, a nie bezpośrednio, jak sugerujesz.
Tutaj używam tego systemu do zarządzania Javą Oracle na pudełku:
$ 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
Możesz zobaczyć efekty tego:
$ 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
Moje 0,02 $
Udostępnianie linków /bin
, choć prawdopodobne, byłoby wysoce zniechęcone przez większość sysadminów:
- Byłby zdziwiony, ponieważ jest postrzegany jako niestandardowy i może prowadzić do zamieszania, jeśli inny administrator będzie musiał odebrać pudełko
- Może prowadzić do uszkodzenia systemu w przyszłym stanie w wyniku tego „delikatnego” dostosowania.
/opt
.