Các tập tin tạm thời được thực hiện với mktemp kéo dài bao lâu?


18

Tôi đã tự hỏi bao lâu các tập tin tạm thời được tạo bằng mktemp cuối cùng. Nó có vẻ lạ đối với tôi dựa vào một tập tin có thể biến mất bất cứ lúc nào. Tôi đang dùng Ubuntu, nếu có vấn đề.

Câu trả lời:


17

Huh? Từ man mktemp:

DESCRIPTION
   Create  a  temporary  file  or directory, safely, and
   print its name.  TEMPLATE must  contain  at  least  3
   consecutive  `X's  in last component.  If TEMPLATE is
   not specified, use tmp.XXXXXXXXXX,  and  --tmpdir  is
   implied.   Files  are  created  u+rw, and directories
   u+rwx, minus umask restrictions.

mktempchỉ cần thêm một chuỗi ngẫu nhiên để tạo một tên tệp duy nhất. Không ai sẽ loại bỏ nó tự động.


Vì dường như có một chút tranh luận, chúng ta hãy đi vào chi tiết hơn. mktempTrang của người đàn ông nói rằng

nếu TEMPLATE không được chỉ định, --tmpdirđược giả sử, nếu --tmpdirkhông được chỉ định, /tmpđược giả định.

Điều này có nghĩa là chỉ cần chạy mktempsẽ tạo một tệp được gọi tmp.RANDOM_STRING trong thư mục / tmp . Vì vậy, có, chạy mktempkhông có tham số sẽ tạo ra một tệp sẽ bị xóa cùng với mọi thứ khác /tmptheo cách phụ thuộc hệ thống. Đối với các tệp như vậy, $TMPTIMEbiến sẽ rất quan trọng như được giải thích trong câu trả lời của Chris bên dưới. Đối với nhiều bản phân phối, mặc định sẽ xóa /tmpmọi khởi động vì $TMPTIMEđược đặt thành 0. Trong hầu hết (nếu không phải tất cả) các bản phân phối, phần này được đặt trong tệp /etc/default/rcS:

$ grep TMPTIME /etc/default/rcS
TMPTIME=0

Bây giờ, nếu bạn làm rõ một TEMPLATE, ví dụ mktemp fooXXXsau đó một tập tin gọi là fooXXXđược tạo ra trong thư mục hiện nơi XXXđược thay thế bằng ba ký tự ngẫu nhiên. Tập tin này sẽ không bao giờ bị xóa trừ khi bạn đặc biệt chọn làm như vậy. Chỉ các tệp trong thư mục tạm thời "chính thức" như /tmphệ thống sẽ tự động bị xóa, không có bit ma thuật nào bạn có thể đặt chỉ định tệp tạm thời, các tệp bên ngoài /tmpvà ilk của nó không bị xóa tự động.

Để trả lời câu hỏi chính của bạn, tất nhiên thật lạ khi phụ thuộc vào một tệp có thể biến mất, đó là lý do tại sao mọi người không phụ thuộc vào tệp tmp, chúng được tạo để tạm thời giữ dữ liệu và sau đó chúng ta có thể quên chúng. Có nhiều cách để tạo một tệp liên tục, được đặt tên ngẫu nhiên. Ví dụ:

echo "foo" > $RANDOM.txt
echo "foo" > `mktemp fooXXX.txt`
echo "foo" > $$.txt

2
Điều này không trả lời câu hỏi của tôi. Nó nói rằng nó tạo ra một tập tin "tạm thời" và không cung cấp thông tin về thời gian tồn tại. Vậy nó tồn tại mãi mãi? Thư mục tmp có bị lỗi khi khởi động hệ thống không?
MYV

@Maksim xem câu trả lời cập nhật. Ngoài ra, câu hỏi của bạn không hỏi khi tmpthư mục bị xóa nhưng khi các tệp được tạo bằng mktempbị xóa. Như bạn có thể thấy, hai cái này không nhất thiết phải liên quan :).
terdon

6

Hãy nhớ rằng các tệp tạm thời có thể bị xóa trong quá trình khởi động hệ thống hoặc theo TMPTIME. Xin vui lòng xem những gì bạn có trong /etc/cron.daily/tmpwatch.

/var/tmp/mặt khác là miễn dịch thường để tmpwatch.

Các tệp tạm thời được tạo trong (thường) trong khoảng thời gian ngắn. Chúng có tên tạm thời nên không dễ thực hiện tấn công thời gian và thường chúng sẽ bị xóa khi không cần thiết bởi chương trình nữa. Thông thường tập lệnh của bạn sẽ giữ tệp này trong một khoảng thời gian rất ngắn, thường xử lý một số văn bản hoặc các tệp khác và nó sẽ xóa nó ngay khi không cần thiết. Nếu tập lệnh của bạn gặp sự cố thì bạn cũng sẽ phải thực hiện lại các thủ tục vệ sinh thư mục / tmp (nếu đó là nơi bạn đã quyết định đặt chúng).

Bạn không phải tạo tệp tạm thời trong /tmp


Xem như mktempcó thể được chạy trong bất kỳ thư mục nào và chỉ cần tạo một tên tệp tùy ý, tôi không thấy điều này có liên quan gì tmpwatch.
terdon

1
Theo mặc định mktemptạo tập tin trong /tmp/.
Chris

chỉ khi bạn không đưa ra MẪU, hãy xem câu trả lời được cập nhật của tôi.
terdon

1

Các tập tin tạm thời không tự biến mất. Chúng được gọi là tệp tạm thời đơn giản vì trong tập lệnh hoặc phiên của bạn hoặc bất cứ nơi nào bạn thực hiện chúng, bạn sẽ phải xóa chúng khi bạn hoàn tất. Hoặc để chúng nằm xung quanh nếu đó là điều của bạn. mktemp tồn tại chỉ để cho phép bạn đưa ra một tệp có tên duy nhất để nó không ghi đè lên một số tệp hiện có.


Không một số hệ thống sử dụng một TMPTIME?
demure

@demure có nhưng chỉ để xóa /tmphoặc các thư mục tmp khác. Nó sẽ không xóa ngẫu nhiên các tập tin do người dùng tạo.
terdon

Theo mặc định mktemptạo tập tin trong /tmp/.
Chris
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.