mktemp로 만든 임시 파일은 얼마나 오래 지속됩니까? 생성 된 임시 파일이 얼마나 오래

mktemp로 생성 된 임시 파일이 얼마나 오래 지속되는지 궁금합니다. 언제든지 사라질 수있는 파일에 의존하는 것은 이상하게 보입니다. 중요한 경우 우분투에 있습니다.



답변

응? 보낸 사람 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있기 때문에 모든 부팅 이 지워 집니다 . 대부분의 (전부는 아님) 배포에서 이것은 파일에 설정됩니다 .$TMPTIME0/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


답변

임시 파일은 시스템 부팅 중 또는 TMPTIME에 따라 제거 될 수 있습니다. 의 내용을 참조하십시오 /etc/cron.daily/tmpwatch.

/var/tmp/반면에 일반적으로 면역 tmpwatch입니다.

임시 파일은 (보통) 짧은 기간 동안 만들어집니다. 그들은 임시 이름을 가지고 있기 때문에 타이밍 공격을 수행하기가 쉽지 않으며 일반적으로 더 이상 프로그램에서 필요하지 않을 때 삭제됩니다. 일반적으로 스크립트는이 파일을 매우 짧은 시간 동안 유지하며 일반적으로 일부 텍스트 또는 다른 파일을 처리하므로 필요하지 않은 즉시 제거합니다. 스크립트가 중단되면 / tmp 폴더 하우스 키핑 절차 (대치하기로 결정한 경우)로 대체됩니다.

에 임시 파일을 만들 필요가 없습니다 /tmp


답변

임시 파일은 저절로 사라지지 않습니다. 스크립트 나 세션에서 또는 파일을 만들 때마다 임시 파일이라고합니다. 완료되면 파일을 삭제해야합니다. 또는 그것이 당신의 일이라면 주위에 두십시오. mktemp는 기존 파일을 덮어 쓰지 않도록 고유 한 파일을 만들 수 있도록하기 위해 존재합니다.


답변