ในการเชื่อมโยง
โดยทั่วไปคุณไม่ได้เชื่อมโยง/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
คุณควรเพิ่มแพคเกจภายนอกภายใต้