나는 스티븐 지터의 말을 이해하려고 노력하고 있다답변이 문제를 해결하기 위해 그는 다음 코드를 사용하여 임시 디렉터리를 만들었습니다.
#!/bin/bash
scripttmp=$(mktemp -d) # Create a temporary directory (these will usually be created under /tmp or /var/tmp/)
이 명령을 실행할 때마다 아래에 새로운 임시 디렉토리가 생성되는 것을 볼 수 있습니다. /tmp/
(Roaima의 답변을 읽을 때까지 거기에 있을 줄은 몰랐습니다)여기):
IIUC에서는 일반 디렉터리와 임시 디렉터리 사이에 프로그래밍상의 차이가 없습니다(유일한 차이점은 이러한 디렉터리가 사용되는 방식, 즉 각 디렉터리가 컴퓨터에 유지되는 기간입니다).
절차상의 차이가 없다면 사람들은 왜 mktemp -d
가장 작은 것을 선호 할까요 mkdir
?
답변1
를 사용하는 경우 mkdir
스크립트는 이름으로 생성한 디렉터리가 이미 존재하지 않는지 확인해야 합니다. 현재 디렉터리에 기존 이름이 있는 mkdir dirname
경우 이를 사용하면 오류가 발생합니다.dirname
임시 디렉토리(즉, 현재 스크립트보다 오래 지속되는 원치 않는 디렉토리)를 생성할 때 일반적으로 디렉토리 이름은 중요하지 않으며 아직 mktemp -d
다른 이름이 사용되지 않은 이름이 발견됩니다.
mktemp -d
임시 디렉터리를 더 쉽고 안전하게 만들 수 있습니다. 그렇지 않은 경우 성공할 때까지 여러 이름을 mktemp -d
시도해야 합니다 . mkdir
이는 불필요하게 복잡할 뿐만 아니라 잘못 수행될 수도 있습니다(코드에 미묘한 경쟁 조건이 발생할 수 있음).
mktemp
또한 스크립트 사용자에게 임시 디렉토리를 생성할 위치를 제어할 수 있는 권한을 부여합니다. 예를 들어, 스크립트가 해당 디렉터리에 저장해야 하는 대량의 임시 데이터를 생성하는 경우 사용자는 TMPDIR
충분한 여유 공간이 있는 파티션의 쓰기 가능한 디렉터리를 가리키도록 환경 변수(스크립트 호출 전 또는 호출 시)를 설정할 수 있습니다. 공간. mktemp -d
그러면 해당 경로 아래에 임시 디렉터리가 생성됩니다.
TMPDIR
설정하지 않으면 대신 mktemp
사용됩니다 /tmp
.
답변2
임의의 이름으로 임시 디렉터리를 생성하므로 mktemp -d
중요한 점은 다음과 같습니다. 엄격한 임시 디렉터리 삭제 정책이 있는 경우 디렉터리를 사용한 후 삭제해야 한다는 점을 기억해야 합니다.
그렇기 때문에 scripttmp=$(mktemp -d)
가치를 유지하기 위해 글을 쓴다. 일반적으로 사용하기 쉽습니다.
신경 쓰지 않는 한 다음 작은 예를 사용하여 임의의 이름을 생성하고 나중에 폴더를 삭제할 수 있습니다.
var=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 20 | head -n 1);
mkdir "/tmp/$var"
#some code
rm -rf "/tmp/$var"
mktemp -d 또는 mkdir을 사용하여 생성된 디렉토리 간에 프로그래밍 차이점이 있습니까?
글쎄요. 사용자가 mkdir
디렉토리 이름을 생성 하면 mktemp -d
시스템은 이름 고유성을 확보하기 위해 /dev/urandom
gettimeofday
, , ... 등의 기능을 기반으로 디렉토리를 생성합니다.getpid