Bagaimana cara membersihkan / tmp?

74
rizhas@rizhas-laptop:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda7        67G   58G  5,2G  92% /
none            4,0K     0  4,0K   0% /sys/fs/cgroup
udev            1,5G   12K  1,5G   1% /dev
tmpfs           303M  1,2M  302M   1% /run
none            5,0M     0  5,0M   0% /run/lock
none            1,5G  348K  1,5G   1% /run/shm
none            100M   80K  100M   1% /run/user
overflow        1,0M  1,0M     0 100% /tmp
overflow        1,0M  1,0M     0 100% /tmp

Bagaimana cara membersihkannya /tmp?

Rizhas
sumber
1
Mungkin dijawab di Unix & Linux . Tidak yakin apakah itu membuat pertanyaan ini duplikat.
drc
nggak @drc tapi temukan bagus. Saya menggunakan tautan dari sana untuk memperbarui jawaban saya.
Rinzwind
1
Lihat juga Bagaimana direktori / tmp dibersihkan?
Pasang kembali Monica - M. Schröder
Terkait: unix.stackexchange.com/questions/11235/is-it-safe-to-rm-rf-tmp | superuser.com/questions/499039/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Jawaban:

117

/ tmp seharusnya dibersihkan saat reboot, tetapi jika Anda tidak reboot (yang normal untuk server), pembersihan tidak akan terjadi

find /tmp -ctime +10 -exec rm -rf {} +

akan menghapus semua file dan folder yang lebih lama dari 10 hari. Anda mungkin ingin menambahkannya ke cron harian.


MEMPERBARUI

Dalam komentar di bawah ini @sfussenegger merekomendasikan format yang sedikit berbeda dari perintah ini yang mungkin lebih cocok untuk kebutuhan Anda dan sistem yang Anda operasikan.

sudo find /tmp -type f -atime +10 -delete

Di sini perintah digunakan sudountuk memastikan semuanya dihapus (atau Anda dapat menjalankannya sebagai root), beroperasi pada file yang belum diakses selama lebih dari 10 hari dan hanya menghapus file, bukan folder . Ini juga digunakan -deleteuntuk menghindari keharusan menjalankan rmperintah

Andrei R
sumber
2
alih-alih waktu pembuatan (-ctime) Anda mungkin ingin menggunakan waktu akses (-atime) sebagai gantinya - tentu saja hanya jika filesystem menyimpan informasi ini (periksa noatime di / etc / fstab)
sfussenegger
7
ok, tolong tahan dengan saya tetapi ada satu hal lagi: Anda hanya ingin mencari file ( -type f). jika tidak, Anda mungkin menemukan bahwa induk dari pohon direktori belum diakses untuk sementara waktu dan menghapus semua kontennya yang berpotensi masih digunakan. jadi perintah terakhir yang saya rekomendasikan adalahsudo find /tmp -type f -atime +10 -delete
sfussenegger
2
@ sfussenegger, mungkin Anda bisa mempromosikan komentar Anda menjadi sebuah jawaban? Saya pikir itu lebih baik daripada "disembunyikan" di komentar.
Jonathan
34

Anda dapat mengasumsikan bahwa apa pun di dalam direktori tmp (/ tmp / / usr / tmp dll) dapat dihapus. SEBELUM Anda mulai menghapus, hentikan semua program dan layanan yang Anda gunakan karena / tmp / dapat digunakan oleh program untuk menyimpan sementara informasi untuk sesi itu. Jadi lakukan a sudo service mysql stopdan sudo service apache2 stopjika Anda menjalankan mysql dan / atau apache. Nama file dalam direktori / tmp / paling sering memberikan petunjuk untuk program apa yang mereka miliki.

Jadi dari baris perintah ...

cd /tmp/
pwd
sudo rm -r *

akan mengosongkan direktori / tmp / dan menghapus semua file dan subdirektori. Hati-hati mengetiknya dengan benar. Perintah pwddi sana tidak perlu tetapi harus ditampilkan /tmp.

Jika Anda menginginkannya secara interaktif (jadi Anda perlu mengonfirmasi penghapusan):

cd /tmp/
sudo rm -ri *

Juga perlu dicatat bahwa reboot akan menghapus / tmp juga seperti yang ditunjukkan di sini: Bagaimana direktori / tmp dibersihkan? Jadi jika / tmp / penuh dengan file setelah reboot, Anda perlu menyelidiki dari mana file-file itu berasal.

Saya juga ingin menyatakan bahwa 1 Mb untuk / tmp tidak banyak ruang. Apakah Anda menggunakan MySQL? Lihat https://unix.stackexchange.com/a/76058/10017 tentang cara memperbaikinya (terima kasih @drc)

Rinzwind
sumber
2
"tanpa ada salahnya" berlaku untuk file yang berasal dari sebelum reboot terakhir. Kalau tidak, bisa digunakan oleh program saat ini dan (untuk program itu) dapat menyebabkan masalah ... misalnya saya punya skrip yang membuat file di / tmp, dan kemudian membacanya lagi untuk melakukan langkah selanjutnya dalam memproses . menghapus / memotong mereka di antara akan mengganggu tindakan program (dan bahkan dapat menyebabkan hasil yang berbahaya, tergantung untuk apa file-file itu digunakan)
Olivier Dulac
... jadi menggunakan who –b(tanggal boot terakhir), dan kemudian membuat file / boottime tanggal pada saat boot ( touch ....... /boottime), akan memungkinkan seseorang untuk melakukan yang aman find /tmp -type f \( ! -newer /boottime \) -delete \;, menghapus hanya file yang lebih tua dari boot terakhir
Olivier Dulac
Bolehkah saya menggunakan komentar ini untuk memperluas jawabannya? Pikiran Anda: / tmp di sini mungkin dari mysql.
Rinzwind
4
Sebagai orang yang menggunakan mktempsecara teratur dalam skrip saya, saya sangat tidak setuju dengan pernyataan "tanpa membahayakan".
hytromo
2
Jika /tmpberisi sesuatu yang lebih tua dari reboot terakhir, maka skrip startup belum melakukan tugasnya.
Simon Richter
10

The tmpreaperprogram dapat digunakan untuk membersihkan / tmp secara berkala. Program ini menghapus semua yang belum diakses dalam jangka waktu tertentu, biasanya dua minggu. Agar ini berfungsi dengan baik, sistem file yang atimesdihidupkan harus mengaktifkan opsi. Jika Anda menggunakan tmpfs , yang tampaknya Anda lakukan, maka Anda seharusnya baik-baik saja.

Tentu saja, me-reboot juga membersihkan / tmp , tapi itu akan membosankan.

Simon Richter
sumber
Sangat mengejutkan bagi saya bahwa ini bukan opsi standar di Ubuntu dan Debian. Sangat umum bagi saya untuk mengalami proses pengguna yang relatif tidak terpenuhi yang mengisi / tmp.
bijak
1
Ya, tapi ini kebijakan yang perlu ditetapkan oleh administrator sistem. Jika Anda memiliki layanan jangka panjang yang mengharapkan data mereka disimpan, default apa pun kecuali "tidak ada pembersihan" akan berbahaya.
Simon Richter
7

Direktori /tmpberarti sementara.

Direktori ini menyimpan data sementara. Anda tidak perlu menghapus apa pun darinya, data yang terkandung di dalamnya akan dihapus secara otomatis setelah setiap reboot.

Masih jika Anda ingin menghapus data yang ada di dalamnya gunakan

sudo rm -r /tmp/*

menghapusnya tidak akan menimbulkan masalah karena ini adalah file sementara.

Tarun
sumber
9
Mereka bersifat sementara dalam arti bahwa mereka tidak diperlukan setelah mem-boot ulang, itu tidak berarti mereka tidak dibutuhkan saat ini atau bahwa mereka tidak diperlukan dalam 5 menit
Daniel Serodio
5
Tidak benar bahwa ini "tidak akan menimbulkan masalah." Saya melakukan ini sekali sebelum saya tahu lebih baik dan pada dasarnya menyemprot mesin saya.
Kyle Strand
Lihat juga unix.stackexchange.com/q/11235/38050
Kyle Strand
4

Berhati-hatilah sebelum menjalankan perintah seperti rm -r ./*. Setelah Anda menjalankannya, akan sangat sulit atau tidak mungkin untuk memulihkan data apa pun.

Semua akan dihapus. Pastikan direktori yang Anda hapus benar.

Ada cara yang lebih aman untuk menangani berbagai hal.

# sudo rm -r /tmp/*

Dengan begitu, ketika Anda secara tidak sengaja menjalankan perintah ini dari dalam shell Anda history, itu tidak akan menghapus file yang salah (kecuali Anda menyimpannya /tmp).


sumber
2

The /tmpdirektori dibersihkan secara default di setiap boot, karena TMPTIMEadalah 0secara default.

Avinash Raj
sumber
1

Jika mount "/ tmp" Anda pada sistem file linux dipasang sebagai overflow (sering berukuran 1MB), ini kemungkinan karena Anda tidak menentukan "/ tmp" sebagai partisi sendiri dan sistem file root Anda terisi dan "/ tmp" telah ditulis ulang sebagai mundur. Untuk memperbaikinya setelah Anda mengosongkan ruang, cukup unmount fallback dan itu harus dipasang kembali pada titik aslinya:

sudo umount overflow

jika perangkat sibuk digunakan

sudo umount -l overflow
ck reddy
sumber