Di mana saya harus meletakkan cache aplikasi untuk aplikasi berbasis Unix?


10

Saya sedang membangun aplikasi command line, dan saya perlu menyimpan beberapa data temp ke file. Saya tidak tahu di mana konvensi untuk aplikasi untuk menyimpan cache mereka pada sistem berbasis unix (dalam hal ini Ubuntu 12.0.4)?

Jawaban:


12

"Sistem berbasis Unix" adalah kategori yang terlalu umum untuk membuat segala jenis penentuan yang berlaku umum yang akan berlaku untuk semua sistem berbasis Unix. Masalahnya adalah bahwa struktur sistem file (dan tempat "tepat" / "konvensional" untuk meletakkan sesuatu) sangat berbeda antara rasa "Unix" yang berbeda (jika Anda dapat menyebutnya demikian) sehingga Anda harus menanganinya. berdasarkan kasus per kasus.

Beberapa contoh:

  • Di Ubuntu, perpustakaan 64-bit masuk ke / usr / lib atau / usr / lib / x86_64-linux / dan perpustakaan 32-bit masuk ke / usr / lib32
  • Di Fedora, perpustakaan 64-bit masuk ke / usr / lib64 dan perpustakaan 32-bit masuk ke / usr / lib
  • Fedora tidak memiliki gagasan tentang / lib atau / bin lagi (mereka hanya symlinks ke direktori setara / usr)
  • Kebanyakan distro Linux lebih suka menginstal perangkat lunak yang diinstal pengguna (yaitu, perangkat lunak yang tidak disediakan oleh manajer paket) di / usr / local / (dengan lib, bin, dll, var, dan sebagainya di dalam / usr / local /)
  • Banyak distro Linux menggunakan / var / cache untuk cache, meskipun jika "sementara" (tidak masalah jika hilang), ia dapat disimpan di / tmp
  • Beberapa "app in a folder" jenis aplikasi menyimpan semuanya dalam subdirektori / opt (terutama installer clickwrap)
  • Beberapa aplikasi baru saja menginstal ke dalam subdirektori dari direktori ~ pengguna (biasanya / home / nama pengguna)
  • Pada Solaris, saya telah melihat / srv yang digunakan mirip dengan / opt, atau kadang-kadang / srv adalah www-root

Jawabannya adalah bahwa konvensi kanonik, dapat diterima secara sosial, dan terintegrasi dengan baik untuk tempat penyimpanan apa pun pada sistem operasi apa pun, apakah itu distro Linux, BSD, Solaris, HP-UX, dll. Bergantung pada keadaan yang tepat . Secara khusus:

  • Bagaimana paket didistribusikan?
  • Apakah pengguna memerlukan akses root untuk menginstalnya?
  • Apakah paket bergantung atau berintegrasi langsung dengan paket lain yang sudah ada di sistem, misalnya plugin atau add-on?
  • Apakah paket akan diintegrasikan ke dalam repositori hulu distribusi, sehingga pengguna dapat menggunakan perintah suka apt-getatau yummenginstalnya langsung tanpa mengunduh installer dari situs web?
  • Apakah perangkat lunak memiliki konfigurasi terpisah untuk setiap pengguna berbeda yang mengoperasikan komputer?
  • Apakah perangkat lunak memiliki pengaturan konfigurasi global yang hanya dapat dimodifikasi oleh administrator (root)?
  • Apakah perangkat lunak perlu diintegrasikan dengan sistem init (misalnya untuk memulai saat boot)?

Tidak ada jawaban langsung untuk ini tanpa mempertimbangkan semua faktor. Namun, untuk Ubuntu 12.04 khusus , jika Anda sedang membangun paket Anda menjadi .debfile untuk didistribusikan dalam PPA atau untuk mengirimkan ke repositori paket Ubuntu sendiri ( mainatau universe), saya akan merekomendasikan bahwa cache harus disimpan /var/cache. Tapi itu hanya untuk Ubuntu dan Anda tentu tidak boleh menerapkan asumsi bahwa setiap distro atau OS berbasis Unix akan menganggap ini dapat diterima.

Selain itu, jika tidak ada keuntungan untuk menyimpan data cache lintas boot sistem, saya pikir itu juga bisa berada di / tmp.

Perhatikan bahwa Anda akan mengalami masalah konvensi jalur ini untuk setiap jenis file yang digunakan program Anda: data bersama, file yang dapat dieksekusi, pustaka, file bantuan, gambar, suara, halaman web, dan seterusnya. Jadi saya harus bertanya-tanya, jika Anda bertanya tentang file cache, bagaimana Anda berencana untuk menangani jenis file lainnya. Apakah Anda hanya membuat asumsi naif dan berharap tidak ada yang tidak setuju dengan Anda? Jika Anda belum membaca dokumen atau standar Ubuntu yang menunjukkan di mana harus meletakkannya, itu adalah ide yang buruk untuk hanya mengasumsikan satu hal atau lainnya. Misalnya, selalu menempelkan pustaka di / usr / lib bisa menjadi kesalahan, karena tergantung pada situasi di mana perpustakaan tersebut berada.

Selain itu, sebagai pengembang perangkat lunak, saya pikir hal yang paling bertanggung jawab untuk dilakukan adalah memungkinkan pengguna akhir untuk memutuskan di mana harus meletakkan file mereka. Anda dapat mengatur default, tetapi pengguna (dan distributor) dapat dan akan menyesuaikan build agar sesuai dengan distro mereka.

Cara termudah untuk melakukan ini adalah membangun program Anda menggunakan GNU Autoconf . Autoconf adalah sistem build di mana pengguna dapat meneruskan argumen baris perintah ke skrip build untuk mengubah jalur berbagai "tipe direktori" dari standarnya. Hampir setiap distribusi memiliki skrip build untuk setiap paket Autoconf yang menetapkan direktori konvensional yang sesuai untuk setiap jenis distro. Mereka bahkan secara khusus memiliki tipe direktori untuk cache: sharedstatedir .


Pertama terima kasih banyak atas jawaban Anda, memang sangat detail. Sifat aplikasi (ruby) adalah untuk men-cache panggilan API yang menyajikan konten statis. Ini adalah aplikasi ruby, dan dari apa yang saya baca di tempat jawaban Anda untuk cache disk saya akan menjadi /tmpfolder. Jawaban untuk pertanyaan Anda adalah (unduh, tidak, tidak, tidak, tidak, tidak, tidak). Mungkin kelihatannya normal bagi kebanyakan orang untuk menyimpulkannya, /tmptetapi saya baru mengenal sistem unix dan konvensi berbasis ubuntu tidak asing bagi saya. Ini membuka ide menarik untuk gem untuk memungkinkan caching disk agnostik (agnostik pengguna). Terima kasih, +1 dari saya.
Dolphin

Perhatikan bahwa sistem permata ruby ​​sebagaimana diinstal pada sebagian besar distro Linux memiliki direktori yang sangat spesifik di mana permata diinstal oleh gemalat. Namun, mungkin tidak tepat untuk membuat file saat runtime dalam direktori yang sama tempat aplikasi Anda diunduh oleh gem. Di sisi lain, jika Anda menjalankan aplikasi sebagai pengguna, Anda memerlukan direktori yang baca-tulis untuk pengguna , dan itu berarti mengubah izin (yang membutuhkan lebih banyak pekerjaan integrasi sistem pada waktu instalasi seperti membuat grup dll), atau menggunakan direktori baca-tulis global, misalnya / tmp.
allquixotic

Anda tidak bisa, dan tidak boleh menulis data ke /usr, /libatau /bindari aplikasi Anda.
ctrl-alt-delor
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.