Mencegah direktori di / tmp dihapus

10

Saya sering menggunakan /tmpdirektori pada mesin Linux saya untuk menyimpan file sementara (mis. PDF dari situs yang ingin saya unduh terlebih dahulu dll.) Dan saya sering membuat direktori dengan nama pengguna saya. Tetapi pada setiap startup itu (termasuk semua file) akan dihapus. Sekarang saya tahu saya bisa memasukkannya /var/tmp, tetapi saya ingin semua isinya dihapus, tetapi untuk direktori itu sendiri yang harus disimpan. Begitu:

tmp
 |- me # this should stay
 |  |- foo1 # this should be deleted...
 |  |- bar1 # ...and this as well
 |- other stuff...

Apakah ada cara untuk melakukan ini? Mungkin dengan izin atau dengan konfigurasi khusus?

Linux4win
sumber
1
Sebagai solusinya, Anda mungkin memasukkan beberapa kode ke file login shell Anda untuk "test & mkdir" sesuai kebutuhan.
Jeff Schaller
3
/tmpkemungkinan merupakan tmpfssistem file. File-file itu tidak benar-benar dihapus; mereka hanya disimpan dalam RAM dan hilang saat reboot. Itu sebabnya Anda mendapatkan jawaban yang bermula untuk "membuat ulang saat boot atau masuk"
MSalters

Jawaban:

4

Salah satu solusinya adalah menggunakan @rebootpekerjaan cron:

@reboot mkdir -p "/tmp/$USER"

Menambahkan ini ke crontab Anda crontab -eakan membuatnya dijalankan setiap kali mesin dinyalakan.

Atau, gunakan

mkdir -p "/tmp/$USER"

dalam file startup shell Anda.

Dalam kedua kasus itu, Anda mungkin juga ingin menggunakannya

TMPDIR=/tmp/$USER
export TMPDIR

dalam file startup shell Anda jika Anda ingin menggunakan direktori itu sebagai direktori sementara default.

Kusalananda
sumber
Apakah ini a) membuat direktori untuk semua pengguna dan b) memicu dari startup 'dingin' juga?
Linux4win
1
@ Linux4win Jawaban ini menjawab kebutuhan pengguna tunggal, karena ini adalah bagaimana Anda mengucapkan pertanyaan. Tidak masalah bagaimana mesin di-boot (panas, dingin, atau suam-suam kuku), tetapi tidak akan terpicu ketika melanjutkan dari hibernasi (karena itu bukan booting).
Kusalananda
Untuk beberapa alasan menambah @reboot mkdir -p "/tmp/$USER"akhir crontab tidak melakukan apa-apa, saat menjalankan mkdir -p "/tmp/$USER"sebenarnya membuat direktori. /tmp
Ngomong
@ Linux4win @rebootPekerjaan cron tidak membuat direktori? Apakah Anda menerima email yang dikirim ke akun Anda dengan pesan kesalahan dari cron daemon?
Kusalananda
baik tidak ... Mungkin karena saya belum mengkonfigurasi mail? Atau itu tidak diperlukan?
Linux4win
14

Saya menggunakan pam-tmpdiruntuk ini: itu menciptakan direktori sementara pengguna-pribadi saat masuk. Untuk mengaturnya, tambahkan

session optional pam_tmpdir.so

ke layanan PAM yang sesuai; pada sistem berbasis Debian, menginstal libpam-tmpdirpaket akan menawarkan untuk melakukan ini untuk Anda, atau Anda dapat menambahkan baris ke /etc/pam.d/common-session. Lain kali Anda masuk, Anda akan menemukan direktori di bawah /tmp/userdengan id pengguna Anda, TMPdan TMPDIRmengaturnya dengan tepat.

Stephen Kitt
sumber
7
Bisakah Anda menjelaskan apa layanan PAM yang sesuai dan bagaimana jalur tersebut dapat ditambahkan? File apa yang harus diedit?
terdon
2

Jika Anda tidak menjalankan sistem dengan systemd dan menggunakan systemd-tmpfiles untuk mengelola pembersihan, maka Anda harus mengkonfigurasi direktori menggunakan sistem itu.

Berikut dokumentasi lengkapnya . Anda mungkin dapat mencapai apa yang Anda inginkan dengan membuat /etc/tmpfiles.d/something.confdengan konten seperti:

d     /tmp/your_username   0750 your_user your_group  - -
viraptor
sumber
1

Seperti yang ditunjukkan dalam komentar, /tmpuntuk file yang sementara dan tidak akan terlewatkan jika dihapus. Jika Anda berada di tengah-tengah sesuatu dan mesin dinyalakan ulang, apa pun yang Anda tulis di sana akan menghilang dan Anda harus memulai dari awal, yang berarti file-file itu mungkin tidak bersifat sementara.

Saya memelihara direktori sementara di direktori home saya selama bertahun-tahun mulai ketika satu gigabyte banyak ruang dan menemukan bahwa diperlukan perawatan berkala untuk menyingkirkan file yang telah menjadi tua dan kasar. Sebagian besar waktu yang tersisa setelah proses itu kurang dari beberapa minggu, jadi sekarang saya membersihkannya dengan pekerjaan cron yang berjalan sekali sehari:

find $HOME/tmp -depth -mtime +30 -print0 | xargs -0 -r rm -rf

Apa pun yang saya unduh atau buat sebagai semi-sementara masuk ke sana dan sistem membersihkan apa pun yang saya tinggalkan. Apa pun yang membutuhkan rumah permanen memerlukan waktu lama sebelum pekerjaan cron menyingkirkannya.

Blrfl
sumber
mkdir a a/b; touch a/b/c. Sekarang tunggu hingga 30 hari Anda telah berakhir. Ketika Anda menghapusnya cakan diperbarui b, yang berarti harus menunggu selama 30 hari. Begitu juga dengan asaat Anda menghapus b. Kedua, jika Anda membuat file btetapi tidak menyentuh aselama 30 hari, adirektori akan terkena rm -rfdan menghapus file terbaru Anda di bawah b.
roaima
find "$HOME"/tmp -mtime +30 -type f -delete; find "$HOME/tmp" -depth -mmin +60 -type d -exec rmdir {} + 2>/dev/nullbekerja untuk saya
roaima