Câu hỏi Thư mục / tmp được dọn dẹp như thế nào?


Thế nào là /tmp thư mục được dọn dẹp? Nó có tự động không? Nếu vậy, làm thế nào thường xuyên là nó làm sạch?


262
2018-01-09 19:26


gốc


Các tệp tạm thời của tôi không bao giờ được ghi vào đĩa. Chúng được ghi vào đĩa RAM. tôi đã đặt tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0 trong / etc / fstab. - Anonymous


Các câu trả lời:


Chú thích! Câu trả lời này đã lỗi thời vì ít nhất là ubuntu 14.04. Xem câu trả lời khác cho tình hình hiện tại và nếu họ chứng minh chính xác thì hãy upvote chúng một cách giận dữ. Cũng đăng bình luận vì vậy tôi có thể đặt liên kết ở đây để trả lời đúng hiện tại.

Đối với 14.04 xem https://askubuntu.com/a/759048/1366

Cho 16,10 xem https://askubuntu.com/a/857154/453746


Câu trả lời cũ từ năm 2011:

Việc làm sạch /tmp được thực hiện bởi kịch bản mới nổi /etc/init/mounted-tmp.conf. Kịch bản được chạy bởi upstart everytime /tmp được gắn kết. Thực tế điều đó có nghĩa là ở mỗi lần khởi động.

Tập lệnh thực hiện như sau: nếu một tệp trong /tmp nó cũ hơn $TMPTIME ngày nó sẽ bị xóa.

Giá trị mặc định của $TMPTIME là 0, có nghĩa là mọi tệp và thư mục trong /tmp bị xóa. $TMPTIME là một biến môi trường được xác định trong /etc/default/rcS.


178
2018-01-10 00:17



Điều đó không đúng với 14.04 nữa (kịch bản không tồn tại nữa). - Martin Schröder
@Martin Schröder - kịch bản tồn tại trên hệ thống của tôi và nó là một cài đặt sạch của 14.04 và tmpreaper không tồn tại! - Lance Holland
Tôi đang sử dụng linux linux vì vậy tôi không thể xác minh. Lấy làm tiếc. Vui lòng ai đó xác minh điều này và nhận xét hoặc chỉnh sửa câu trả lời của tôi. - lesmana
trong ubuntu 16.04 tmpreaper bị bỏ qua là không an toàn, vui lòng xem: fossies.org/linux/tmpreaper/debian/README.security - Tamerlaha
Không. Trong Ubuntu 16.04 nó chỉ đơn giản là thay thế bởi một cơ chế systemd. Đọc tài liệu đó và những gì bạn thực sự sẽ tìm thấy là giải thích lý do tại sao phân tích bảo mật cho rằng sự bất an là thiếu sót. - JdeBP


Thư mục được xóa theo mặc định ở mỗi lần khởi động, bởi vì TMPTIME là 0 theo mặc định.

Ở đây bạn có thể thay đổi thời gian trong tệp sau:

/etc/default/rcS

TMPTIME nói cách thường xuyên các dir tmp sẽ được xóa trong ngày


135
2018-01-09 19:35



Việc xóa mỗi lần khởi động không phải là lý tưởng cho một cỗ máy không bao giờ được khởi động lại, giống như một máy chủ. Tôi đã có hơn 500.000 tập tin lấy không gian 5Gb trong / tmp của tôi bởi vì máy chủ của tôi có thời gian hoạt động 378 ngày. Tôi không muốn khởi động lại nó, đơn giản là vì việc xóa các tệp đó khi khởi động lại sẽ mất nhiều giờ. - rjmunro
Trong trường hợp của bạn, bạn nên cho tmpreaper một cơ hội. - qbi
Một công việc CRON có thể dễ dàng giải quyết điều đó. - Ken Sharp
Cũng thế tmpwatch phải là một công cụ thích hợp. - ArekBulski
Có vẻ như Ubuntu / systemd đã cung cấp một giải pháp. Tôi muốn nói nhiều hơn nhưng .... systemd. - Ken Sharp


Trong khi /tmp thư mục không phải là nơi lưu trữ tệp dài hạn, đôi khi bạn muốn giữ mọi thứ lâu hơn một chút so với lần sau khi bạn khởi động lại, là mặc định trên hệ thống Ubuntu. Tôi biết một hoặc hai lần tôi đã tải xuống thứ gì đó để /tmp trong khi thử nghiệm, khởi động lại sau khi thực hiện thay đổi và sau đó mất dữ liệu ban đầu một lần nữa. Điều này có thể thay đổi nếu bạn muốn giữ /tmp các tệp dài hơn một chút.

Thay đổi /tmp Tần suất dọn dẹp

Cài đặt mặc định cho hệ thống của bạn biết rõ ràng /tmp khi khởi động lại được giữ trong /etc/default/rcS tập tin. Giá trị chúng ta sẽ xem xét là TMPTIME.

Giá trị hiện tại của TMPTIME=0 cho biết xóa các tập tin lúc khởi động lại mặc dù tuổi của tập tin. Thay đổi giá trị này thành một số khác (dương) sẽ thay đổi số ngày mà tệp có thể tồn tại /tmp.

TMPTIME=7

Cài đặt này sẽ cho phép các tệp ở lại /tmp cho đến khi chúng được một tuần tuổi, và sau đó xóa chúng vào lần khởi động tiếp theo. Số âm (TMPTIME=-1) bảo hệ thống không bao giờ xóa bất cứ thứ gì trong /tmp. Đây có lẽ không phải là thứ bạn muốn, nhưng có sẵn.


59
2018-01-09 19:35



lời giải thích hay. Nhưng trong kịch bản lệnh nào là lệnh dọn dẹp? tôi đa tưng thây /etc/init/mounted-temp.conf, nhưng nó có dòng start on mounted MOUNTPOINT=/tmp điều đó khiến tôi nghĩ rằng nó không thể áp dụng được. - enzotib
Nếu bạn không muốn tệp bị xóa tự động, hãy đặt nó vào /var/tmp thay vì /tmp. - Gilles
Nó cũng tiện dụng để giữ các tập tin bạn không muốn bị mất (render khung hình video) khi máy tính của bạn bị treo, có thể do OOM. Một giải pháp tốt hơn sẽ là sửa chữa vấn đề, tất nhiên. :-) - Ken Sharp
Điều này có thể được thực hiện bên trong Cygwin? - CMCDragonkai


Tôi đang kiểm tra điều này trên Ubuntu 16.10. Tôi có thể xác nhận rằng việc chỉnh sửa / etc / default / rcS không còn hiệu lực nữa và các tệp trong tmp bị xóa sổ bằng cách khởi động lại bất kể bạn đưa vào tệp đó như thế nào. Như những người khác đề cập, tmpreaper không còn được sử dụng.

Tôi nghĩ câu trả lời đúng là Ubuntu 16.10 có một thiết lập mới. Có một thư mục /etc/tmpfiles.d, được ghi lại trong trang man "tmpfiles.d". Trong thư mục đó, người ta nên đặt một tập tin cấu hình để kiểm soát xem tập tin / tmp có bị xóa hay không. Đây là những gì tôi đang làm để ngừng khởi động lại từ việc xóa các tập tin trong / tmp trừ khi chúng được 20 ngày tuổi:

#/etc/tmpfiles.d/tmp.conf

d /tmp 1777 root root 20d

Thay thế "20d" theo "-" nếu bạn không bao giờ muốn xóa tệp. Đây là nỗ lực tốt nhất của tôi, trang người đàn ông đó gần như không thể hiểu được với chi tiết.

Ưu điểm của thiết lập mới là trình dọn dẹp tệp vẫn có thể chạy ngay cả khi hệ thống không được khởi động lại (như trong trường hợp luôn có trên máy chủ). Đó là một điểm cộng lớn, tôi nghĩ vậy.


29
2017-12-05 04:10



man tmpfiles.d - Martin Schröder
Tôi thấy rằng bạn có thể giữ quyền truy cập tệp gốc và chủ sở hữu bằng cách sử dụng dấu gạch nối: d /tmp/ - - - 20d - Dave Yarwood
Cũng cần lưu ý: bạn có thể kiểm tra cấu hình của mình bằng cách chạy công việc làm sạch theo cách thủ công: systemctl start systemd-tmpfiles-clean - Dave Yarwood


Trong Ubuntu 14.04, điều này được thực hiện bởi tmpreaper, được gọi là cron hàng ngày (từ /etc/cron.daily). Chương trình có thể được cấu hình thông qua /etc/default/rcS và /etc/tmpreaper.conf.


26
2018-04-19 12:00



trên hệ thống của tôi, tmpreaper không có trong /etc/cron.daily - nhưng tôi đã có thể cài đặt nó với apt-get - Joe Germuska


Trước 14.04:

Nó được dọn dẹp mỗi khi bạn khởi động lại.


10
2018-01-09 19:34



Xuất hiện với 14.04+ nó chỉ sử dụng tmpreaper, không phải là "mỗi khởi động" kịch bản FWIW - rogerdpack
14.04 hệ thống của tôi tất cả làm sạch khi khởi động lại. Chưa bao giờ nghe nói về tmpreaper. - Ken Sharp
nếu bạn không bao giờ khởi động lại hệ thống thì sao? - phuclv


Trên một trong các máy chủ của chúng tôi chạy Ubuntu, chúng tôi có một kịch bản để loại bỏ các tập tin trong / tmp và nó chạy hàng đêm.

Kịch bản là:

#!/bin/sh
# Clean file and dirs more than 3 days old in /tmp nightly

/usr/bin/find /tmp -type f -atime +2 -mtime +2  |xargs  /bin/rm -f &&

/usr/bin/find /tmp -type d -mtime +2 -exec /bin/rm -rf '{}' \; &&

/usr/bin/find /tmp -type l -ctime +2 |xargs /bin/rm -f &&

/usr/bin/find -L /tmp -mtime +2 -print -exec rm -f {} \;

Chỉ cần lưu nội dung ở trên vào một tệp chmod 775 tệp và tạo một mục nhập cron để chạy nó. Vì đây là máy chủ web nên chúng tôi không muốn khởi động lại vì lý do hiển nhiên.


5
2017-09-28 04:54



Bạn có thể sử dụng tốt hơn tmpwatch. - poolie
Dòng cuối cùng là cực kỳ nguy hiểm. Thông thường, mọi người đều có thể chạy ln -s /usr /tmp/kaboom hoặc thậm chí ln -s /* /tmp/ ... - Daniel Alder