답변:
응? 보낸 사람 man mktemp
:
DESCRIPTION
Create a temporary file or directory, safely, and
print its name. TEMPLATE must contain at least 3
consecutive `X's in last component. If TEMPLATE is
not specified, use tmp.XXXXXXXXXX, and --tmpdir is
implied. Files are created u+rw, and directories
u+rwx, minus umask restrictions.
mktemp
임의의 문자열을 추가하여 고유 한 파일 이름을 만듭니다. 아무도 자동으로 제거하지 않습니다.
약간의 논쟁이있는 것처럼 보이므로 좀 더 자세히 설명하겠습니다. mktemp
의 매뉴얼 페이지에
템플릿이 지정되어 있지 않은 경우,
--tmpdir
경우 가정--tmpdir
지정되지 않은/tmp
것으로한다.
즉, 단순히 실행 mktemp
하면 tmp.RANDOM_STRING
/ tmp 디렉토리에 파일이 생성됩니다 . 따라서 mktemp
매개 변수없이 실행 /tmp
하면 시스템 종속 방식으로 다른 모든 항목과 함께 지워지는 파일이 만들어집니다 . 이러한 파일의 경우 $TMPTIME
아래 Chris의 답변에 설명 된 것처럼 변수가 중요합니다. 많은 배포판의 경우 기본값은 로 설정되어 /tmp
있기 때문에 모든 부팅 이 지워 집니다 . 대부분의 (전부는 아님) 배포에서 이것은 파일에 설정됩니다 .$TMPTIME
0
/etc/default/rcS
$ grep TMPTIME /etc/default/rcS
TMPTIME=0
당신은 지금, 만약 할 템플릿을 지정, 예를 들어 mktemp fooXXX
다음라는 파일이 fooXXX
현재 디렉토리에 생성됩니다 XXX
세 가지 임의의 문자로 대체됩니다. 특별히 선택하지 않으면이 파일은 절대 삭제되지 않습니다. "공식"임시 디렉토리의 파일 만이 /tmp
시스템에 의해 자동으로 삭제됩니다. 임시 파일을 지정하는 매직 비트는 없습니다. 외부 파일과 파일 /tmp
은 자동으로 삭제되지 않습니다.
주요 질문에 대답하기 위해 물론 사라질 수있는 파일에 의존하는 것은 이상합니다. 따라서 사람들이 tmp 파일에 의존하지 않는 이유는 일시적으로 데이터를 보유하기 위해 만들어지며 잊어 버릴 수 있습니다. 무작위로 명명 된 지속적 파일을 작성하는 방법에는 여러 가지가 있습니다. 예를 들면 다음과 같습니다.
echo "foo" > $RANDOM.txt
echo "foo" > `mktemp fooXXX.txt`
echo "foo" > $$.txt
tmp
디렉토리가 지워지는 시점이 아니라 생성 된 파일이 삭제되는 시점을 묻습니다 mktemp
. 보시다시피, 두 가지는 반드시 관련이있는 것은 아닙니다 :).
임시 파일은 시스템 부팅 중 또는 TMPTIME에 따라 제거 될 수 있습니다. 의 내용을 참조하십시오 /etc/cron.daily/tmpwatch
.
/var/tmp/
반면에 일반적으로 면역 tmpwatch
입니다.
임시 파일은 (보통) 짧은 기간 동안 만들어집니다. 그들은 임시 이름을 가지고 있기 때문에 타이밍 공격을 수행하기가 쉽지 않으며 일반적으로 더 이상 프로그램에서 필요하지 않을 때 삭제됩니다. 일반적으로 스크립트는이 파일을 매우 짧은 시간 동안 유지하며 일반적으로 일부 텍스트 또는 다른 파일을 처리하므로 필요하지 않은 즉시 제거합니다. 스크립트가 중단되면 / tmp 폴더 하우스 키핑 절차 (대치하기로 결정한 경우)로 대체됩니다.
에 임시 파일을 만들 필요가 없습니다 /tmp
mktemp
어떤 디렉토리에서나 실행될 수 있고 단순히 임의의 파일 이름을 생성하는 것으로 보았을 때 , 이것이 어떻게 관련이 있는지 알 수 없습니다 tmpwatch
.
mktemp
파일이 생성됩니다 /tmp/
.
임시 파일은 저절로 사라지지 않습니다. 스크립트 나 세션에서 또는 파일을 만들 때마다 임시 파일이라고합니다. 완료되면 파일을 삭제해야합니다. 또는 그것이 당신의 일이라면 주위에 두십시오. mktemp는 기존 파일을 덮어 쓰지 않도록 고유 한 파일을 만들 수 있도록하기 위해 존재합니다.
TMPTIME
?를 사용하지 않습니까?
/tmp
또는 다른 tmp 디렉토리 에만 해당됩니다 . 사용자가 만든 파일을 임의로 삭제하는 것은 아닙니다.
mktemp
파일이 생성됩니다 /tmp/
.