เคล็ดลับในการจัดโครงสร้างโฮมไดเรกทอรี (2023)
(unixdigest.com)เคล็ดลับโครงสร้างโฮมไดเรกทอรี
- การจัดโครงสร้างหรือจัดระเบียบไดเรกทอรีไม่ได้ต่างจากการจัดโครงสร้างหรือจัดระเบียบสิ่งอื่นมากนัก และหัวใจสำคัญคือทำในแบบที่สมเหตุสมผลกับตัวคุณที่สุด
- เมื่อต้องจัดการเรื่องการจัดระเบียบ มันสามารถหลุดการควบคุมได้อย่างรวดเร็วมาก
- เป้าหมายหลักของการจัดระเบียบคือประสิทธิภาพ โดยควรค้นหาสิ่งที่ต้องการได้ง่ายและรวดเร็ว และบันทึกสิ่งที่ต้องเก็บได้ง่ายและรวดเร็ว
ไฟล์และไดเรกทอรีพื้นฐานแบบซ่อน
- ในโฮมไดเรกทอรีของฉันมีไฟล์ซ่อนพื้นฐานทั้งหมดที่เป็นส่วนหนึ่งของระบบปฏิบัติการยูนิกซ์สมัยใหม่ เช่น
.config,.aliases,.profile,.gnupg,.mozilla - แม้ว่าจะอยากให้ทุกแอปพลิเคชันเคารพ XDG_CONFIG_HOME แต่ก็ไม่ได้เข้าไปก้าวก่ายหรือใส่ใจเรื่องนี้มากเกินไป
- ในอดีตเคยดูแล $HOME ด้วย Git ซึ่งเป็นวิธีที่ยอดเยี่ยมในการจัดการ Dotfiles
- ทุกวันนี้ก็ยังเก็บ Dotfiles ทั้งหมดไว้ใน Git เพื่อรักษาประวัติการเปลี่ยนแปลง แต่จะคงไว้แบบเดิมเฉพาะ Dotfiles ที่ทำงานเหมือนกันได้บนหลายระบบที่ใช้งาน
- Dotfiles เฉพาะการตั้งค่าจะเก็บไว้ในไดเรกทอรี
dotfilesและใช้ symbolic link
การจัดองค์ประกอบของไฟล์และไดเรกทอรีทั่วไป
- ไฟล์และไดเรกทอรีทั่วไปจะจัดโดยใช้สองวิธีหลักคือ "หมวดหมู่" และ "วันที่"
- โครงสร้างไดเรกทอรีพื้นฐาน:
bindataedatamntusr/dotfiles
- คงไดเรกทอรี
DesktopและDownloadsไว้ตามเดิม (เพราะดูเหมือนว่าแอปส่วนใหญ่จะบังคับให้มี) - ไดเรกทอรี
binใช้เก็บ shell script และไฟล์ปฏิบัติการไบนารีส่วนตัว (ไม่รวมสิ่งที่ติดตั้งผ่าน package manager) - ไดเรกทอรี
mntใช้สำหรับจุดเมานต์หลากหลายแบบ เช่น SD card, USB disk และ shared storage ที่ใช้ใน homelab - จะไม่ใช้การเมานต์อัตโนมัติโดยเด็ดขาด และใช้ shell script สำหรับการเมานต์แทน
- ไดเรกทอรี
usr/dotfilesถูกจัดการด้วย Git ร่วมกับ Dotfiles ทั่วไปอย่าง.aliasesและใช้ symbolic link ไปยังไฟล์ที่เกี่ยวข้องในไดเรกทอรีdotfiles
การจัดองค์ประกอบของไดเรกทอรีข้อมูล
- ไดเรกทอรี
dataและedataคือสองไดเรกทอรีหลักที่ใช้เก็บข้อมูลทั้งหมด - ทั้งสองไดเรกทอรีนี้เป็น ZFS dataset ที่ทำงานอยู่บน disk mirroring pool แยกจาก root installation
- ใช้ประโยชน์จาก ZFS โดยใช้งาน snapshot รวมถึง ZFS send และ receive เป็นประจำ เพื่อสำรองข้อมูลไปยัง network storage ได้อย่างง่ายดาย
- ความแตกต่างระหว่าง
dataและedataคือedataเป็น ZFS native encrypted dataset - การเข้ารหัสนั้นดีต่อความเป็นส่วนตัว แต่ก็เป็นชั้นความซับซ้อนที่น่าปวดหัวซึ่งซ้อนอยู่บนลำดับชั้นของระบบไฟล์ที่ซับซ้อนอยู่แล้ว และ ZFS encryption ก็มีบั๊กอยู่
- ขอแนะนำอย่างยิ่งให้สำรองข้อมูลสำคัญไว้เสมอในโซลูชันจัดเก็บและสถานที่หลายแห่งที่แตกต่างกัน
- ไม่ใช้ cloud storage สำหรับสิ่งที่สำคัญ
เคล็ดลับเพิ่มเติม
- กฎพื้นฐานสำหรับการตั้งชื่อไฟล์และไดเรกทอรีคือ ควรดูจากชื่อแล้วระบุได้ง่ายว่ามันคืออะไร
- หากไม่สามารถรู้ได้ว่าไฟล์นั้นเกี่ยวกับอะไรโดยไม่ต้องเปิดดู คุณควรเปิดมันทันทีและเปลี่ยนชื่อให้มีความหมายมากขึ้นเพื่อที่ครั้งหน้าจะเข้าใจได้จากชื่อไฟล์
- ถ้าปล่อยไฟล์และไดเรกทอรีไว้โดยไม่จัดระเบียบ ภายหลังจะแก้ไขให้เป็นระเบียบได้ยากมาก
- ใช้ชื่อไฟล์ที่มีคำอธิบายยาวเมื่อจำเป็น เพื่อให้เข้าใจเนื้อหาไฟล์ได้โดยไม่ต้องเปิดดู
ความเห็นจาก GN⁺
-
บทความนี้ให้เคล็ดลับเชิงปฏิบัติในการจัดระเบียบและจัดโครงสร้างไดเรกทอรี โดยเฉพาะแนวทางแบ่งจัดการระหว่างไดเรกทอรีที่เข้ารหัสและไม่เข้ารหัสด้วยการใช้ ZFS dataset ที่น่าสนใจ
-
โดยส่วนตัวคิดว่าการเก็บข้อมูลสำคัญแบบเข้ารหัสเป็นเรื่องที่ดี แต่ก็มีข้อเสียเช่นประสิทธิภาพที่ลดลงหรือความซับซ้อนที่เพิ่มขึ้น จึงดูเหมาะกับการเลือกใช้ตามสถานการณ์
-
อีกประเด็นสำคัญคือควรแบ่งปันวิธีเข้าถึงข้อมูลที่เข้ารหัสไว้กับสมาชิกในครอบครัวด้วย เพื่อไม่ให้ข้อมูลสูญหายแม้ในกรณีที่เจ้าตัวไม่สามารถเข้าถึงได้จากอุบัติเหตุหรือเหตุไม่คาดคิด
-
สำหรับการจัดการข้อมูลส่วนบุคคล การวางกลยุทธ์การสำรองข้อมูลอย่างเป็นระบบเหมือนผู้เขียนถือว่าสำคัญมาก อาจยึดตามกฎสำรองข้อมูล 321 และใช้ local storage ที่กระจายตัวทางกายภาพแทน cloud storage ก็เป็นวิธีที่ดี
-
เครื่องมือโอเพนซอร์ซที่มีประโยชน์สำหรับการจัดการข้อมูลส่วนบุคคล ได้แก่ Syncthing หรือ Nextcloud หากใช้เครื่องมือเหล่านี้ได้ดี ก็จะช่วยให้จัดการข้อมูลส่วนบุคคลได้อย่างเป็นระบบและปลอดภัย
1 ความคิดเห็น
ความเห็นจาก Hacker News
ต่อไปนี้คือสรุปความคิดเห็นจากคอมเมนต์ใน Hacker News:
~/goซึ่งเป็นไดเรกทอรีเริ่มต้นของ Go modules ที่ถูกชี้ว่าเป็นปัญหา แม้จะแก้ได้ด้วยการตั้งค่าGOPATHแต่ก็มีความเห็นว่าค่าเริ่มต้นแบบนี้ไม่ดีxdg-ninjaจะสามารถตั้งค่าให้แอปพลิเคชันส่วนใหญ่ทำตามมาตรฐาน XDG ได้ จึงช่วยจัดระเบียบโฮมไดเรกทอรีได้ดีขึ้น.configทำให้สำรองข้อมูลลำบาก และข้อมูลการตั้งค่าควรถูกแยกออกจากข้อมูลเซสชันวันที่-คำอธิบาย.txtหรือคีย์เวิร์ด-ชื่อเรื่อง-วันที่.txt~/dotfilesสามารถใช้เป็น Git repository สำหรับจัดการ dotfiles และสร้าง symbolic links ไว้ในโฮมไดเรกทอรีเพื่อความสะดวก~/projectsสามารถใช้จัดการงานโดยสร้างไดเรกทอรีย่อยแยกตามโปรเจกต์ ส่วน~/tmpใช้เป็นพื้นที่เก็บไฟล์ชั่วคราวได้ และการจัดบันทึกไว้บนเว็บไซต์หรือใน Markdown ก็เป็นวิธีที่ดีเช่นกัน