Saya mulai menulis beberapa skrip bash untuk proyek saya dan mereka memerlukan beberapa file perantara atau variabel untuk ditulis.
Saya ingin tahu folder mana yang dapat saya yakin memiliki akses ketika seseorang menjalankan skrip saya? Apakah ini praktik yang biasa digunakan /tmp/
? Atau haruskah saya menggunakan sesuatu yang lain?
scripting
filesystems
directory-structure
tmp
Pemrograman Noob
sumber
sumber
Jika Anda perlu menulis beberapa file sementara yang hanya berlangsung selama skrip atau aplikasi Anda berjalan, gunakan direktori yang ditunjukkan oleh
TMPDIR
variabel lingkungan, atau jika variabel itu tidak didefinisikan/tmp
,./tmp
dihapus saat boot pada beberapa sistem (kadang-kadang bahkan dalam RAM, misalnya secara default pada Solaris, dan pada beberapa instalasi Linux), sehingga tidak dapat digunakan untuk file yang harus selamat dari kegagalan daya atau reboot./var/tmp
dapat digunakan untuk file yang harus selamat dari reboot, tetapi itu dapat dibersihkan oleh administrator sistem dari waktu ke waktu. Jika aplikasi Anda perlu menyimpan file secara permanen, tulis di suatu tempat di direktori home pengguna (di~/.programmingnoobsapp
atau~/.cache/programmingnoobsapp
) atau di bawah/var/lib/programmingnoobsapp
atau/var/cache/programmingnoobsapp
.Catatan yang
/tmp
dibagikan di antara semua pengguna, jadi Anda harus berhati-hati saat membuat file di sana. Anda perlu memilih nama file yang belum ada, dan Anda harus berhati-hati untuk tidak mengizinkan kondisi balapan di mana proses lain membuat file di depan Anda dengan izin yang berbeda, yang bisa menjadi lubang keamanan (jika proses lain berjalan sebagai pengguna yang berbeda, kemudian dapat mengakses dan memodifikasi data proses Anda). Gunakanmktemp
perintah untuk membuat file di/tmp
atau/var/tmp
. Secara default,mktemp
membuat file di$TMPDIR
, atau/tmp
jikaTMPDIR
tidak disetel, yang biasanya merupakan tempat yang tepat. Jika Anda perlu menggunakan beberapa file sementara, atau bahkan jika Anda memerlukan satu file saja, saya sarankan membuat direktori untuk semua file sementara Anda denganmktemp -d
dan menghapusnya di akhir skrip Anda.sumber
mktemp
. Bagi saya ini adalah jawaban yang benar: mendelegasikan tugas membuat file sementara dengan amanmktemp
(lihat artikel ini ). Meskipun satu jawaban mengutipFHS
memiliki nilai yang besar juga.tmp_root
sebelum menetapkannya? Bukankah itu lebih alamiunset
?set -u
, tapi itu tidak biasa). Itu harus (tidak) diatur ke nilai yang aman sebelum mengatur jebakan, jika skrip terbunuh tepat setelah mengatur jebakan.set -o errexit
sehingga jikatmp_root
sudah diatur read-only di lingkungan itu tidak akan menghancurkan direktori yang salah ...Hanya untuk melengkapi jawaban yang sudah diposting sejauh ini.
Ada juga
/dev/shm
pada beberapa distribusi Linux yang dapat digunakan untuk penyimpanan sementara. Penyimpanan ini hanya boleh digunakan ketika kinerja file I / O adalah faktor penting yang diberikan/dev/shm
memanfaatkantmpfs
sistem file. Juga harus digunakan untuk file & data berukuran cukup. Thetmpfs
merek filesystem menggunakan sistem RAM sebagai penyimpanan sehingga tidak terus-menerus dari boot untuk booting.Ada tinjauan umum yang baik dari semua pilihan yang disebutkan di sini di StackOverflow juga dalam T&J ini berjudul: / tmp vs. / dev / shm untuk penyimpanan file temp di Linux? . Ini tercakup dengan baik dalam Tanya Jawab Pengguna Super ini berjudul: Kapan saya harus menggunakan / dev / shm / dan kapan saya harus menggunakan / tmp? .
Referensi
sumber
Ya,
/tmp
sebagian besar untuk file yang diperlukan sementara. / Tmp memiliki sedikit lengket yang berarti hanya pemilik item, pemilik direktori, atau superuser yang dapat mengganti nama atau menghapus file. banyak program menggunakan ini untuk membuat file kunci dan untuk penyimpanan data sementara. Pada beberapa distribusi direktori ini dihapus pada saat bootup atau shutdown.sumber