Nếu bạn cần ghi một số tệp tạm thời chỉ tồn tại chừng nào tập lệnh hoặc ứng dụng của bạn đang chạy, hãy sử dụng thư mục được chỉ định bởi TMPDIR
biến môi trường hoặc nếu biến đó không được xác định , /tmp
.
/tmp
bị xóa khi khởi động trên một số hệ thống (đôi khi ngay cả trong RAM, ví dụ như mặc định trên Solaris và trên một số cài đặt Linux), do đó, nó không thể được sử dụng cho các tệp phải tồn tại khi mất điện hoặc khởi động lại. /var/tmp
có thể được sử dụng cho các tệp phải tồn tại khi khởi động lại, nhưng thỉnh thoảng có thể được quản trị viên hệ thống xóa sạch. Nếu ứng dụng của bạn cần lưu tệp trên cơ sở vĩnh viễn, hãy viết chúng ở đâu đó trong thư mục chính của người dùng (trong ~/.programmingnoobsapp
hoặc ~/.cache/programmingnoobsapp
) hoặc dưới /var/lib/programmingnoobsapp
hoặc /var/cache/programmingnoobsapp
.
Lưu ý rằng /tmp
được chia sẻ giữa tất cả người dùng, vì vậy bạn cần có biện pháp phòng ngừa khi tạo tệp ở đó. Bạn cần chọn một tên tệp chưa tồn tại và bạn cần cẩn thận không cho phép điều kiện cuộc đua trong đó một quy trình khác tạo tệp trước bạn với các quyền khác nhau, có thể là lỗ hổng bảo mật (nếu quy trình khác đang chạy như một người dùng khác, sau đó nó có thể truy cập và sửa đổi dữ liệu của quy trình của bạn). Sử dụng mktemp
lệnh để tạo một tập tin trong /tmp
hoặc /var/tmp
. Theo mặc định, mktemp
tạo một tệp trong $TMPDIR
hoặc /tmp
nếu TMPDIR
không được đặt, thường là đúng nơi. Nếu bạn cần sử dụng nhiều tệp tạm thời hoặc thậm chí nếu bạn cần một tệp duy nhất, tôi khuyên bạn nên tạo một thư mục cho tất cả các tệp tạm thời của mình vớimktemp -d
và loại bỏ nó ở cuối tập lệnh của bạn.
#!/bin/sh
tmp_root=
trap 'rm -rf "$tmp_root"' EXIT INT TERM HUP
tmp_root=$(mktemp -d)
tmpfile1=$tmp_root/file1
tmpfile2=$tmp_root/file2
…