Tôi đã đọc rằng việc chuyển hướng đầu ra sang một tệp tên cố định /tmpcó thể là một rủi ro bảo mật, bởi vì nếu kẻ tấn công (hoặc kẻ xấu) thông báo rằng một tệp /tmp/tmpfileformyscript.tmpđược tạo khi tôi chạy tập lệnh của mình (ngay cả khi anh ta không đọc được quyền truy cập vào kịch bản), ví dụ anh ta có thể tạo một liên kết tượng trưng ln -s ~wildcard/.bashrc /tmp/tmpfileformyscript.tmpkhiến tôi phá hủy .bashrctệp của tôi khi tôi chạy tập lệnh của mình.
Vì vậy, thay vào đó tôi có thể sử dụng một cái gì đó như filename="tmpfile.tmp.$RANDOM" ; echo outputtext > "$filename".
Tuy nhiên, đôi khi tôi muốn sử dụng tệp tmp để lưu vào bộ đệm, trong trường hợp đó tôi muốn biết liệu "tmpfile.tmp. *" Có khớp với bất cứ điều gì không /tmpvà nếu có, hãy sử dụng tệp đó thay vì tạo tệp mới. Thật không may testvà tương đương [ -f filename ]không hỗ trợ tập tin toàn cầu như tôi có thể nói.
Vì vậy, câu hỏi của tôi là gấp đôi:
- Làm thế nào tôi có thể tạo tempfile một cách an toàn? Là
"predictablename.$RANDOM"một thực tiễn có thể chấp nhận hoặc có một cách tốt hơn (an toàn hơn, dễ dàng hơn)? - Làm thế nào tôi có thể dễ dàng truy cập tệp và / hoặc thiết lập sự tồn tại của nó sau này bằng cách kiểm tra
predictablename?
$TMPDIRvà~/.cachechính xác là những gì tôi cần. Sau khi suy nghĩ thêm, tôi nhận ra rằng lý do duy nhất tôi muốn nó/tmplà phân vùng vì vậy bộ đệm không thể lấp đầy/homephân vùng. Nhưng đối với trường hợp sử dụng này thực sự không phải là vấn đề hoàn chỉnh, vì vậy một thư mục con~/.cachephù hợp với nhu cầu của tôi một cách hoàn hảo và tránh được vấn đề bảo mật.