जोड़ने पर
आप आमतौर पर के /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
(फेडोरा / सेंटोस) या update-alternatives
(डेबियन / उबंटू) कहा जाता है, जिसका उपयोग आप उन $PATH
टूल्स में लूप के लिए भी कर सकते हैं, जो बाहर हो सकते हैं /bin
। इन जैसे साधनों का उपयोग करना बेहतर होता है क्योंकि ये अधिक से अधिक पालन करते हैं जो कि सबसे अधिक प्रचलित "मानक अभ्यास" पर विचार करेंगे और इसलिए सिस्टम को एक व्यवस्थापक से दूसरे में सौंपना आसान बनाता है।
यह उपकरण लिंक बनाने में एक समान काम करता है /bin
; लेकिन यह इन लिंक्स के निर्माण और विनाश का प्रबंधन करता है, इसलिए जब आप सुझाव दे रहे हों, तो एक उपकरण के माध्यम से सीधे सिस्टम के इच्छित सेटअप को समझना आसान हो जाता है।
यहाँ मैं ओरेकल के जावा को एक बॉक्स पर प्रबंधित करने के लिए उस प्रणाली का उपयोग कर रहा हूं:
$ 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
हालांकि, प्रशंसनीय के रूप में लिंक बनाना , ज्यादातर sysadmins द्वारा अत्यधिक हतोत्साहित किया जाएगा:
- क्योंकि यह कस्टम के रूप में देखा जाता है और किसी अन्य व्यवस्थापक को बॉक्स लेने के लिए आवश्यक होने पर भ्रम की स्थिति पैदा हो सकती है
- इस "नाजुक" अनुकूलन के परिणामस्वरूप भविष्य की स्थिति में एक सिस्टम टूट सकता है।
/opt
।