개발자로서 중간 파일에 어떤 폴더를 작성해야합니까? bash 스크립트를 작성하기

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

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



답변

이 것을 찾을 때 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
…

답변

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

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

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

참고 문헌


답변

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