ควรวางโปรแกรมปฏิบัติการในพื้นที่ไว้ที่ไหน?


62

ฉันมีการปฏิบัติการสำหรับไคลเอนต์การควบคุมเวอร์ชัน perforce ( p4) ฉันไม่สามารถใส่มันได้/opt/localเพราะฉันไม่มีสิทธิ์รูต มีตำแหน่งมาตรฐานที่จำเป็นต้องวางไว้ใต้$HOMEหรือไม่?

ลำดับขั้นของระบบไฟล์มีข้อตกลงที่บอกว่าจำเป็นต้องมีโปรแกรมเรียกทำงาน / ไบนารีภายในเครื่อง$HOME/binหรือไม่?

ฉันไม่สามารถหาเช่นการประชุมที่กล่าวถึงในบทความวิกิพีเดียสำหรับ FHS

นอกจากนี้หากมีการประชุมแน่นอนฉันจะต้องรวมเส้นทางไปยัง$HOME/binไดเรกทอรีอย่างชัดเจนหรือตำแหน่งของbinไดเรกทอรีคืออะไร

คำตอบ:


64

/usr/local/binโดยทั่วไปถ้าไม่ใช่ระบบที่ติดตั้งและการบำรุงรักษาความต้องการไบนารีจะสามารถเข้าถึงได้ทั้งระบบเพื่อให้ผู้ใช้หลายคนก็ควรจะวางไว้โดยผู้ดูแลระบบเข้าสู่ มีลำดับชั้นที่สมบูรณ์ภายใต้/usr/localที่ใช้โดยทั่วไปสำหรับแพคเกจซอฟต์แวร์ที่รวบรวมและติดตั้งในเครื่อง

หากคุณเป็นผู้ใช้ไบนารี่เพียงรายเดียวการติดตั้งลงใน$HOME/binนั้นเป็นตำแหน่งที่เหมาะสมเนื่องจากคุณสามารถติดตั้งด้วยตัวคุณเองและคุณจะเป็นผู้ใช้บริการรายเดียว หากคุณรวบรวมแพคเกจซอฟต์แวร์จากแหล่งที่มาก็ควรสร้างลำดับชั้นท้องถิ่นบางส่วนหรือทั้งหมดใน$HOMEไดเรกทอรีของคุณ ลำดับชั้นในท้องถิ่นเต็มจะมีลักษณะเช่นนี้

  • $HOME/bin ไบนารีท้องถิ่น
  • $HOME/etc การกำหนดค่าระบบเฉพาะโฮสต์สำหรับไบนารีท้องถิ่น
  • $HOME/games ไบนารีเกมท้องถิ่น
  • $HOME/include ไฟล์ส่วนหัว Local C
  • $HOME/lib ห้องสมุดท้องถิ่น
  • $HOME/lib64 ไลบรารี 64 บิตโลคัล
  • $HOME/man คู่มือออนไลน์ท้องถิ่น
  • $HOME/sbin ไบนารีระบบโลคัล
  • $HOME/share ลำดับชั้นสถาปัตยกรรมอิสระ
  • $HOME/src รหัสที่มาท้องถิ่น

เมื่อรันconfigureคุณควรกำหนดลำดับชั้นโลคัลของคุณสำหรับการติดตั้งโดยระบุ$HOMEเป็นส่วนนำหน้าสำหรับค่าติดตั้งเริ่มต้น

./configure --prefix=$HOME

ตอนนี้เมื่อmake && make installมีการเรียกใช้ไบนารีรวบรวมแพคเกจหน้าคนและห้องสมุดจะถูกติดตั้งลง$HOMEในลำดับชั้นท้องถิ่นของคุณ หากคุณยังไม่ได้สร้าง$HOMEลำดับชั้นแบบโลคัลด้วยตนเองmake installจะสร้างไดเร็กทอรีที่ต้องการโดยแพ็กเกจซอฟต์แวร์

เมื่อติดตั้งใน$HOME/binที่คุณสามารถเพิ่ม$HOME/binที่คุณหรือโทรไบนารีโดยใช้แน่นอน$PATH $PATHการแจกแจงบางอย่างจะรวม$HOME/binอยู่ใน$PATHค่าเริ่มต้นของคุณ คุณสามารถทดสอบโดยการอย่างใดอย่างหนึ่งecho $PATHและเห็นว่า$HOME/binจะมีหรือใส่ไบนารีในและดำเนินการ$HOME/bin which binarynameถ้ามันกลับมาพร้อมกับ$HOME/bin/binarynameมันอยู่ใน $ PATH ของคุณโดยค่าเริ่มต้น


5
ตราบใดที่ $ HOME ไม่ได้อยู่ในระบบไฟล์ที่เมาท์ noexec / tmp / มักจะเมาท์ noexec ด้วย
ewanm89

3
สิ่งนี้ถูกต้องส่วนหนึ่งของ Filesystem Hierarchy Standard (FHS) pathname.com/fhs/pub/fhs-2.3.html#USRLOCALLOCALHIERARCHY
Patrick

29
$HOMEฉันจะไม่แนะนำให้ใช้ นี่จะทำให้ไดเรกทอรีภายในบ้านของคุณมีไดเรกทอรีจำนวนมากที่คุณไม่สนใจเลย ที่ต้องการมีman, libฯลฯ ในคน dir บ้าน? ผมค่อนข้างจะสร้างลำดับชั้นด้านล่างหรือ$HOME/bin $HOME/localที่เพิ่มไดเรกทอรีย่อยเดียวเท่านั้นใน dir บ้านของคุณแทนที่จะเป็นสิบ PATHสามารถดัดแปลงได้ง่ายที่จะรวมหรือ$HOME/bin/bin $HOME/local/bin
มาร์โก

18
ทางเลือกหนึ่งคือใช้ $ HOME / .local / {bin, lib, etc.} ตามที่ใช้โดยเช่นข้อมูลจำเพาะ XDG basedir ( มาตรฐาน. freedesktop.org/basedir-spec/basedir-spec-latest.html ) และ python ( python.org/dev/peps/pep-0370 )
janneb

4
@janneb ข้อมูลจำเพาะไดเรกทอรีฐาน XDG ที่คุณอ้างถึงเท่านั้น$HOME/.local/share(เวอร์ชัน 0.7, 24 พฤศจิกายน 2010)
Piotr Dobrogost

27

ในฐานะที่เป็นอูเธอร์กล่าวถึง , /usr/localมีวัตถุประสงค์เพื่อเป็นคำนำหน้าเป็นหลักซอฟต์แวร์ที่ติดตั้งโดยผู้ดูแลระบบในขณะที่/usrควรจะใช้สำหรับการติดตั้งซอฟต์แวร์จากแพคเกจการกระจายของ

แนวคิดเบื้องหลังนี้คือการหลีกเลี่ยงการปะทะกันกับซอฟต์แวร์แบบกระจาย (เช่นrpmและdebแพ็คเกจ) และมอบการดูแลเต็มรูปแบบแก่ผู้ดูแลระบบสำหรับคำนำหน้า "local"

ซึ่งหมายความว่าผู้ดูแลระบบสามารถติดตั้งซอฟต์แวร์ที่คอมไพล์เองได้ในขณะที่ยังคงใช้ distro เช่น debian

จาก FHS

ซอฟต์แวร์ที่วางใน / หรือ / usr อาจถูกเขียนทับโดยการอัพเกรดระบบ (แม้ว่าเราขอแนะนำว่าการกระจายอย่าเขียนทับข้อมูลใน / etc ภายใต้สถานการณ์เหล่านี้) ด้วยเหตุผลนี้จะต้องไม่วางซอฟต์แวร์ในพื้นที่นอก / usr / local โดยไม่มีเหตุผลที่ดี

เมื่อติดตั้งซอฟต์แวร์เฉพาะผู้ใช้uther แนะนำให้ใช้$HOMEเป็นคำนำหน้าเนื่องจากมั่นใจว่าคุณมีสิทธิ์ในการเขียน โดยส่วนตัวแล้วฉันรู้สึกว่ามัน$HOME/.localเป็นทางออกที่หรูหรามากขึ้นเพราะมันจะหลีกเลี่ยงความยุ่งเหยิงของคุณ (หวังว่า) ไดเรกทอรีที่ดีและเป็นระเบียบ!

$HOME/.local/shareถูกนำมาใช้แล้วในfreedesktop.org ข้อกำหนด XDG ฐานสารบบดังนั้นจึงไม่ใช้เวลามากที่จะจินตนาการเพิ่ม$HOME/.local/binไปของคุณ$PATHและทำให้$HOME/.local/libฯลฯ ในขณะที่คุณกำลังที่จะ

หากคุณไม่ต้องการให้คำนำหน้าของคุณเป็นไดเรกทอรีที่ซ่อนอยู่จริงๆคุณสามารถสร้างลิงก์สัญลักษณ์ได้อย่างง่ายดายเช่น:

ln -s .local ~/local

sidenote

เป็นที่น่าสังเกตว่า.config(ไม่ใช่.local/etc) เป็นค่าเริ่มต้นสำหรับ$XDG_CONFIG_HOMEใช้สำหรับไฟล์ปรับแต่งเฉพาะของผู้ใช้ ฉันควรจะชี้ให้เห็นว่าโชคไม่ดีที่ซอฟต์แวร์ส่วนใหญ่ละเว้น XDG และสร้างไฟล์กำหนดค่าได้ทุกที่ที่ต้องการ (โดยปกติจะอยู่ในรูทของ$HOME) นอกจากนี้โปรดทราบว่า$XDG_CONFIG_HOMEอาจไม่ได้รับการตั้งค่าหาก$HOME/.configต้องการค่าเริ่มต้น

น่าแปลกที่ไม่มีไดเรกทอรีที่สงวนไว้สำหรับไฟล์กำหนดค่าเริ่มต้นของการแจกจ่ายดังนั้นจึงไม่มีทางทราบว่าไฟล์ที่/etcจัดหาโดย distro หรือแก้ไขโดยผู้ดูแลระบบ


1
ฉันไม่สามารถเอ่ยถึง.localใน FHS
Daniel Serodio

@DanielSerodio มันอยู่ในข้อมูลจำเพาะของไดเรกทอรี XDG ซึ่งเป็นมาตรฐานใหม่ที่ได้รับความนิยม ดูunix.stackexchange.com/questions/316765/และsuperuser.com/questions/1170793/…
ivan_pozdeev

ข้อความด้านข้างเกี่ยวกับเรื่อง/etcนั้นมันน่ารำคาญจริงๆเมื่อจัดการเซิร์ฟเวอร์ที่มีผู้ดูแลระบบหลายคน - มันค่อนข้างยากที่จะติดตามการแก้ไขไฟล์ conf
naught101
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.