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


20

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

답변:


17

응? 보낸 사람 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

2
이것은 내 질문에 대답하지 않습니다. "임시"파일을 작성하고 얼마나 오래 지속되는지에 대한 정보를 제공하지 않습니다. 그래서 영원히 지속됩니까? 시스템 부팅시 tmp 디렉토리가 perged됩니까?
MYV

@Maksim 업데이트 된 답변을 참조하십시오. 또한 귀하의 질문은 tmp디렉토리가 지워지는 시점이 아니라 생성 된 파일이 삭제되는 시점을 묻습니다 mktemp. 보시다시피, 두 가지는 반드시 관련이있는 것은 아닙니다 :).
terdon

6

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

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

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

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


mktemp어떤 디렉토리에서나 실행될 수 있고 단순히 임의의 파일 이름을 생성하는 것으로 보았을 때 , 이것이 어떻게 관련이 있는지 알 수 없습니다 tmpwatch.
terdon

1
기본적으로에 mktemp파일이 생성됩니다 /tmp/.
Chris

템플릿을 제공하지 않은 경우에만 업데이트 된 답변을 참조하십시오.
terdon

1

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


일부 시스템은 TMPTIME?를 사용하지 않습니까?
몸매

@demure yes이지만 clear /tmp또는 다른 tmp 디렉토리 에만 해당됩니다 . 사용자가 만든 파일을 임의로 삭제하는 것은 아닙니다.
terdon

기본적으로에 mktemp파일이 생성됩니다 /tmp/.
Chris
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.