나는 중간 파일이나 변수를 작성해야 하는 프로젝트용 bash 스크립트를 작성하기 시작했습니다.
누군가가 내 스크립트를 실행할 때 액세스할 수 있는 폴더를 어떻게 확인할 수 있는지 궁금합니다. 이것이 일반적인 관행입니까 /tmp/
? 아니면 다른 것을 사용해야 합니까?
답변1
답변2
스크립트나 애플리케이션이 실행되는 동안에만 지속되는 임시 파일을 작성해야 하는 경우 다음을 사용하세요.TMPDIR
환경 변수이거나 변수가 정의되지 않은 경우 /tmp
.
/tmp
일부 시스템에서는 부팅 시 지워지므로(때때로 Solaris와 같은 RAM에서도, 일부 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
…
답변3
지금까지 게시된 답변에 추가하기만 하면 됩니다.
일부 Linux 배포판에서는 /dev/shm
임시 저장 장치로도 사용할 수 있습니다. 이 저장소는 파일 I/O 성능이 /dev/shm
파일 시스템 사용에 중요한 요소 인 경우에만 사용해야 합니다 tmpfs
. 또한 적당한 크기의 파일 및 데이터에도 사용해야 합니다. 파일 시스템은 tmpfs
저장을 위해 시스템 RAM을 사용하므로 부팅할 때마다 지속되지 않습니다.
여기 StackOverflow와 다음 Q&A에 언급된 모든 옵션에 대한 좋은 개요가 있습니다.Linux의 임시 파일 저장을 위한 /tmp와 /dev/shm?. 이 슈퍼유저 Q&A에서는 이 내용을 잘 다루고 있습니다.언제 /dev/shm/을 사용해야 하며 언제 /tmp를 사용해야 합니까?.
인용하다
답변4
예, /tmp
주로 일시적으로 필요한 파일에 사용됩니다. /tmp에는 고정 비트가 있습니다. 이는 프로젝트 소유자, 디렉토리 소유자 또는 수퍼유저만이 파일 이름을 바꾸거나 파일을 삭제할 수 있음을 의미합니다. 많은 프로그램에서 이를 사용하여 잠금 파일을 만들고 데이터를 임시로 저장합니다. 일부 배포판에서는 시작 또는 종료 시 이 디렉터리가 지워집니다.