2010-03-12 33 views
21

Tôi luôn luôn nghe rằng cách thích hợp để tìm thư mục tạm thời trên máy UNIX là xem xét biến môi trường TMP. Khi viết mã làm việc trên Windows cũng như Linux, tôi sẽ kiểm tra TEMP và TMP.Điều gì đã xảy ra với biến môi trường TMP?

Hôm nay, tôi phát hiện ra rằng bản cài đặt Ubuntu của tôi không có biến môi trường nào cả.

Tôi biết có vẻ như bạn luôn có thể tin tưởng vào/tmp ở đó để đặt các tệp tạm thời của bạn vào, nhưng tôi hiểu rằng TMP là cách người dùng có thể cho bạn biết đặt các tệp tạm thời ở nơi khác.

Đó có phải là trường hợp không?

+2

Địa chỉ này được bản địa hóa quá mức như thế nào? Tôi khá chắc chắn hơn một vài người sử dụng các tệp tạm thời trong Linux. – Cascabel

Trả lời

12

Có thể bạn đang nghĩ đến TMPDIR.

Biến này đại diện cho tên đường dẫn của thư mục được cung cấp cho các chương trình cần một nơi để tạo tệp tạm thời.

+6

Cài đặt mặc định của Ubuntu LTS Server 12.04 und 14.04 không có bất kỳ biến môi trường nào liên quan đến thư mục tạm thời, không TMPDIR, cũng như TMP hoặc TEMP, ngay cả khi TMPDIR được ghi lại ở một số nơi. Cuối cùng, biến này có vẻ không đáng tin cậy (nữa). –

+0

Với một dự phòng: 'TMPDIR =" {$ {TMPDIR: - $ (dirname $ (mktemp)) /} "' – Deilan

8

POSIX/FHS cho biết /tmp là gốc của tệp tạm thời, mặc dù một số chương trình có thể chọn kiểm tra $TEMP hoặc $TMP thay thế.

+0

http://www.pathname.com/fhs/pub/fhs-2.3.html#TMPTEMPORARYFILES –

9

Một cách hay để tạo thư mục tạm thời là sử dụng mktemp, ví dụ:

mktemp -d -t 

Bằng cách này, bạn thậm chí có thể đảm bảo rằng tên tệp của bạn sẽ không va chạm với các tệp hiện có.

+2

Đó là câu trả lời hay nhưng không phải là câu trả lời cho câu hỏi ở trên. –

1
Biến toàn cầu lệnh.
# prompt> 
printenv | sort 
$ TMP không phải là tuyên bố (d)
# So, prompt> (i.e. if [ -d /tmp ] is true) 
export TMP="/tmp" 

export? Để chuyển các biến cho một subshell.
Ngoài ra, hãy sử dụng $ TMPDIR nếu được đặt, đây là tên biến chính xác cho Linux. Và có, tôi sử dụng thư mục/tmp; các tệp sẽ bị xóa ít nhất khi khởi động lại.!.

2

Tương tự như những gì @ Chris Lercher nói, tôi thấy rằng đây làm việc cho tôi:

dirname $(mktemp -u -t tmp.XXXXXXXXXX) 

Điều đó sẽ không thực sự tạo ra một tập tin tạm thời (vì cờ -u để mktemp) nhưng nó sẽ cung cấp cho bạn thư mục mà các tệp tạm thời sẽ được ghi vào. Đoạn mã này hoạt động trên OSX và Ubuntu (có thể là * nix khác).

Nếu bạn muốn cài đặt nó vào một biến, làm một cái gì đó như thế này:

TMPDIR=`dirname $(mktemp -u -t tmp.XXXXXXXXXX)` 
+2

Hoặc đơn giản: 'dirname $ (mktemp -u)'. – ekhumoro

0

FYI - ubuntu (và tôi giả distro systemd dựa khác) không xác định biến XDG_RUNTIME_DIR - đó là một người sử dụng mỗi không gian tạm thời, rất ít an toàn hơn chỉ/tmp:

$ echo $ XDG_RUNTIME_DIR /chạy/user/1000

$ ls -ld $ XDG_RUNTIME_DIR drwx ------ 2 ubuntu ubuntu 40 Tháng Mười Hai 22 15:18/lượt chạy/người dùng/1000

Tôi nghĩ XDG_RUNTIME_DIR được duy trì bởi systemd/pam, do đó, sẽ không được đặt trong Dockers hoặc các môi trường không phải hệ thống khác.

Bạn có thể làm một cái gì đó như thế này trong ~/.bashrc nếu bạn thích:

xuất khẩu TEMP = "$ {XDG_RUNTIME_DIR: -/tmp}"

Xem: https://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html https://www.freedesktop.org/wiki/

Ngoài ra - có vẻ như tôi có một số cảnh báo với XDG_RUNTIME_DIR và sudo: https://unix.stackexchange.com/questions/346841/why-does-sudo-i-not-set-xdg-runtime-dir-for-the-target-user

Các vấn đề liên quan