답변:
이 것을 찾을 때 Filesystem Hierarchy Standard 문서가 귀중 하다는 것을 알았 습니다.
몇 가지 옵션이 있습니다.
저장하는 데이터의 종류에 따라 다릅니다.
스크립트 나 응용 프로그램이 실행되는 동안에 만 지속되는 일부 임시 파일을 작성해야하는 경우 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
. 나에게 이것은 정답입니다. 임시 파일을 안전하게 만드는 작업을 위임 mktemp
하십시오 ( 이 기사 참조 ). 인용 한 답변 FHS
에도 큰 가치가 있습니다.
tmp_root
할당하기 전에 왜 초기화 합니까? 더 자연스럽지 unset
않습니까?
set -u
). 트랩을 설정 한 직후 스크립트가 종료되는 경우 트랩을 설정하기 전에 안전한 값으로 설정 (해제)해야합니다.
set -o errexit
경우 너무 tmp_root
이미 읽기 전용 환경 설정이 잘못된 디렉토리를 파괴하지 않을 것이다 ...
지금까지 이미 게시 된 답변을 보완하기 위해.
또한이 /dev/shm
임시 저장을 위해 사용 할 수있는 리눅스 배포판에. 이 스토리지는 파일 I / O의 성능이 파일 시스템 /dev/shm
을 사용 하는 중요한 요소 인 경우에만 사용해야합니다 tmpfs
. 또한 적당한 크기의 파일 및 데이터에도 사용해야합니다. tmpfs
가 부팅에서 부팅 지속되지 않도록 파일 시스템 차종은 스토리지와 같은 시스템 RAM의 사용합니다.
StackOverflow와 Linux의 임시 파일 저장을위한 / tmp vs. . 이 슈퍼 유저 Q & A에서 제목은 다음과 같습니다. 언제 / dev / shm /을 사용해야하고 언제 / tmp를 사용해야합니까? .
예, /tmp
대부분 임시로 필요한 파일을위한 것입니다. / tmp에는 고정 비트가 있습니다. 즉, 항목 소유자, 디렉토리 소유자 또는 수퍼 유저 만 파일 이름을 바꾸거나 파일을 삭제할 수 있습니다. 많은 프로그램이이를 사용하여 잠금 파일을 작성하고 데이터를 임시 저장합니다. 일부 배포에서이 디렉토리는 부팅 또는 종료시 지워집니다.