ไดเร็กทอรีมาตรฐานและ / หรือไดเร็กทอรีทั่วไปบน Unix / Linux OS


25

มาจากโลกของ Windows ฉันพบว่าส่วนใหญ่ของชื่อไดเรกทอรีโฟลเดอร์จะค่อนข้างง่าย:

  • \Program Files มีไฟล์ที่ใช้โดยโปรแกรม (แปลกใจ!)

  • \Program Files (x86) มีไฟล์ที่ใช้งานโดยโปรแกรม 32 บิตบนระบบปฏิบัติการ 64 บิต

  • \Users(เดิมDocuments and Settings) มีไฟล์ของผู้ใช้เช่นเอกสารและการตั้งค่า

    • \Users\USER\Application Data มีข้อมูลเฉพาะแอปพลิเคชัน

    • \Users\USER\Documents มีเอกสารที่เป็นของผู้ใช้

  • \Windows มีไฟล์ที่เป็นของการทำงานของ Windows เอง

    • \Windows\Fonts เก็บไฟล์ตัวอักษร (แปลกใจ!)

    • \Windows\Temp เป็นไดเรกทอรีชั่วคราวทั่วโลก

และอื่น ๆ แม้ว่าฉันจะไม่รู้ว่าโฟลเดอร์เหล่านี้ทำอะไรฉันก็สามารถเดาได้อย่างแม่นยำจากชื่อของพวกเขา

ตอนนี้ฉันใช้ Linux ดูดีและสับสนมากเกี่ยวกับวิธีค้นหาวิธีการรอบ ๆ ระบบไฟล์

ตัวอย่างเช่น:

  • /binมีไบนารี แต่ทำเพื่อ/sbin, /usr/bin, /usr/sbinและอาจจะมากกว่าที่ฉันไม่ทราบเกี่ยวกับ อันไหน ?? ความแตกต่างระหว่างพวกเขาคืออะไร? ถ้าฉันต้องการสร้างไบนารีและวางไว้ที่ไหนสักแห่งทั้งระบบฉันจะวางมันไว้ที่ไหน?

  • /mediaมีระบบไฟล์สื่อบันทึกภายนอก แต่ก็เช่น/mntกัน และในขณะนี้ก็ไม่มีอะไรในระบบของฉัน ดูเหมือนว่าทุกอย่างจะเข้า/devมา ความแตกต่างคืออะไร? พาร์ทิชั่นอื่น ๆ ในฮาร์ดดิสก์ของฉันเช่นC:และD:ที่อยู่ใน Windows คืออะไร

  • /homeมีไฟล์ผู้ใช้และการตั้งค่า มากนั้นเป็นสัญชาตญาณ แต่แล้วสิ่งที่ควรจะเข้าไป/usr? และทำไมถึง/rootยังแยกจากกันแม้ว่าจะเป็นผู้ใช้ที่มีไฟล์และการตั้งค่า

  • /libมีไลบรารีที่แบ่งใช้เช่น DLLs แต่ก็เช่น/usr/libกัน ความแตกต่างคืออะไร?

  • อะไรคือ /etc ? มันหมายถึง "et cetera" หรืออย่างอื่นจริงหรือ ควรมีไฟล์ประเภทใดบ้าง - ทั่วโลกหรือในระดับท้องถิ่น? มันเป็นสิ่งที่จับได้สำหรับสิ่งที่ไม่มีใครรู้ว่าจะวางหรือมีกรณีการใช้งานเฉพาะสำหรับมัน?

  • อะไรคือ/opt, /procและ/var? พวกเขายืนหยัดเพื่ออะไรและใช้ทำอะไร ฉันไม่ได้เห็นสิ่งใดใน Windows * และฉันไม่สามารถเข้าใจได้ว่ามันจะเป็นอย่างไร

หากใครสามารถนึกถึงสถานที่มาตรฐานอื่น ๆ ที่น่าจะดีให้ลองเพิ่มเข้าไปในคำถาม หวังว่านี่จะเป็นข้อมูลอ้างอิงที่ดีสำหรับคนอย่างฉันที่เริ่มคุ้นเคยกับระบบ * nix

* ตกลงนั่นเป็นเรื่องโกหก ฉันเคยเห็นสิ่งที่คล้ายกันใน WinObj แต่เห็นได้ชัดว่าไม่ใช่เป็นประจำ ฉันยังไม่รู้ว่าสิ่งเหล่านี้ทำบน Linux อย่างไร


1
ขอขอบคุณที่รักษาจิตวิญญาณแห่งการเรียนรู้ที่ดี หัวข้อนี้มักจะเป็นที่ถกเถียงกัน ดูคำตอบของฉันสำหรับคำถามนี้สำหรับคำอธิบายเพิ่มเติมเกี่ยวกับความแตกต่างพื้นฐานระหว่างโครงสร้างระบบไฟล์ใน Windows และ Linux
Caleb

อย่าคิดว่า "usr" เป็นตัวย่อของ "ผู้ใช้" แต่ "Unix System Resources" (แม้ว่ามันอาจจะเป็นตัวย่อเพราะมันมีไดเรกทอรีของผู้ใช้เมื่อหลายปีก่อน) ( linux-training.be/files/books/html /fun/ch09s08.html )
lgeorget

ไม่มีประโยชน์ในการพยายามพิสูจน์ความลับไดเรกทอรี Unix / Linux / etc ของการตั้งชื่อกับ Windows (หรือ Mac OS X) มันเป็นอย่างไร
Andrew Wolfe

ตั้งแต่ปี 2017 โครงสร้างโฟลเดอร์ Windows เป็นระเบียบสมบูรณ์ C:\Program Files, C:\ProgramData, %HOME%\AppData\Local,%HOME%\AppData\LocalLow , C:\Windows\SystemApps... ตัวอย่างทั้งหมดที่หนึ่งสามารถหา executables ใน Windows และฉันจะไม่พูดถึงไฟล์การตั้งค่าและรีจิสทรีฉันไม่ต้องการหดหู่มากขึ้น PS: ฉันทำงานเป็นหลักใน Windows
rsenna

คำตอบ:


29

การกระจาย Linux ใช้ FHS: http://www.pathname.com/fhs/pub/fhs-2.3.html

คุณสามารถลองman hierใช้ได้เช่นกัน

ฉันจะพยายามหาคำตอบให้กับคำถามของคุณจากส่วนหัว แต่ฉันขอแนะนำให้คุณอ่าน FHS:

  • / bin สำหรับไบนารีระบบที่ไม่ใช่ superuser
  • / sbin สำหรับไบนารีระบบ superuser (root)
  • / usr / bin & / usr / sbin สำหรับไบนารีที่ไม่ได้อยู่ในกลุ่ม non-superuser หรือ superuser ที่มีความสำคัญร่วมกันตามลำดับ
  • / mnt ใช้สำหรับการติดตั้งพาร์ติชันชั่วคราว
  • / media ใช้สำหรับการติดตั้งสื่อแบบถอดได้จำนวนมากในครั้งเดียว
  • / dev มีไฟล์อุปกรณ์ระบบของคุณ; เรื่องมันยาว :)
  • โฟลเดอร์ / usr และโฟลเดอร์ย่อยสามารถแชร์กับระบบอื่น ๆ เพื่อให้สามารถเข้าถึงโปรแกรม / ไฟล์เดียวกันที่ติดตั้งไว้ในที่เดียว เนื่องจาก / usr อยู่บนระบบไฟล์แยกต่างหากจึงไม่มีไบนารีที่จำเป็นเพื่อให้ระบบออนไลน์
  • / root แยกจากกันเนื่องจากอาจจำเป็นต้องทำให้ระบบออนไลน์โดยไม่ต้องติดตั้งไดเรกทอรีอื่นซึ่งอาจอยู่ในพาร์ติชัน / ฮาร์ดไดรฟ์ / เซิร์ฟเวอร์แยกกัน
  • ใช่ / etc ย่อมาจาก "et cetera" ไฟล์การกำหนดค่าสำหรับระบบโลคัลถูกเก็บไว้ที่นั่น
  • / opt เป็นสถานที่ที่คุณสามารถติดตั้งโปรแกรมที่คุณดาวน์โหลด / รวบรวม ด้วยวิธีนี้คุณสามารถแยกพวกมันออกจากส่วนที่เหลือของระบบด้วยไฟล์ทั้งหมดในที่เดียว
  • / proc มีข้อมูลเกี่ยวกับเคอร์เนลและกระบวนการทำงาน
  • / var มีไฟล์ขนาดตัวแปรเช่นบันทึก, เมล, หน้าเว็บ ฯลฯ

หากต้องการเข้าถึงระบบโดยทั่วไปคุณไม่จำเป็นต้อง / var, / opt, / usr, / home; ไดเรกทอรีที่ใหญ่ที่สุดบางรายการในระบบ

หนึ่งในรายการโปรดของฉันซึ่งบางคนไม่ได้ใช้คือ / srv ใช้สำหรับข้อมูลที่โฮสต์ผ่านบริการเช่น http / ftp / samba ฉันเห็น / var ใช้สำหรับสิ่งนี้มากซึ่งไม่ใช่จุดประสงค์จริงๆ


ภาพรวมที่ดีตอบคำถามเฉพาะ โปรดทราบว่า distros บางคนใช้/home/users/usernameสำหรับผู้ใช้และ/home/services/servicenameสำหรับสิ่งที่คุณพูดถึง/srcเป็นสำหรับ ฉันคิดว่ามันใช้งานได้ดีกว่าเพราะมันมีความหลากหลายในการแบ่งพาร์ติชัน คุณสามารถใช้มันในพาร์ติชั่นของตัวเองหรือใช้พาร์ทิชันเดียวกันและข้อมูลผู้ใช้ของคุณซึ่งมักจะเป็นสิ่งที่ฉันต้องการทำ
คาเลบ

+1 ขอบคุณสำหรับลิงค์และคำอธิบายมันยอดเยี่ยมมาก! :)
Mehrdad

/ usr ควรมีไฟล์เฉพาะแอปพลิเคชันที่อยู่ในระบบปฏิบัติการและ / หรือไฟล์บุคคลที่สาม มันไม่สามารถแบ่งปันภายใน Intriniscally! แม้ว่า LSB จะโต้แย้งว่าสิ่งเหล่านี้ถูกเก็บไว้ใน / เลือก / usr / share ในทางกลับกันสามารถมีไฟล์ที่สามารถแชร์ได้ระหว่างเครื่องที่มีสถาปัตยกรรม / เวอร์ชั่นต่าง ๆ เหล่านี้เป็นทุกการประชุมเพียง แต่! เป็นไปได้ทีเดียว (แม้ว่าจะต้องทำงานหนักมาก) เพื่อใช้โครงสร้างที่แตกต่างอย่างสิ้นเชิง เหมือนของออราเคิลที่เหมาะสมมีความยืดหยุ่นสถาปัตยกรรม - มีการประชุมอื่น ๆ แม้ว่า
symcbean

1
สิ่งที่ต้องคำนึงถึงอีกประการเกี่ยวกับ Unix ก็คือแนวคิดที่ว่า " ทุกอย่างเป็นไฟล์ " (หรืออย่างน้อยก็ดูเหมือนหนึ่ง) ตัวอย่างเช่นเนื้อหาใน / proc ดูเหมือนไฟล์และไดเรกทอรี แต่เนื้อหาจะถูกสร้างขึ้นจริงโดยเคอร์เนลเมื่อคุณเข้าถึงพวกเขา ซึ่งหมายความว่าคุณสามารถใช้เครื่องมือเดียวกัน (ls, cat, ฯลฯ ) เพื่อเข้าถึงข้อมูลนี้
KeithB

1
@symcbean จาก FHS: "... / usr สามารถแบ่งปันข้อมูลแบบอ่านอย่างเดียวซึ่งหมายความว่า / usr ควรแบ่งปันได้ระหว่างโฮสต์ที่เข้ากันได้กับ FHS ... " เห็นได้ชัดว่าไฟล์บางไฟล์ขึ้นอยู่กับสถาปัตยกรรมและการกระจายบางอย่างคาดว่าเป็นลำดับชั้นไดเรกทอรีที่แตกต่างกัน วิธีแก้ปัญหาคือทำการบ้านของคุณเช่น Admin ดี :)
bhinesley

18

ฉันจะไม่ตอบเกี่ยวกับสิ่งที่พวกเขาหมายถึง (คนอื่นมี) แต่ให้บริบททางประวัติศาสตร์เล็กน้อย

อันดับแรกโปรดจำไว้ว่า UNIX มีอายุใกล้เคียงกับ 40 ปีย้อนกลับไปในยุคสมัยของเทปกระดาษและขั้วต่อแบบตายตัวที่ส่งโค้ดไปยังเมนเฟรมคอมพิวเตอร์ 300 baud (ระบบ Windows XP ใกล้ถึง 10 ปี) การพิมพ์ช้าและความต้องการประสิทธิภาพในการพิมพ์มีค่ามากกว่าสิ่งอื่น ๆ ที่ต้องพิจารณา นั่นคือเหตุผลสำหรับคำสั่งพื้นฐานที่สั้นมาก (เช่น 'ls', 'cat', 'cc', 'dd' ฯลฯ ) เช่นเดียวกันกับโครงสร้างไดเรกทอรี คิดว่าถ้าคำสั่งมากกว่าสามหรือสี่ตัวอักษรชื่อนั้นยาวเกินไป

แต่เดิมไดเร็กทอรี / usr มีโฮมไดเร็กทอรีของผู้ใช้เนื่องจากคำสั่งส่วนใหญ่อยู่ใน / bin และไฟล์อุปกรณ์ทั้งหมดอยู่ใน / dev ภายหลังคิดว่าจะทำให้ไดรฟ์หลัก (ระบบไฟล์รูท '/') เล็กสำหรับการบู๊ตที่รวดเร็วขึ้น ดังนั้นโครงสร้างอื่น ๆ เช่น / usr / bin, / usr / include และ / usr / lib มาถึงโดยที่ / usr เป็น "ไดรฟ์" แยกต่างหาก ต่อมาคิดว่ามีโฮมไดเร็กตอรี่ของผู้ใช้ใน / home, แต่มีไดรฟ์อื่นอยู่ และมากไปกว่านั้นเพื่อให้มี / var (ย่อมาจากตัวแปร / เปลี่ยนได้) ไดเร็กทอรี / etc หมายความว่า 'et cetera' เนื่องจากเป็นตำแหน่ง catch-all ของไฟล์คอนฟิกูเรชันระบบทั้งหมด กระบวนการ / mnt ถูกใช้เป็นสถานที่ชั่วคราวเพื่อเข้าถึงไดรฟ์ (มักจะเป็นไดรฟ์สำรอง) ไดเรกทอรีเช่น / opt, / proc และ / media มามากในภายหลัง

มีจำนวนมากที่ถูกทิ้งไว้ (เช่น / usr / local และ / net) แต่นี่จะให้คำอธิบายสั้น ๆ ว่าทำไมชื่อจึงเป็น 'ใช้งานง่ายน้อยลง'


2
+1 ฉันชอบบริบททางประวัติศาสตร์มันจัดระเบียบสมองของฉัน :) ขอบคุณที่สละเวลาเขียนสิ่งนี้!
Mehrdad

5

ดังที่ได้กล่าวมาแล้วในตอนนี้ลีนุกซ์ลีนุกซ์ใช้ FHS เป็นส่วนใหญ่, ดูที่นี่สำหรับภาพรวมของบทช่วยสอน, เหมาะเป็นพิเศษสำหรับผู้ที่มาจากหน้าต่าง

ในฐานะที่เป็นโน้ตไดเรกทอรี Windows ดูเหมือนใช้งานง่ายมากเผินๆ แต่ให้ฉันถามคุณว่าการตั้งค่าสำหรับโปรแกรมเป็น*.iniไฟล์ในโฟลเดอร์โปรแกรมในDocuments and Settings\User( \Application Dataหรือ\Local Settings\Application Data) หรือในรีจิสทรีที่น่าอับอายหรือไม่ ไม่มีใครรู้แม้แต่ Microsoft และเราสามารถไปเรื่อย ๆ


1
ฉันคิดว่าชื่อ Windows 7 ของโฟลเดอร์นั้นดีกว่า เช่น AppData \ Roaming เทียบกับ AppData \ Local - พวกเขาอธิบายประเภทของข้อมูลในนั้น สำหรับข้อมูลการกำหนดค่า: ฉันคิดว่าฉันรู้ว่าจะใส่ไว้ที่ไหนเมื่อฉันเห็น แต่ฉันไม่สามารถอธิบายได้ดีฉันเห็นด้วย :)
Mehrdad
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.