ไดเรกทอรีที่เหมาะสมที่สุดที่จะวางไฟล์ที่ใช้ร่วมกันระหว่างผู้ใช้คืออะไร?


82

หรือ: ฉันจะใส่ไฟล์ที่เป็นของกลุ่มได้ที่ไหน?

สมมติว่ามีสองผู้ใช้บนระบบ Unix: joeและซาร่าห์ พวกเขาเป็นสมาชิกของภาพยนตร์ที่ชื่นชอบกลุ่ม ฉันจะใส่ไฟล์ภาพยนตร์ของพวกเขาได้ที่ไหน

  • /home/{joe,sarah}/moviesไม่เหมาะสมเนื่องจากไดเรกทอรีเหล่านั้นเป็นของjoe / sarahไม่ใช่กลุ่มของพวกเขา

  • /home/movies-enthusiastไม่เหมาะสมเช่นกันเนื่องจากผู้ที่ชื่นชอบภาพยนตร์เป็นกลุ่มไม่ใช่ผู้ใช้

  • /var/movies-enthusiast อาจเป็นตัวเลือก แต่ฉันไม่แน่ใจว่าสิ่งนี้อนุญาตโดย FHS;

  • /srv/movies-enthusiast อาจเป็นตัวเลือกด้วยเช่นกันอย่างไรก็ตามภาพยนตร์ไม่จำเป็นต้องใช้บริการของระบบ


6
โหวตให้เอ่ยถึง FHS! ผู้ใช้ * ระวังนี้และผู้ดูแลระบบชั่วคราวของ 20 ปีไม่ทราบ ขอขอบคุณ!
CPRitter

คำตอบ:


71

อย่าใช้

  • /usrใช้สำหรับข้อมูลที่อ่านอย่างเดียวที่แชร์ได้ ข้อมูลที่นี่ควรเปลี่ยนแปลงด้วยเหตุผลด้านการบริหารเท่านั้น (เช่นการติดตั้งแพ็คเกจใหม่)
  • /opt โดยทั่วไปแล้วสำหรับโปรแกรมที่มีอยู่ในตัวเองหรือจำเป็นต้องแยกออกจากส่วนที่เหลือของระบบด้วยเหตุผลบางประการ (เช่นโปรแกรม honeypot ที่มีการโต้ตอบระหว่างกลางและต่ำ)
  • /varสำหรับ"ไฟล์ที่คาดว่าจะมีการเปลี่ยนแปลงเนื้อหาอย่างต่อเนื่องระหว่างการทำงานปกติของระบบ - เช่นบันทึกไฟล์สปูลและไฟล์อีเมลชั่วคราว" ฉันชอบคิดแบบนี้: ถ้าข้อมูลของคุณไม่ถูกต้องสรุปในรายการโดยทั่วไปแล้วมันไม่ได้อยู่ใน/var(แม้ว่าจะมีข้อยกเว้นนี้)

ใช้

  • /homeสำหรับไดเรกทอรีบ้านของผู้ใช้ บางคนเห็นว่าไดเรกทอรีนี้เป็นพื้นที่สำหรับไฟล์กลุ่มเช่นกัน FHS ตั้งข้อสังเกตว่า"ในระบบขนาดใหญ่ (โดยเฉพาะอย่างยิ่งเมื่อ / ไดเร็กตอรี่ / home ถูกแชร์ในหลาย ๆ โฮสต์โดยใช้ NFS) มันมีประโยชน์ในการแบ่งโฮมไดเร็กตอรี่โฮมของผู้ใช้การแบ่งย่อยอาจทำได้โดยใช้ / แขก, / บ้าน / นักเรียน ฯลฯ "
  • /srvเป็นตำแหน่งที่ยอมรับและมักเป็นที่ต้องการสำหรับไฟล์กลุ่ม ฉันมักใช้ไดเรกทอรีนี้สำหรับกลุ่มที่แชร์ไฟล์ด้วยเหตุผลที่กล่าวถึงในคริสลงของคำตอบ ; ฉันเห็นการแชร์ไฟล์กลุ่มเป็นบริการที่เซิร์ฟเวอร์จัดไว้ให้

ดูที่ man (7) man page ( man hier) สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวัตถุประสงค์ของแต่ละไดเรกทอรีที่อธิบายโดย FHS


1
ฉันคิดว่าในกรณีทั่วไปมากกว่าหนึ่งอาจใช้/srv/dataไดเรกทอรีสำหรับไฟล์ข้อมูล
Victor Yarema

3
+1 สำหรับการกล่าวถึงลำดับชั้นของผู้ชาย ฉันไม่รู้ว่ามีอยู่จริง
Zach Boyd

ขอขอบคุณข้อมูลและการอ้างอิงที่มีประโยชน์มากสำหรับผู้ใช้ linux ใหม่
Shivam

28

/srv/movies-enthusiastในความคิดของสถานที่ที่เหมาะสมคือ "บริการ" ไม่จำเป็นต้องเป็น daemon หรือโปรแกรม แต่จะต้องเป็นบริการที่ระบบจัดให้ (เช่นการรับภาพยนตร์ของคุณที่นั่น) นี่คือข้อความจากFHS :

/ srv มีข้อมูลเฉพาะไซต์ที่ให้บริการโดยระบบนี้

ฉันคิดว่าการใช้งานของคุณอยู่ภายใต้คำจำกัดความนั้นและให้บริการ


ฉันคิดว่าในกรณีทั่วไปมากกว่าหนึ่งอาจใช้/srv/dataไดเรกทอรีสำหรับไฟล์ข้อมูล
Victor Yarema

11

ระบบแฟ้มลำดับชั้นมาตรฐาน (FHS) ระบุเค้าโครงสำหรับ "นักพัฒนาระบบปฏิบัติการยูนิกซ์กระจายนักพัฒนาแพคเกจและ implementors ระบบ" ที่จะปฏิบัติตามเพื่อไม่ให้เลอะของคุณ namespace

เนื่องจากเป็นเนมสเปซของคุณคุณควรเลือกชื่อที่คุณรู้สึกว่าเหมาะสม หากคุณ/groups/movies-enthusiastรู้สึกว่าเหมาะสมคุณควรใส่มันไว้ที่นั่น หากคุณชอบชื่อพา ธ สั้น ๆ เพราะง่ายต่อการพิมพ์/g/movies-enthusiast(หรืออาจจะ/g/m-e) จะเหมาะสม

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

ตัวอย่างเช่นฉันใช้เป็นการส่วนตัว/avเพื่อเก็บเนื้อหาภาพและเสียงของฉัน/srcสำหรับซอร์สโค้ดและ/dataสำหรับข้อมูลที่ไม่ได้กำหนด (เช่นอิมเมจเครื่องเสมือน, อิมเมจซีดี, chroots, แพ็คเกจที่บันทึกไว้และอื่น ๆ )


ฉันเองใช้ / data สำหรับไฟล์ดังกล่าวทั้งหมดจากนั้น / data / ภาพยนตร์สำหรับเนื้อหาภาพและเสียง / data / src สำหรับซอร์สโค้ด / data / music ทั้งหมดในที่เดียว (ลำดับชั้น)
meduz

การติดตามหรือยึดมั่นในมาตรฐานที่มักเป็นความคิดที่ดีแม้ว่าคุณจะไม่ใช่ dev, distro dev, pkg dev หรือ implementor ของระบบก็ตาม
เฟลิเป้อัลวาเรซ

การเพิ่มไดเรกทอรีใหม่ไม่ได้ต่อต้าน FHS; จริง ๆ แล้วฉันจะยืนยันว่าไม่จำเป็นต้องสร้างไดเรกทอรีใหม่เพื่อให้เป็นไปตาม FHS ! FHS กล่าวถึงโดยเฉพาะว่าคำถามใด ๆ ที่ไม่จำเป็นต้องประสานงานระหว่างหลายฝ่ายอยู่นอกขอบเขตของมาตรฐานนั้น ดังนั้นการพยายามปรับให้เหมาะสมกับทุกความต้องการในที่สุดภายในหนึ่งในไดเรกทอรีที่กำหนดโดย FHS จะถูกผูกไว้เพื่อสร้างสถานการณ์ที่ไฟล์ถูกวางไว้ภายในไดเรกทอรีที่ไม่ควรเป็น
jwatkins

7

ไม่มีอะไรผิดปกติกับการสร้างจุดเชื่อมต่อหรือไดเรกทอรีใหม่สำหรับจุดประสงค์นี้จากรูท

โดยเฉพาะอย่างยิ่งถ้านี่คือจุดประสงค์หลักของระบบนี้ฉันจะสร้าง

/ ภาพยนตร์ที่ชื่นชอบ

หากมี "กลุ่ม" อื่นที่คล้ายคลึงกันฉันอาจหรืออาจไม่ต้องการโฮสต์ด้วยกันเช่น

/data/movies-entusiast
/data/next-group
etc

หรือ

/share/movies-enthusiast
/share/next-idea
etc

คำถามที่ต้องพิจารณา: คุณจะอุทิศจุดเมานต์เพื่อจุดประสงค์นี้หรือไม่?

คุณเคยพิจารณาซอฟต์ลิงค์หรือไม่?

ไม่ว่าในกรณีใดไม่มีกฎ หากคุณต้องการให้ผู้ใช้หนึ่งคนเป็นผู้ดูแลและให้สิทธิ์ในการเข้าถึงพื้นที่โปรเจ็กต์นี้ให้คุณสามารถโฮสต์ในโฮมไดเร็กตอรีของผู้ใช้ได้ หรือสร้าง / name / shared / * name-space คุณเป็นเจ้านายของคุณเอง

โอ้สิ่งหนึ่งที่: สิ่งที่คุณทำทำเอกสาร จำเป็นต้องเป็นส่วนหนึ่งของการกู้คืนระบบการตรวจสอบรายวันการสำรองข้อมูล ฯลฯ จำเป็นต้องมีการบันทึกการกำหนดค่าที่สำคัญ (เช่นการเป็นสมาชิกกลุ่มชุดการอนุญาต fs ที่ปรับได้เพื่อประสิทธิภาพและสิ่งอื่น ๆ ที่ไม่ใช่ค่าเริ่มต้น)


1

FHS ยังทำให้ผู้ดูแลระบบง่ายขึ้นด้วยดังนั้นฉันจะไปด้วย / srv ด้วยเหตุผลนั้นแม้ว่าจะไม่ใช่สิ่งที่ฉันได้ทำไป มีปัญหาหลังสมบูรณ์แบบว่า ฉันใช้ / ส่งออก / srv เพราะมันอยู่ใน NAS

หากเป็นกล่องดรอปให้แน่ใจว่าทั้ง setgid และเหนียว ยังให้แน่ใจว่าผู้ที่ใช้มันมี umask ที่มีประโยชน์ อย่างไรก็ตามอย่าใช้วงล้ออย่างที่ฉันเคยทำในตัวอย่างของโหมดการเข้าถึงไฟล์ อย่าตัด eXecute ไม่เช่นนั้นคุณจะต้องประหลาดใจกับ O_o

bash-3.2$ mkdir movies
bash-3.2$ sudo chmod 03771 movies
Password:
bash-3.2$ ls -ld movies/
drwxrws--t 2 andrewb wheel 68 Apr  4 17:09 movies/
bash-3.2$ umask 026
bash-3.2$ touch movies/junk
bash-3.2$ ls -l movies/
total 0
-rw-r----- 1 andrewb wheel 0 Apr  4 17:09 junk

1

มันเป็นสิ่งสำคัญที่ต้องจำไว้ว่า FHS ที่อยู่ในประเด็นที่ตำแหน่งที่ไฟล์จะต้องมีการประสานงานระหว่างฝ่ายต่างๆเช่นเว็บไซต์ท้องถิ่น, การกระจายการใช้งานเอกสาร ฯลฯ ; FHS ไม่ได้พยายามกำหนดกฎสำหรับทุกสถานการณ์ที่คุณอาจมี: การวางตำแหน่งไฟล์โลคัลเป็นปัญหาท้องถิ่น ( FHS 3.0, ส่วน 1.1 )

ดังนั้นคุณในทางเทคนิคอาจทำให้คุณmoviesไดเรกทอรีที่ใดก็ได้ตราบใดที่มันไม่ได้ไปกับการประชุม FHS ยังคำถามของคุณเกี่ยวกับสถานที่ที่เหมาะสมที่สุดดังนั้นให้ลองพิจารณาคำตอบทั่วไปสองสามข้อ (เรียงลำดับจากคำตอบที่ฉันชอบน้อยที่สุดเนื่องจากได้รับกรณีการใช้งานเฉพาะของคุณ):

  • /<someprefix>/<groupname>หรือ/media/<volumename>/<groupname>: ฉันไม่รู้จริง ๆ ว่าทำไมตัวเลือกนี้มีชื่อเสียงไม่ดีในโลก Linux แต่ขออธิบายอย่างชัดเจนว่านี่เป็นระบบของคุณจริงๆและ FHS บอกว่าคุณไม่มีอิสระในการสร้างไดเรกทอรีใหม่ที่ระดับรากนาน ในขณะที่คุณไม่ขัดแย้งกับสิ่งที่มีความหมายที่ดีขึ้น ตัวอย่างเช่นคุณสามารถสร้างไดเรกทอรี/groupsหรือ/sharedจัดระเบียบไฟล์เหล่านี้ตามที่เห็นสมควร ฉันรู้ว่าผู้ดูแลระบบบางคนชอบที่จะแยกพวกนี้ออกจากส่วนที่เหลือของระบบไฟล์ดังนั้นพวกเขาจึงติดตั้งไดรฟ์ข้อมูลที่แตกต่างกัน (เช่น. ภายใต้/media/<volumename>/<groupname>) ทั้งคู่เป็นคนดีและทั้งคู่ก็พอใจ

  • /srv/<groupname>หรือ/srv/<someprefix>/<groupname>: ตาม FHS /srvมีข้อมูลเฉพาะไซต์ที่ให้บริการโดยระบบนี้ FHS จะอธิบายว่าวิธีการที่ใช้ในการตั้งชื่อไดเรกทอรีย่อยของ / srv นั้นไม่ได้ระบุไว้ จากประสบการณ์ส่วนตัวของฉันผู้ดูแลระบบส่วนใหญ่ที่ใช้ประโยชน์จาก/srvไดเรกทอรีดำเนินต่อไปด้วยไดเรกทอรีย่อยต่อไซต์หรือต่อโครงการจากนั้นวางไดเรกทอรีข้อมูลในระดับนั้น อย่างไรก็ตามคุณจัดโครงสร้างมัน/srvเป็นที่ยอมรับอย่างสมบูรณ์ในการจัดเก็บไฟล์ที่จะแบ่งปันระหว่างผู้ใช้หลายคนหากคุณสามารถพิจารณาได้อย่างสมเหตุสมผลว่าการแชร์ไฟล์เหล่านี้เป็นบริการด้วยตัวเอง ถามตัวเองว่า: "ในที่สุดการแชร์ไฟล์เหล่านั้นผ่าน SMB / NFS / AFS / GIT / ... ถ้าเป็นเช่นนั้นคุณสามารถพิจารณาได้อย่างสมเหตุสมผลว่าไดเรกทอรีของคุณเป็นบริการแชร์ไฟล์ภายในเครื่องและเก็บสิ่งเหล่านี้ไว้ในไดเรกทอรีย่อย/srvแม้ว่าจะไม่มีดีมอนที่ให้บริการไฟล์เหล่านั้นไปยังระบบอื่น

  • /home/<groupname>หรือ/home/<some-prefix>/<groupname>การ FHS กล่าวว่า/homeเป็นแนวคิดมาตรฐานเป็นธรรม แต่มันก็เห็นได้ชัดว่าระบบแฟ้มเว็บไซต์ที่เฉพาะเจาะจง ไม่มีข้อกำหนดอย่างแน่นอนว่าทุกไดเรกทอรีภายใต้/homeเป็นชื่อของผู้ใช้จริงและเป็นที่ยอมรับที่จะมีไดเรกทอรีย่อยสำหรับกลุ่มแม้ว่าจำเป็นต้องมีข้อควรระวังเพื่อหลีกเลี่ยงความขัดแย้งในที่สุดระหว่างกลุ่มและผู้ใช้ ถึงกระนั้นฉันได้เห็นกลยุทธ์นี้ถูกใช้ในการตั้งค่าขนาดใหญ่หลายแห่ง (โดยเฉพาะมหาวิทยาลัย) พร้อมกับกลยุทธ์บางอย่างเพื่อหลีกเลี่ยงความขัดแย้งที่อาจเกิดขึ้น ตัวอย่างเช่นผู้ใช้งานจริงจะมีไดเรกทอรีบ้านของพวกเขา/home/students/<studentid>, /home/teachers/<username>หรือ/home/staff/<username>ในขณะที่สิ่งที่ใช้ร่วมกันจะยกตัวอย่างเช่นจะใส่ใน/home/workgroup/<workgroupname>. บางครั้งพวกเขาก็จะเป็นแผนกย่อย; ยังคุณจะได้รับความคิด ตามความจริงแล้วฉันไม่ชอบกลยุทธ์นี้ แต่มันทำให้ง่ายขึ้นเล็กน้อยเมื่อ/homeมีการแจกจ่ายระหว่างเซิร์ฟเวอร์หลาย ๆ ตัว (เช่นผ่าน NFS) ซึ่งเป็นเหตุผลว่าทำไมจึงเป็นที่นิยมในองค์กรขนาดใหญ่มาก


0

ฉันเลือกที่จะ / usr / share / ภาพยนตร์ที่ชื่นชอบหรือ / opt / ภาพยนตร์ที่ชื่นชอบ


0

ฉันขอแนะนำให้สร้างไดเรกทอรีแยกต่างหากเช่น / opt / ภาพยนตร์ตั้งค่าสิทธิ์ผู้ใช้และกลุ่มที่เหมาะสมสำหรับพวกเขาและคุณสามารถใช้ดิสก์quotaเพื่อหลีกเลี่ยงการใช้ดิสก์ทั้งหมด ..


0

นี่เป็นความคิดเห็นที่มากพอ ๆ กับคำตอบ (ดังนั้นโปรดอย่าลงคะแนนให้ฉันเลย!) แต่มันยาวเกินไปที่จะแสดงความคิดเห็น

ฉันทำสองสิ่งซึ่งทั้งสองอย่างหลีกเลี่ยงปัญหาที่คุณเผชิญ

1) ฉันสร้างพาร์ติชันแยกต่างหากของพื้นที่ว่างทั้งหมดบนดิสก์ระบบของฉันและติดป้ายชื่อดาต้าสเปซ นั่นคือสิ่งที่ไฟล์สื่อทั้งหมดของฉันในปัจจุบันและข้อมูลอื่น ๆ ไป มันได้รับการเมาท์อัตโนมัติเป็น / media / dataspace และฉันใส่อะไรก็ได้ที่เป็น "data" ในไดเรกทอรีที่เรียกว่า "data" เพื่อแยกมันออกจากสิ่งต่าง ๆ เช่นไฟล์งาน vms หรือภาพ iso ที่ฉันไม่ต้องการสำรองข้อมูลเป็นประจำ

การใช้พาร์ติชันแยกต่างหากจะมีประโยชน์เพิ่มเติมที่ถ้าเติมเต็มพาร์ติชั่นจะไม่ประนีประนอมระบบของฉันเหมือนจะทำถ้ามันถูกเก็บไว้ใน / หรือ / home

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

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