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)?
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:
"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:
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:
apt-get
atau yum
menginstalnya langsung tanpa mengunduh installer dari situs web?Tidak ada jawaban langsung untuk ini tanpa mempertimbangkan semua faktor. Namun, untuk Ubuntu 12.04 khusus , jika Anda sedang membangun paket Anda menjadi .deb
file untuk didistribusikan dalam PPA atau untuk mengirimkan ke repositori paket Ubuntu sendiri ( main
atau 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 .
gem
alat. 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.
/usr
, /lib
atau /bin
dari aplikasi Anda.
/tmp
folder. Jawaban untuk pertanyaan Anda adalah (unduh, tidak, tidak, tidak, tidak, tidak, tidak). Mungkin kelihatannya normal bagi kebanyakan orang untuk menyimpulkannya,/tmp
tetapi 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.