2012-04-19 35 views
7

Tôi muốn tạo tệp tạm thời trong vỏ POSIX (/bin/sh).Làm cách nào để tạo tệp tạm thời bằng vỏ di động theo cách an toàn?

Tôi phát hiện ra rằng mktemp(1) không tồn tại trên hộp AIX của tôi và theo số How portable is mktemp(1)?, nó không phải là di động và/hoặc bảo mật.

Vì vậy, tôi nên sử dụng cái gì?

+0

Thuộc về unix.SE. – l0b0

+0

Vâng, nó không phải là một câu hỏi sysadmin, nhưng một _coding_ (có thể là trong vỏ unix). –

+0

Bạn cần loại bảo mật nào trên tệp tạm thời này? Điều đó ảnh hưởng đến những gì bạn có thể sử dụng. –

Trả lời

8

Tại sao không sử dụng /dev/random?

Nó có thể là gọn gàng với perl nhưng od và awk sẽ làm, cái gì đó như:

tempfile=XXX-$(od -N4 -tu /dev/random | awk 'NR==1 {print $2} {}') 
+0

Đó là _exactly_ những gì tôi đang tìm kiếm (bảo mật & POSIX). Đã không nghĩ về '/ dev/random', nhưng nó cảm thấy rất rõ ràng khi đã nói :) –

+0

Đối với hầu hết các mục đích/dev/urandom là thích hợp hơn. Xem https://unix.stackexchange.com/a/324210/197479. Sử dụng hex ngắn hơn. Thử nghiệm điều này trên AIX6.1: tempfile = XXX - $ (od -N4 -tx/dev/urandom | awk 'NR == 1 {print $ 2} {}') – Ted

3

Bạn không chính xác định nghĩa "an toàn", nhưng một yếu tố của nó có lẽ là để làm sạch sau khi chính mình.

trap "rm -f \"$tmpfile\"" 0 1 2 3 15 

Bạn có thể có thể man 3 signal để xem có các tín hiệu nào khác khiến tệp tạm thời của bạn bị xóa hay không. Tín hiệu không có nghĩa là "trên lối ra sạch".

+1

+1 cho việc sử dụng quá thường xuyên 'bẫy' . –

0

Có mặt ở đây từ google cho di động mktemp. Nhu cầu của tôi kém an toàn hơn so với OP, vì vậy tôi đã chỉ sử dụng PID của tập lệnh:

tempx=/tmp/mytemp.$$ 
Các vấn đề liên quan