Làm thế nào để làm sạch / 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

Làm thế nào để dọn dẹp /tmp?


1
Có lẽ đã trả lời trên Unix & Linux . Không chắc chắn rằng điều đó làm cho câu hỏi này là một bản sao.
drc

Không @drc nhưng tìm tốt. Tôi đã sử dụng một liên kết từ đó để cập nhật câu trả lời của tôi.
Rinzwind


Câu trả lời:


117

/ tmp được cho là sẽ được dọn sạch khi khởi động lại, nhưng nếu bạn không khởi động lại (điều này là bình thường đối với máy chủ), việc dọn dẹp sẽ không xảy ra

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

sẽ xóa tất cả các tệp và thư mục cũ hơn 10 ngày. bạn có thể muốn thêm nó vào cron hàng ngày.


CẬP NHẬT

Trong các bình luận bên dưới @sfussalanger đề xuất một định dạng hơi khác của lệnh này có thể phù hợp hơn với nhu cầu của bạn và với hệ thống bạn đang hoạt động.

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

Ở đây, lệnh đang sử dụng sudođể đảm bảo mọi thứ sẽ bị xóa (hoặc bạn có thể chạy nó dưới quyền root), hoạt động trên các tệp không được truy cập trong hơn 10 ngày và chỉ xóa các tệp, không phải các thư mục . Nó cũng sử dụng -deleteđể tránh phải thực thi rmlệnh


2
thay vì thời gian tạo (-ctime), bạn có thể muốn sử dụng thời gian truy cập (-atime) thay vào đó - tất nhiên chỉ khi hệ thống tập tin lưu giữ thông tin này (kiểm tra thời gian chờ trong / etc / fstab)
sfussalanger

7
ok, xin vui lòng chịu đựng với tôi nhưng có một điều nữa: bạn chỉ muốn tìm kiếm tệp ( -type f). nếu không, bạn có thể thấy rằng cha mẹ của cây thư mục đã không được truy cập trong một thời gian và xóa tất cả nội dung của nó có khả năng vẫn có thể được sử dụng. vì vậy lệnh cuối cùng tôi muốn giới thiệu làsudo find /tmp -type f -atime +10 -delete
sfussalanger

2
@sfussalanger, có lẽ bạn có thể quảng bá ý kiến ​​của mình để trả lời? Tôi nghĩ rằng nó là tốt hơn so với "ẩn" trong các ý kiến.
Jonathan

34

Bạn có thể giả sử rằng mọi thứ trong thư mục tmp (/ tmp / / usr / tmp, v.v.) đều có thể bị xóa. TRƯỚC KHI bạn bắt đầu xóa dừng tất cả các chương trình và dịch vụ bạn đang sử dụng vì / tmp / có thể được sử dụng bởi các chương trình để tạm thời lưu trữ thông tin cho phiên đó. Vì vậy, làm một sudo service mysql stopsudo service apache2 stopnếu bạn có một mysql và / hoặc apache đang chạy. Tên của các tệp trong thư mục / tmp / hầu hết đều đưa ra manh mối về chương trình chúng thuộc về.

Vậy từ dòng lệnh ...

cd /tmp/
pwd
sudo rm -r *

sẽ làm trống thư mục / tmp / và xóa tất cả các tệp và thư mục con. Hãy cẩn thận để gõ nó chính xác. Lệnh pwdtrong đó không cần thiết nhưng nên hiển thị /tmp.

Nếu bạn muốn nó tương tác (vì vậy bạn cần xác nhận xóa):

cd /tmp/
sudo rm -ri *

Cũng đáng lưu ý rằng khởi động lại sẽ xóa / tmp như được hiển thị ở đây: Thư mục / tmp được dọn sạch như thế nào? Vì vậy, nếu / tmp / có đầy các tệp sau khi khởi động lại, bạn cần điều tra xem các tệp đó bắt nguồn từ đâu.

Tôi cũng muốn nói rằng 1 Mb cho / tmp không có nhiều dung lượng. Bạn đang sử dụng MySQL? Xem https://unix.stackexchange.com/a/76058/10017 về cách khắc phục điều này (cảm ơn @drc)


2
"không có hại" là đúng đối với các tệp có từ trước lần khởi động lại cuối cùng. Mặt khác, nó có thể được sử dụng bởi một chương trình hiện tại và (đối với chương trình đó) có thể gây ra sự cố ... ví dụ: tôi có các tập lệnh tạo tệp trong / tmp, sau đó đọc lại chúng để thực hiện bước tiếp theo xử lý . xóa / cắt bớt chúng ở giữa sẽ phá vỡ các hành động của chương trình (và thậm chí có thể dẫn đến kết quả nguy hiểm, tùy thuộc vào những tệp được sử dụng cho mục đích gì)
Olivier Dulac

... Vì vậy, bằng cách sử dụng who –b(ngày khởi động cuối cùng), sau đó tạo tệp / thời gian khởi động vào thời điểm khởi động ( touch ....... /boottime), sẽ cho phép một người thực hiện an toàn find /tmp -type f \( ! -newer /boottime \) -delete \;, chỉ xóa các tệp cũ hơn lần khởi động trước
Olivier Dulac

Tôi có thể sử dụng những bình luận này để mở rộng câu trả lời không? Xin lưu ý bạn: / tmp ở đây có lẽ là từ mysql.
Rinzwind

4
Là một người sử dụng mktempthường xuyên trong các kịch bản của mình, tôi hoàn toàn không đồng ý với tuyên bố "không gây hại".
hytromo

2
Nếu /tmpchứa bất cứ thứ gì cũ hơn lần khởi động lại trước, thì các kịch bản khởi động đã không thực hiện công việc của chúng.
Simon Richter

10

Các tmpreaperchương trình có thể được sử dụng để làm sạch / tmp theo định kỳ. Chương trình này xóa mọi thứ không được truy cập trong một khung thời gian nhất định, thường là hai tuần. Để điều này hoạt động chính xác, hệ thống tập tin được bật sẽ có atimestùy chọn được bật. Nếu bạn sử dụng một tmpfs , có vẻ như bạn đang làm, thì bạn sẽ ổn thôi.

Tất nhiên, khởi động lại cũng xóa / tmp , nhưng điều đó sẽ nhàm chán.


Điều đáng ngạc nhiên với tôi rằng đây không phải là một tùy chọn tiêu chuẩn trong Ubuntu và Debian. Nó là khá phổ biến đối với tôi để chạy vào các quá trình người dùng tương đối không có đặc quyền điền / tmp.
hiền triết

1
Có, nhưng đó là một chính sách cần được quản trị viên hệ thống đặt ra. Nếu bạn có các dịch vụ chạy dài mà mong muốn dữ liệu của họ được lưu giữ, bất kỳ mặc định nào nhưng "không làm sạch" sẽ nguy hiểm.
Simon Richter

7

Thư mục /tmpcó nghĩa là tạm thời.

Thư mục này lưu trữ dữ liệu tạm thời. Bạn không cần phải xóa bất cứ thứ gì khỏi nó, dữ liệu chứa trong đó sẽ tự động bị xóa sau mỗi lần khởi động lại.

Tuy nhiên, nếu bạn muốn xóa dữ liệu trong đó sử dụng

sudo rm -r /tmp/*

xóa khỏi nó sẽ không gây ra vấn đề gì vì đây là những tập tin tạm thời.


9
Chúng tạm thời theo nghĩa là chúng không cần thiết sau khi khởi động lại, điều đó không có nghĩa là chúng không cần thiết ngay bây giờ hoặc chúng sẽ không cần thiết trong 5 phút
Daniel Serodio

5
Sự thật là "điều này sẽ không gây ra vấn đề gì." Tôi đã làm điều này một lần trước khi tôi biết rõ hơn và về cơ bản đã cuốc máy của tôi.
Kyle Strand


4

Hãy cẩn thận trước khi chạy một lệnh như thế nào rm -r ./*. Một khi bạn chạy nó, sẽ rất khó hoặc không thể khôi phục bất kỳ dữ liệu nào.

Tất cả sẽ được gỡ bỏ. Hãy chắc chắn rằng thư mục bạn đang xóa là đúng.

Có một cách an toàn hơn để xử lý mọi thứ.

# sudo rm -r /tmp/*

Theo cách đó, khi bạn vô tình chạy lệnh này từ bên trong trình bao của mình history, nó sẽ không xóa các tệp sai (trừ khi bạn giữ chúng trong đó /tmp).


2

Các /tmpthư mục được xóa bởi mặc định lúc khởi động mỗi, vì TMPTIME0theo mặc định.


1

Nếu công cụ gắn kết của bạn trên một hệ thống tập tin linux được gắn dưới dạng tràn (thường có kích thước 1MB), thì điều này có thể là do bạn không chỉ định một bộ điều khiển và hệ thống tập tin gốc của bạn được lấp đầy và hệ thống tập tin gốc của bạn đã được lấp đầy và kể lại như một dự phòng. Để khắc phục điều này sau khi bạn đã xóa không gian, chỉ cần ngắt kết nối dự phòng và nó sẽ hiển thị lại tại điểm ban đầu:

sudo umount overflow

nếu thiết bị bận sử dụng

sudo umount -l overflow
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.