อะไรคือความแตกต่างระหว่าง / etc และ / usr / local / etc


24

ฉันกำลังพัฒนาดีมอนที่ต้องการจัดเก็บข้อมูลแอปพลิเคชันจำนวนมากและฉันสังเกตเห็นว่าในระบบของฉัน (Fedora 15) มี/usr/local/etcไดเรกทอรีอยู่

ฉันตัดสินใจติดตั้งภูตของฉัน/usr/local/binและฉันต้องการที่สำหรับไฟล์ปรับแต่งของฉัน

ฉันไม่เห็นนี้ในวิกิพีเดีย นี่เป็นสิ่งที่ไม่ได้มาตรฐานหรือนี่เป็นสถานที่มาตรฐานสำหรับโปรแกรมที่ติดตั้ง/usr/local/binเพื่อจัดเก็บไฟล์กำหนดค่าหรือไม่

เหตุผลที่ฉันต้องการทำตลาดนี้กับผู้ดูแลระบบและการได้รับบางสิ่งเช่นความผิดนี้ไม่ใช่จุดขายที่ยอดเยี่ยม ...


2
มีเหตุผลอะไรที่ไม่ควรวางไว้ใต้โดยตรง/etc/myapp? หากฉันต้องการเปลี่ยนการตั้งค่ามันจะเป็นที่แรกที่ฉันจะมอง
new123456

@ new123456- ฉันชอบความคิดในการเก็บไฟล์ปรับแต่งใกล้กับไบนารี (เช่น/usr/local/bin-> /usr/local/etc) แต่การประชุมชนะในกรณีนี้
beatgammit

คำตอบ:


24

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

สิ่งนี้ช่วยให้แยกออกจากส่วนที่เหลือของการกระจาย

หากคุณกำลังพัฒนาชิ้นส่วนของซอฟต์แวร์สำหรับคนอื่น ๆ ที่คุณควรออกแบบเพื่อให้สามารถติดตั้งได้ทุกคนต้องการ แต่มันควรจะเริ่มต้นกับปกติFHSระบุไดเรกทอรีระบบเมื่อพวกเขาระบุคำนำหน้าจะเป็น/usr( /etc, /usr/binฯลฯ )

นั่น/usr/localคือเพื่อการใช้งานส่วนตัวของคุณไม่ควรเป็นที่เดียวในการติดตั้งซอฟต์แวร์ของคุณ

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


ใช่ฉันคิดว่าการอนุญาตให้ปรับแต่งนั้นดี แต่ฉันสงสัยว่า/usr/local/etcมาตรฐานสำหรับไฟล์ปรับแต่งสำหรับโปรแกรมประเภทนั้นหรือไม่
beatgammit

/ usr / local / etc เป็นสิ่งที่ฉันจะเลือกถ้าฉันสร้าง daemon ของคุณจากแหล่งที่มา แต่ / etc เป็นสถานที่ที่ใครบางคนจะเลือกถ้าพวกเขาบรรจุ daemon ของคุณด้วย debian หรือ Ubuntu
EightBitTony

4
จริงๆแล้วมาตรฐานของกนูเรียกร้องให้แพกเกจเริ่มต้นที่เส้นทางท้องถิ่นเนื่องจากคนที่สร้างมันจากแหล่งมักจะไม่ระบุที่ ดิสทริบิวชันจะเปลี่ยนเป็นพา ธ ที่ไม่ใช่โลคัลเมื่อแพ็กเกจ / สร้าง
psusi

@ psusi- ดีจุดฉันจะทำให้แน่ใจว่าจะเริ่มต้น บางทีฉันอาจตรวจพบเมื่อการติดตั้งทำให้ของฉันถูกเรียกใช้ในฐานะผู้ใช้รากหรือปกติ หากรูทฉันจะตั้งค่าเริ่มต้นเป็น / usr / local หากผู้ใช้ไปยังโฮมไดเร็กตอรี่ของผู้ใช้ ฉันจะเพิ่มการตั้งค่าด้วย
beatgammit

@ EightBitTony - มีแพลตฟอร์มอื่น ๆ ที่มีการประชุมที่แตกต่างกันหรือไม่? ฉันได้สร้างสคริปต์เริ่มต้นที่แตกต่างกันสำหรับแพลตฟอร์มที่แตกต่างกัน (พุ่งพรวด, systemd, init)
beatgammit

7

คำตอบสั้น ๆ

/ etc ถูกใช้โดยระบบปฏิบัติการของคุณสำหรับไฟล์การกำหนดค่า

/ usr / local / etc สามารถใช้สำหรับไฟล์ config ของคุณโดยคุณและซอฟต์แวร์ที่ติดตั้งเพิ่มเติมของคุณ


4

/usr/local/etcไม่ค่อยใช้ในโลก Linux แต่การตัดสินใจว่าจะตั้งค่าไฟล์เก็บไว้ใน/etc, /usr/local/etcหรือบางสถานที่อื่น ๆ โดยทั่วไปที่รวบรวมเวลา (และมักจะสามารถแทนที่ผ่านการเลือกบรรทัดคำสั่งหรือตัวแปรสภาพแวดล้อม) ไม่สำคัญว่าค่าเริ่มต้นคืออะไรเมื่อทำการคอมไพล์เพียงตรวจสอบให้แน่ใจว่าตั้งค่าได้ง่าย (โดยทั่วไปจะเป็นตัวเลือกที่จะ--sysconfdirติดตาม autoconf) หากภูตของคุณเป็นแพคเกจสำหรับการกระจายการปฏิบัติการจะเข้าไป/usr/sbin(ค่าเริ่มต้นเมื่อมีการสร้างจากแหล่งที่ควรจะเป็น/usr/local/sbin) /etcและการกำหนดค่าภายใต้

โปรดทราบว่า/etcไม่ใช่สถานที่สำหรับ "ข้อมูลแอปพลิเคชันมากมาย" /varที่จะเข้าสู่ ค่าเริ่มต้นเมื่อสร้างจากแหล่งที่มาอาจเป็น/var/local/mydaemonหรือ/var/lib/mydaemon; อีกครั้งไม่มีการประชุมที่แข็งแกร่งทั้งทางสำหรับการเริ่มต้นเมื่อสร้างจากแหล่งที่มา ควรมีวิธีในการเปลี่ยนทั้งค่าเริ่มต้นเวลาคอมไพล์ (โดยทั่วไปคือconfigure --localstatedir) และค่าเริ่มต้นรันไทม์ (ด้วยการตั้งค่าในไฟล์กำหนดค่าอาจมีตัวเลือกบรรทัดคำสั่งหรือตัวแปรสภาพแวดล้อม)


มีเหตุผลทำไม/usr/local/etcไม่ใช้บ่อยมากหรือไม่ ฉันชอบความคิดที่จะเก็บไฟล์ปรับแต่งไว้ที่ระดับเดียวกับระบบไฟล์เป็นไบนารี่
beatgammit

1
@tjameson ฉันไม่รู้ว่ามีเหตุผลที่แพร่หลาย BSD ทำเช่นนั้น ในฐานะที่เป็นผู้ดูแลระบบ, ฉันชอบที่แฟ้มการกำหนดค่าทั้งหมด (ซึ่งจะต้องได้รับการสนับสนุนและการเปลี่ยนแปลงที่มีการควบคุมที่แตกต่างจากสิ่งที่อยู่ในbinและlibและอื่น ๆ ซึ่งสามารถติดตั้งใหม่) ที่อาศัยอยู่ในสถานที่เดียวกัน
Gilles 'หยุดความชั่วร้าย'

1

ในฐานะผู้ใช้ Arch ฉันจะหลีกเลี่ยง / usr / local all พร้อมกันและใช้เพียง / etc สำหรับการกำหนดค่า เมื่อติดตั้งจากแหล่งที่มาฉันควรเขียนไฟล์ PKGBUILD ขนาดเล็กในขณะที่ฉันอยู่ที่นั่นและอาจอัปโหลดไปยัง Arch User Repository (AUR) ทั้งสำหรับผู้อื่นและตัวฉันเองบนคอมพิวเตอร์เครื่องอื่นในอนาคต ตัดสินจากจำนวนแพ็คเกจใน AUR และความเร็วในการสร้างฉันไม่ได้คิดอย่างเดียว สิ่งนี้จะเพิ่มโอกาสให้ทุกคนที่จะมีแพ็คเกจแทนการติดตั้งจากแหล่งและสามารถหลีกเลี่ยงสถานที่ล้าสมัยเช่น / usr / local

Debian ก็ดูเหมือนจะชอบความคิดของการสร้างแพคเกจของแหล่งที่มาแทนการติดตั้งอะไรไป / usr / local สาธารณูปโภคจึงเหมือนcheckinstall

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

ฉันแค่จะสละ / usr / local อย่างสมบูรณ์ มันไม่ใช่สถานที่ที่ดีที่จะใส่อะไรไม่ใช่สำหรับการติดตั้งแพ็คเกจ (ไดเรกทอรีทั่วทั้งระบบมีความเหมาะสมมากกว่า) และไม่ใช่สำหรับผู้ใช้

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