2 คะแนน โดย GN⁺ 2024-04-21 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

เคล็ดลับโครงสร้างโฮมไดเรกทอรี

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

ไฟล์และไดเรกทอรีพื้นฐานแบบซ่อน

  • ในโฮมไดเรกทอรีของฉันมีไฟล์ซ่อนพื้นฐานทั้งหมดที่เป็นส่วนหนึ่งของระบบปฏิบัติการยูนิกซ์สมัยใหม่ เช่น .config, .aliases, .profile, .gnupg, .mozilla
  • แม้ว่าจะอยากให้ทุกแอปพลิเคชันเคารพ XDG_CONFIG_HOME แต่ก็ไม่ได้เข้าไปก้าวก่ายหรือใส่ใจเรื่องนี้มากเกินไป
  • ในอดีตเคยดูแล $HOME ด้วย Git ซึ่งเป็นวิธีที่ยอดเยี่ยมในการจัดการ Dotfiles
  • ทุกวันนี้ก็ยังเก็บ Dotfiles ทั้งหมดไว้ใน Git เพื่อรักษาประวัติการเปลี่ยนแปลง แต่จะคงไว้แบบเดิมเฉพาะ Dotfiles ที่ทำงานเหมือนกันได้บนหลายระบบที่ใช้งาน
  • Dotfiles เฉพาะการตั้งค่าจะเก็บไว้ในไดเรกทอรี dotfiles และใช้ symbolic link

การจัดองค์ประกอบของไฟล์และไดเรกทอรีทั่วไป

  • ไฟล์และไดเรกทอรีทั่วไปจะจัดโดยใช้สองวิธีหลักคือ "หมวดหมู่" และ "วันที่"
  • โครงสร้างไดเรกทอรีพื้นฐาน:
    • bin
    • data
    • edata
    • mnt
    • usr/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 ความคิดเห็น

 
GN⁺ 2024-04-21
ความเห็นจาก Hacker News

ต่อไปนี้คือสรุปความคิดเห็นจากคอมเมนต์ใน Hacker News:

  • มีความไม่พอใจที่โฮมไดเรกทอรีถูกรกจากแอปพลิเคชันต่าง ๆ โดยเฉพาะ ~/go ซึ่งเป็นไดเรกทอรีเริ่มต้นของ Go modules ที่ถูกชี้ว่าเป็นปัญหา แม้จะแก้ได้ด้วยการตั้งค่า GOPATH แต่ก็มีความเห็นว่าค่าเริ่มต้นแบบนี้ไม่ดี
  • หากใช้เครื่องมือชื่อ xdg-ninja จะสามารถตั้งค่าให้แอปพลิเคชันส่วนใหญ่ทำตามมาตรฐาน XDG ได้ จึงช่วยจัดระเบียบโฮมไดเรกทอรีได้ดีขึ้น
  • มีความเห็นว่าแอปพลิเคชันบางตัวเก็บข้อมูลเซสชันขนาดหลายกิกะไบต์ไว้ในโฟลเดอร์ .config ทำให้สำรองข้อมูลลำบาก และข้อมูลการตั้งค่าควรถูกแยกออกจากข้อมูลเซสชัน
  • แต่ละคนมีความชอบเรื่องโครงสร้างไฟล์ไม่เหมือนกัน บางคนทำให้โฮมไดเรกทอรีแทบว่างเปล่าและใช้คลาวด์สตอเรจหรือพาร์ทิชันแยกต่างหาก อีกแนวทางหนึ่งคือเก็บ SSH keys ไว้ในตัวจัดการรหัสผ่าน
  • การจัดหมวดหมู่รูปภาพด้วยคีย์เวิร์ด EXIF เป็นวิธีที่ดีในการหลีกเลี่ยงปัญหาไฟล์ซ้ำ ส่วนชื่อไฟล์เอกสารอาจใช้รูปแบบ วันที่-คำอธิบาย.txt หรือ คีย์เวิร์ด-ชื่อเรื่อง-วันที่.txt
  • ควรแยกชื่อโฟลเดอร์สำหรับ GUI ด้วยตัวพิมพ์ใหญ่ และของ CLI ด้วยตัวพิมพ์เล็ก ~/dotfiles สามารถใช้เป็น Git repository สำหรับจัดการ dotfiles และสร้าง symbolic links ไว้ในโฮมไดเรกทอรีเพื่อความสะดวก
  • ~/projects สามารถใช้จัดการงานโดยสร้างไดเรกทอรีย่อยแยกตามโปรเจกต์ ส่วน ~/tmp ใช้เป็นพื้นที่เก็บไฟล์ชั่วคราวได้ และการจัดบันทึกไว้บนเว็บไซต์หรือใน Markdown ก็เป็นวิธีที่ดีเช่นกัน
  • ชื่อไดเรกทอรีจำนวนมากที่ขึ้นต้นด้วยตัว 'D' อาจทำให้สับสนได้ การสร้างโฟลเดอร์โปรเจกต์ตามปีและวันที่ และซ้อนลึกเพียงหนึ่งระดับ จะช่วยให้ค้นหาและเปิดดูได้ง่ายกว่า
  • สำหรับชื่อไฟล์และชื่อไดเรกทอรี การใช้ขีดกลางแทนขีดล่างมีข้อดีทั้งต่อ SEO และต่อการใช้งานในเทอร์มินัล
  • การสำรองข้อมูลสามารถใช้หลายบริการร่วมกัน เช่น Time Machine, Backblaze และ iCloud รวมถึงการเก็บไฟล์บีบอัดไว้ใน S3 ก็อาจเป็นวิธีที่ดีได้เช่นกัน