ในการเชื่อมโยง
โดยทั่วไปคุณไม่ได้เชื่อมโยง/usr/local/*กับ/binแต่นี่เป็นวิธีปฏิบัติทางประวัติศาสตร์มากกว่า โดยทั่วไปมีเหตุผล "เทคนิค" สองสามประการที่ทำให้คุณไม่สามารถทำสิ่งที่คุณแนะนำได้
การสร้างลิงก์ไปยังโปรแกรมเรียกทำงาน/binอาจทำให้เกิดปัญหา:
อาจเป็นข้อแม้ที่ใหญ่ที่สุดถ้าระบบของคุณมีแพ็คเกจที่จัดการโดยตัวจัดการแพ็กเกจบางประเภทเช่น RPM, dpkg, APT, YUM, pacman, pkg_add เป็นต้นในกรณีนี้คุณมักจะต้องการให้แพ็กเกจนั้น ผู้จัดการทำงานและจัดการไดเรกทอรีเช่น/sbin, /bin, และ/lib /usrข้อยกเว้นประการหนึ่ง/usr/localคือโดยปกติแล้วจะเป็นสถานที่ที่ปลอดภัยที่จะทำตามที่เห็นสมควรในกล่องโดยไม่ต้องกังวลเกี่ยวกับตัวจัดการแพคเกจที่รบกวนไฟล์ของคุณ
บ่อยครั้งที่ executables ที่สร้างขึ้นสำหรับ/usr/localจะมีเส้นทางนี้ฮาร์ดโค้ดลงใน executables ของพวกเขา อาจมีไฟล์กำหนดค่าที่รวมอยู่ใน/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
โดยทั่วไปคุณทำสิ่งนี้ในฐานะผู้ดูแลระบบแทนการสร้างมลพิษให้กับการตั้งค่าของผู้ใช้ทั้งหมดด้วยสิ่งนี้
การใช้ทางเลือก
distros ที่สุดในขณะนี้ให้เป็นอีกเครื่องมือหนึ่งที่เรียกว่า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แม้ว่าการเชื่อมโยงที่เชื่อถือได้นั้นน่าจะทำให้หมดกำลังใจมากโดย sysadmins ส่วนใหญ่:
- จะถูกขมวดคิ้วเนื่องจากมองว่าเป็นเรื่องที่กำหนดเองและอาจนำไปสู่ความสับสนได้หากผู้ดูแลระบบคนอื่นจำเป็นต้องหยิบกล่องขึ้นมา
- สามารถนำไปสู่ระบบที่จะแตกหักในสถานะในอนาคตอันเป็นผลมาจากการปรับแต่ง "เปราะบาง" นี้
/optคุณควรเพิ่มแพคเกจภายนอกภายใต้