Câu trả lời:
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.
mktemp
chỉ 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. mktemp
Trang của người đàn ông nói rằng
nếu TEMPLATE không được chỉ định,
--tmpdir
được giả sử, nếu--tmpdir
không được chỉ định,/tmp
được giả định.
Điều này có nghĩa là chỉ cần chạy mktemp
sẽ tạo một tệp được gọi tmp.RANDOM_STRING
trong thư mục / tmp . Vì vậy, có, chạy mktemp
khô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 /tmp
theo cách phụ thuộc hệ thống. Đối với các tệp như vậy, $TMPTIME
biế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 /tmp
mọ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 fooXXX
sau đó 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ư /tmp
hệ 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 /tmp
và 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
tmp
thư mục bị xóa nhưng khi các tệp được tạo bằng mktemp
bị 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 :).
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
mktemp
có 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
.
mktemp
tạo tập tin trong /tmp/
.
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ó.
TMPTIME
?
/tmp
hoặ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.
mktemp
tạo tập tin trong /tmp/
.