개발자로서 중간 파일에 어떤 폴더를 작성해야합니까?


17

내 프로젝트를 위해 몇 가지 bash 스크립트를 작성하기 시작했으며 중간 파일이나 변수를 작성해야합니다.

누군가 스크립트를 실행할 때 어떤 폴더에 액세스 할 수 있는지 알고 싶습니다. 사용하는 것이 일반적 /tmp/입니까? 아니면 다른 것을 사용해야합니까?

답변:


21

이 것을 찾을 때 Filesystem Hierarchy Standard 문서가 귀중 하다는 것을 알았 습니다.

몇 가지 옵션이 있습니다.

저장하는 데이터의 종류에 따라 다릅니다.


사용자 / 환경이 제공하는 것을 더 잘 사용하고 대체로 / tmp 등 만 사용하십시오. (어떤 unix.stackexchange.com/a/79776/7784는 말했다)
올로프 로렌

15

스크립트 나 응용 프로그램이 실행되는 동안에 만 지속되는 일부 임시 파일을 작성해야하는 경우 TMPDIR환경 변수로 표시된 디렉토리를 사용 하거나 해당 변수가 정의되지 않은 경우 /tmp.

/tmp부팅시 일부 시스템 (때로는 RAM, 예를 들어 Solaris 및 일부 Linux 설치)에서도 지워 지므로 정전이나 재부팅 후에도 살아남 아야하는 파일에는 사용할 수 없습니다. /var/tmp재부팅 후에도 살아남 아야하지만 때때로 시스템 관리자가 정리할 수있는 파일에 사용할 수 있습니다. 응용 프로그램 요구 사항이 영구적으로 파일을 저장할 경우, 사용자의 홈 디렉토리에 (어딘가에을 쓰기 ~/.programmingnoobsapp~/.cache/programmingnoobsapp) 또는 아래 /var/lib/programmingnoobsapp또는 /var/cache/programmingnoobsapp.

/tmp당신이 거기에 파일을 만들 때주의를 취할 필요가 있으므로, 모든 사용자간에 공유됩니다. 아직 존재하지 않는 파일 이름을 선택해야하며 다른 프로세스가 다른 권한으로 다른 파일을 생성 할 때 경쟁 조건을 허용하지 않도록주의해야합니다 (다른 프로세스 인 경우 보안 허점이 될 수 있음) 다른 사용자로 실행중인 경우 프로세스 데이터에 액세스하여 수정할 수 있습니다). 사용 mktemp에 파일을 생성 명령을 /tmp하거나 /var/tmp. 기본적으로에 mktemp파일을 만들 $TMPDIR거나 설정되어 있지 않은 /tmp경우 TMPDIR일반적으로 올바른 위치에 파일을 만듭니다 . 여러 개의 임시 파일을 사용해야하거나 단일 파일이 필요한 경우에도 모든 임시 파일을위한 디렉토리를 만드는 것이 좋습니다.mktemp -d 스크립트 끝에서 제거하십시오.

#!/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
…

mktemp에 wrt, 나는 스크립트의 끝에서 임시 파일을 제거하지 않습니다. 오래된 파일을 자동으로 제거하는 tmpwatch cron 작업이 있습니다. 대부분의 경우 중간 파일을 읽지 않으며 시스템에서 파일을 자체적으로 삭제합니다. 그러나 스크립트에 문제가 있으면 쉽게 디버깅 할 수 있도록 모든 중간 파일이 있습니다.
emory

1
일에 대한 mktemp. 나에게 이것은 정답입니다. 임시 파일을 안전하게 만드는 작업을 위임 mktemp하십시오 ( 이 기사 참조 ). 인용 한 답변 FHS에도 큰 가치가 있습니다.
Carlos Campderrós

tmp_root할당하기 전에 왜 초기화 합니까? 더 자연스럽지 unset않습니까?
l0b0

@ l0b0 어느 쪽이든 작동합니다 (아래 제외 set -u). 트랩을 설정 한 직후 스크립트가 종료되는 경우 트랩을 설정하기 전에 안전한 값으로 설정 (해제)해야합니다.
Gilles 'SO- 악마 그만해'

내가 추가 할 것입니다 set -o errexit경우 너무 tmp_root이미 읽기 전용 환경 설정이 잘못된 디렉토리를 파괴하지 않을 것이다 ...
l0b0

2

지금까지 이미 게시 된 답변을 보완하기 위해.

또한이 /dev/shm임시 저장을 위해 사용 할 수있는 리눅스 배포판에. 이 스토리지는 파일 I / O의 성능이 파일 시스템 /dev/shm을 사용 하는 중요한 요소 인 경우에만 사용해야합니다 tmpfs. 또한 적당한 크기의 파일 및 데이터에도 사용해야합니다. tmpfs가 부팅에서 부팅 지속되지 않도록 파일 시스템 차종은 스토리지와 같은 시스템 RAM의 사용합니다.

StackOverflow와 Linux의 임시 파일 저장을위한 / tmp vs. . 이 슈퍼 유저 Q & A에서 제목은 다음과 같습니다. 언제 / dev / shm /을 사용해야하고 언제 / tmp를 사용해야합니까? .

참고 문헌


0

예, /tmp대부분 임시로 필요한 파일을위한 것입니다. / tmp에는 고정 비트가 있습니다. 즉, 항목 소유자, 디렉토리 소유자 또는 수퍼 유저 만 파일 이름을 바꾸거나 파일을 삭제할 수 있습니다. 많은 프로그램이이를 사용하여 잠금 파일을 작성하고 데이터를 임시 저장합니다. 일부 배포에서이 디렉토리는 부팅 또는 종료시 지워집니다.


1
부팅시 모든 / tmp 디렉토리가 지워지는 것은 아닙니다. 예를 들어, 기본 AIX 설치는 그렇지 않습니다 (이것은 Linux만이 아니라 UNIX 및 Linux입니다).
EightBitTony

그러나 많은 경우에 기본값 인 것처럼 보이는 "메모리"상주 인 경우 어떤 이유로 든 시스템이 중지되면 사라집니다.
mdpc
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.