ฉันควรใส่แคชแอปพลิเคชันของฉันไว้ที่ไหนสำหรับแอพที่ใช้ Unix


10

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

คำตอบ:


12

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

ตัวอย่างบางส่วน:

  • บน Ubuntu ไลบรารี 64 บิตไปที่ / usr / lib หรือ / usr / lib / x86_64-linux / และไลบรารี 32 บิตไปที่ / usr / lib32
  • บน Fedora ไลบรารี 64 บิตไปที่ / usr / lib64 และไลบรารี่ 32- บิตเข้าไปที่ / usr / lib
  • Fedora ไม่มีแนวคิดเกี่ยวกับ / lib หรือ / bin อีกต่อไป (มันเป็นแค่ symlink ในไดเรกทอรีเทียบเท่า / usr)
  • Linux distros ส่วนใหญ่ต้องการติดตั้งซอฟต์แวร์ที่ผู้ใช้ติดตั้ง (นั่นคือซอฟต์แวร์ที่ไม่ได้จัดทำโดยตัวจัดการแพคเกจ) ใน / usr / local / (พร้อม lib, bin, etc, var และอื่น ๆ ภายใน / usr / local /)
  • Linux distros จำนวนมากใช้ / var / cache สำหรับแคชแม้ว่าจะเป็น "ชั่วคราว" (ไม่สำคัญว่าจะสูญหายหรือไม่) ก็สามารถเก็บไว้ใน / tmp
  • แอปพลิเคชั่นประเภท "แอพในโฟลเดอร์" บางอย่างเก็บทุกอย่างในไดเรกทอรีย่อยของ / opt (โดยเฉพาะโปรแกรมติดตั้ง clickwrap)
  • แอพบางตัวเพิ่งติดตั้งในไดเรกทอรีย่อยของไดเรกทอรี ~ ของผู้ใช้ (โดยปกติ / home / ชื่อผู้ใช้)
  • บน Solaris ฉันเคยเห็น / srv ใช้คล้ายกับ / opt หรือบางครั้ง / srv เป็น www-root

คำตอบก็คือว่ายอมรับได้รับการยอมรับทางสังคมดีแบบบูรณาการประชุมสำหรับการที่จะเก็บอะไรกับระบบปฏิบัติการใด ๆ ไม่ว่าจะเป็น distro ของ Linux, BSD, Solaris, HP-UX ฯลฯขึ้นอยู่กับสถานการณ์ที่แท้จริง โดยเฉพาะ:

  • แพ็คเกจมีการกระจายอย่างไร?
  • ผู้ใช้ต้องการการเข้าถึงรูทเพื่อติดตั้งหรือไม่?
  • แพคเกจนั้นขึ้นอยู่กับหรือรวมเข้ากับแพ็คเกจอื่น ๆ บนระบบอยู่แล้วเช่นปลั๊กอินหรือส่วนเสริมหรือไม่?
  • แพคเกจจะถูกรวมเข้ากับที่เก็บอัปสตรีมของการแจกจ่ายหรือไม่เพื่อให้ผู้ใช้สามารถใช้คำสั่งเช่นapt-getหรือyumติดตั้งโดยตรงโดยไม่ต้องดาวน์โหลดตัวติดตั้งออกจากเว็บไซต์
  • ซอฟต์แวร์จะมีการกำหนดค่าแยกต่างหากสำหรับผู้ใช้แต่ละคนที่ทำงานกับคอมพิวเตอร์หรือไม่
  • ซอฟต์แวร์จะมีการตั้งค่าระดับโลกที่ผู้ดูแลระบบควรจะแก้ไขได้หรือไม่
  • ซอฟต์แวร์จำเป็นต้องรวมเข้ากับระบบ init (เช่นเพื่อเริ่มการบูท) หรือไม่?

ไม่มีคำตอบตรงนี้โดยไม่คำนึงถึงปัจจัยทั้งหมด อย่างไรก็ตามสำหรับUbuntu 12.04 โดยเฉพาะถ้าคุณกำลังสร้างแพคเกจของคุณให้เป็น.debไฟล์ที่จะกระจายใน PPA หรือส่งไปยังอูบุนตูของ repositores แพคเกจของตัวเอง ( mainหรือuniverse) /var/cacheผมอยากจะแนะนำว่าแคชควรเก็บไว้ใน แต่นั่นเป็นเพียงสำหรับ Ubuntuและคุณไม่ควรใช้สมมติฐานอย่างแน่นอนว่าทุกระบบปฏิบัติการ distro หรือ Unix จะพิจารณาว่าเป็นที่ยอมรับได้

นอกจากนี้หากไม่มีข้อได้เปรียบในการบันทึกข้อมูลแคชข้ามบูทของระบบฉันคิดว่ามันอาจเป็นของ / tmp

โปรดทราบว่าคุณจะพบกับปัญหาการประชุมที่มีการกำหนดเส้นทางเหล่านี้สำหรับไฟล์ทุกประเภทที่โปรแกรมของคุณใช้: ข้อมูลที่แชร์ไฟล์ที่ปฏิบัติการได้ห้องสมุดไฟล์ช่วยเหลือภาพเสียงเสียงหน้าเว็บและอื่น ๆ ดังนั้นฉันต้องสงสัยว่าถ้าคุณถามเกี่ยวกับไฟล์แคชว่าคุณวางแผนที่จะจัดการกับไฟล์ประเภทอื่นอย่างไร คุณแค่ทำตัวไร้เดียงสาและหวังว่าจะไม่มีใครไม่เห็นด้วยกับคุณ? หากคุณยังไม่ได้อ่านเอกสารหรือมาตรฐานของ Ubuntu ใด ๆ ที่แนะนำสถานที่ที่จะนำพวกเขาไปมันเป็นความคิดที่ไม่ดีเลยที่จะสมมติแค่เรื่องใดเรื่องหนึ่ง ตัวอย่างเช่นการผสานไลบรารีใน / usr / lib อาจเป็นความผิดพลาดได้ขึ้นอยู่กับสถานการณ์ที่อาจเป็นของที่อื่น

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

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


ก่อนอื่นขอบคุณมากสำหรับคำตอบของคุณโดยละเอียดมาก ๆ ธรรมชาติของแอปพลิเคชัน (ruby) คือการแคชการเรียก API ที่ให้บริการเนื้อหาแบบคงที่ นี่เป็นแอปพลิเคชั่นทับทิมและจากสิ่งที่ฉันได้อ่านในคำตอบของคุณสำหรับดิสก์แคชของฉันจะเป็น/tmpโฟลเดอร์ คำตอบสำหรับคำถามของคุณคือ (ดาวน์โหลด, ไม่, ไม่, ไม่, ไม่, ไม่, ไม่) อาจดูเหมือนเป็นเรื่องปกติสำหรับคนส่วนใหญ่ที่จะสรุปว่าเป็น/tmpแต่ฉันใหม่สำหรับระบบยูนิกซ์และการประชุมแบบใช้อูบุนตูที่ไม่คุ้นเคยกับฉัน สิ่งนี้จะเปิดแนวคิดที่น่าสนใจสำหรับ gem เพื่ออนุญาตการใช้แคชกับผู้ไม่เชื่อเรื่องพระเจ้า (ผู้ไม่เชื่อเรื่องพระเจ้า) ขอบคุณ +1 จากฉัน
โลมา

โปรดทราบว่าระบบ ruby ​​gem ที่ติดตั้งบน Linux distros ส่วนใหญ่มีไดเรกทอรีเฉพาะที่มีการติดตั้งอัญมณีโดยgemเครื่องมือ อย่างไรก็ตามมันอาจจะไม่เหมาะสมในการสร้างไฟล์ที่รันไทม์ภายในไดเรกทอรีเดียวกันซึ่งอัญมณีของแอปพลิเคชันของคุณดาวน์โหลด ในทางกลับกันหากคุณใช้แอพในฐานะผู้ใช้คุณต้องมีไดเรกทอรีที่อ่าน - เขียนสำหรับผู้ใช้และนั่นหมายถึงการเปลี่ยนการอนุญาต (ซึ่งต้องใช้การรวมระบบมากขึ้นในเวลาติดตั้งเช่นการสร้างกลุ่ม ฯลฯ ) หรือใช้ไดเรกทอรีอ่าน - เขียนทั่วโลกเช่น / tmp
allquixotic

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