Các mktemp(1)
trang người đàn ông giải thích nó khá tốt:
Theo truyền thống, nhiều tập lệnh shell lấy tên của chương trình với pid làm hậu tố và sử dụng nó làm tên tệp tạm thời. Kiểu sơ đồ đặt tên này có thể dự đoán được và điều kiện cuộc đua mà nó tạo ra dễ dàng cho kẻ tấn công giành chiến thắng. Một cách tiếp cận an toàn hơn, mặc dù vẫn kém hơn, là tạo một thư mục tạm thời bằng cách sử dụng cùng một sơ đồ đặt tên. Mặc dù điều này không cho phép một người đảm bảo rằng một tệp tạm thời sẽ không bị lật đổ, nhưng nó vẫn cho phép một cuộc tấn công từ chối dịch vụ đơn giản. Vì những lý do này, nên sử dụng mktemp thay thế.
Trong một kịch bản, tôi gọi mktemp một cái gì đó như
mydir=$(mktemp -d "${TMPDIR:-/tmp/}$(basename $0).XXXXXXXXXXXX")
trong đó tạo ra một thư mục tạm thời tôi có thể làm việc và trong đó tôi có thể đặt tên một cách an toàn cho các tệp thực tế một cái gì đó có thể đọc và hữu ích.
mktemp
không phải là tiêu chuẩn, nhưng nó tồn tại trên nhiều nền tảng. Các chữ "X" nói chung sẽ được chuyển đổi thành một số ngẫu nhiên và nhiều hơn có thể sẽ ngẫu nhiên hơn; tuy nhiên, một số hệ thống (busybox ash, cho một) hạn chế sự ngẫu nhiên này đáng kể hơn các hệ thống khác
Nhân tiện, việc tạo các tệp tạm thời an toàn rất quan trọng đối với nhiều thứ chứ không chỉ là kịch bản shell. Đó là lý do python có tempfile , perl có File :: Temp , ruby có Tempfile , v.v.