Ngăn thư mục trong / tmp bị xóa


10

Tôi thường sử dụng /tmpthư mục trên máy Linux của mình để lưu trữ các tệp tạm thời (ví dụ: tệp PDF từ một trang web muốn tôi tải xuống trước, v.v.) và tôi thường tạo một thư mục có tên người dùng của mình. Nhưng tại mỗi lần khởi động, nó (bao gồm tất cả các tệp) sẽ bị xóa. Bây giờ tôi biết tôi có thể đặt nó vào /var/tmp, nhưng tôi muốn xóa tất cả nội dung của nó, nhưng đối với chính thư mục sẽ được giữ. Vì thế:

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

Có cách nào để làm điều này? Có thể với quyền hoặc với một cấu hình đặc biệt?


1
Như một giải pháp thay thế, bạn có thể đặt một số mã vào tệp đăng nhập của shell để "test & mkdir" khi cần.
Jeff Schaller

3
/tmpcó khả năng là một tmpfshệ thống tập tin. Những tập tin đó không thực sự bị xóa; chúng chỉ đơn giản được lưu trữ trong RAM và bị mất khi khởi động lại. Đó là lý do tại sao bạn nhận được câu trả lời sôi nổi để "tạo lại nó khi khởi động hoặc đăng nhập"
MSalters

Câu trả lời:


4

Một giải pháp sẽ là sử dụng một @rebootcông việc định kỳ:

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

Thêm phần này vào crontab của bạn crontab -esẽ giúp nó thực thi bất cứ khi nào máy khởi động.

Hoặc dùng

mkdir -p "/tmp/$USER"

trong tập tin khởi động shell của bạn.

Trong cả hai trường hợp, bạn cũng có thể muốn sử dụng

TMPDIR=/tmp/$USER
export TMPDIR

trong tệp khởi động shell của bạn nếu bạn muốn sử dụng thư mục đó làm thư mục tạm thời mặc định.


Điều này có phải a) tạo thư mục cho tất cả người dùng và b) kích hoạt từ khởi động 'lạnh' không?
Linux4win

1
@ Linux4win Câu trả lời này giải quyết nhu cầu của một người dùng, bởi vì đây là cách bạn đặt câu hỏi. Không quan trọng là máy được khởi động như thế nào (nóng, lạnh hoặc ấm), nhưng nó sẽ không kích hoạt khi tiếp tục ngủ đông (vì đó không phải là khởi động).
Kusalananda

Vì một số lý do, việc thêm @reboot mkdir -p "/tmp/$USER"vào cuối crontab không làm gì cả, trong khi chạy mkdir -p "/tmp/$USER"thực sự tạo thư mục. Nhân tiện, cái thứ hai không hoạt động với tôi, bởi vì tôi cần truy cập /tmpthông qua các chương trình khác của mình và việc bắn vỏ mọi lúc mọi nơi thật khó chịu ...
Linux4win

@ Linux4win Công @rebootviệc định kỳ không tạo thư mục? Bạn có nhận được bất kỳ email nào được gửi đến tài khoản của bạn với bất kỳ thông báo lỗi nào từ trình nền cron không?
Kusalananda

À không ... Có lẽ vì tôi chưa cấu hình mail? Hay là không bắt buộc?
Linux4win

14

Tôi sử dụng pam-tmpdircho việc này: nó tạo một thư mục tạm thời riêng tư khi đăng nhập. Để thiết lập nó, thêm

session optional pam_tmpdir.so

đến các dịch vụ PAM thích hợp; trên hệ thống dựa trên Debian, cài đặt libpam-tmpdirgói sẽ cung cấp cho bạn hoặc bạn có thể thêm dòng vào /etc/pam.d/common-session. Lần tới khi bạn đăng nhập, bạn sẽ tìm thấy một thư mục bên dưới /tmp/uservới id người dùng của mình TMPTMPDIRđặt một cách thích hợp.


7
Bạn có thể giải thích các dịch vụ PAM thích hợp là gì và làm thế nào để có thể thêm dòng này vào chúng không? Những tập tin nào nên được chỉnh sửa?
terdon

2

Nếu bạn không chạy hệ thống với systemd và nó sử dụng systemd-tmpfiles để quản lý việc dọn dẹp, thì bạn nên cấu hình thư mục bằng hệ thống đó.

Đây là một tài liệu đầy đủ . Bạn có thể có thể đạt được những gì bạn muốn bằng cách tạo /etc/tmpfiles.d/something.confvới các nội dung như:

d     /tmp/your_username   0750 your_user your_group  - -

1

Như đã chỉ ra trong các nhận xét, /tmpdành cho các tệp tạm thời và sẽ không bị bỏ lỡ nếu chúng bị xóa. Nếu bạn đang ở giữa một cái gì đó và máy khởi động lại, mọi thứ bạn đã viết ở đó sẽ biến mất và bạn sẽ phải bắt đầu lại, điều đó có nghĩa là những tệp đó có thể không tạm thời như vậy.

Tôi đã duy trì một thư mục tạm thời trong thư mục nhà của tôi trong nhiều năm bắt đầu khi một gigabyte có nhiều không gian và thấy rằng nó đòi hỏi phải chải chuốt định kỳ để loại bỏ các tập tin đã trở nên cũ kỹ và tồi tệ. Hầu hết thời gian tôi còn lại sau quá trình đó chưa đầy một vài tuần tuổi, vì vậy bây giờ tôi dọn dẹp nó với một công việc định kỳ chạy một lần mỗi ngày:

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

Bất cứ thứ gì tôi tải xuống hoặc tạo dưới dạng bán tạm thời đều ở đó và hệ thống sẽ dọn sạch mọi thứ tôi để lại. Bất cứ điều gì cần một ngôi nhà vĩnh viễn đều có được một thời gian dài trước khi công việc định kỳ được loại bỏ.


mkdir a a/b; touch a/b/c. Bây giờ hãy đợi cho đến khi 30 ngày của bạn đã hết hạn. Khi bạn xóa cnó sẽ cập nhật b, điều đó có nghĩa là nó phải chờ thêm 30 ngày nữa. Tương tự như vậy với akhi bạn xóa b. Thứ hai, nếu bạn tạo tệp trong bnhưng không chạm atrong 30 ngày, athư mục sẽ bị tấn công rm -rfvà xóa sạch các tệp gần đây của bạn b.
roaima

find "$HOME"/tmp -mtime +30 -type f -delete; find "$HOME/tmp" -depth -mmin +60 -type d -exec rmdir {} + 2>/dev/nulllàm việc cho tôi
roaima
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.