MKTEMP(1)

명칭
mktemp - (독특한) 일시파일명을 작성한다

서식
mktemp [-d] [-q] [-t prefix] [-u] template ... mktemp [-d] [-q] [-u] -t prefix

해설
mktemp 유틸리티는, 인수의 파일명 템플릿의 하나하나에 대해서, 그 일부를 덧쓰기하는 것으로써, 파일명을 생성합니다. 이 파일명은 독특하고, 어플리케이션이 사용하는데 적합합니다. 템플릿은, 몇개의 ‘X’ 하지만 후속 하는 임의의 파일명이며, 예를 들면 /tmp/temp.XXXX 입니다. 후속 한다 ‘X’ (은)는, 현재의 프로세스 번호나 독특한 캐릭터의 편성과 옮겨놓을 수 있습니다. mktemp 하지만 돌려주는 것이 가능한 독특한 파일명의 수는, 지정했다 ‘X’ 의 수에 의존합니다; ‘X’ (을)를 6 개(살) 지정했을 경우에는, 대략 26 ** 6 의 편성을 mktemp 하지만 취급할 수 있게 됩니다.

mktemp 하지만 독특한 파일명을 생성하는 것에 성공했을 경우, 파일이 모드 0600 ( -u 플래그미지정시)로 작성되어 파일명이 표준 출력에 출력됩니다.

-t prefix 옵션지정시에는, mktemp (은)는 템플릿 캐릭터 라인을 prefix 라고 TMPDIR 환경 변수가 설정되어 있으면 그것도 이용해 생성합니다. TMPDIR 하지만 설정되어 있지 않은 경우의, 디폴트의 장소는 /tmp 입니다. 유저가 지정했을지도 모르는 환경 변수의 사용이 적절하다라고 프로텍션 할 수 있는지 어떤지에 주위를 기울여 주세요.

1 회의 기동으로 몇 개에서도 일시파일을 만들어 괜찮습니다. 이것에는, -t 플래그의 결과의 내부 템플릿을 기초로 하는 것 하나도 포함됩니다.

mktemp 유틸리티는, 셸 스크립트가 안전하게 일시파일을 사용하기 위해서 제공되고 있습니다. 전통적으로 많은 셸 스크립트가, 프로그램명에 pid 를 붙인 이름을 일시파일명으로서 사용하고 있습니다. 이런 종류의 명명법은 예측될 수 있는 것으로, 레이스 상태가 되었을 경우에 용이하게 공격자가 이겨 버립니다. 보다 안전, 그렇지만 아직 뒤떨어진 접근로서 같은 명명법으로 디렉토리를 만든다고 하는 것이 있습니다. 이 방법에서는 일시파일이 부수어지지 않은 것을 프로텍션할 수 있습니다만, 단순한 서비스 정지 공격을 허락해 버립니다. 상기와 같은 이유에 의해, mktemp 의 사용을 추천합니다.

옵션
사용 가능한 옵션을 이하에 나타냅니다:

-d  파일은 아니고 디렉토리를 작성합니다.

-q  에러가 발생했을 경우, 입다물어 실패합니다. 에러 출력이 표준 에러에 출력되는 것이 바람직하지 않은 스크립트로 유용합니다.

-t prefix
    파일명 템플릿을 생성하기 위해서 필요한 템플릿을 생성합니다 (주어졌다 prefix 라고 설정되어 있는 경우에는 TMPDIR (을)를 사용합니다).

-u  “안전하지 않다” 모드로 조작합니다. 일시파일은 mktemp (이)가 종료되기 전에 안린크 됩니다. 이것은 mktemp(3) 보다는 조금 좋습니다만, 여전히 레이스 상태를 일으킵니다. 이 옵션의 사용은 추천하지 않습니다.

진단
mktemp 유틸리티는, 성공시에는 값 0 으로 종료합니다. 실패시에는 값 1 으로 종료합니다.

사용예
이하의 sh(1) 스크립트의 일부로, mktemp 의 간단한 사용 방법을 설명합니다. 이 스크립트는, 안전한 일시파일을 취득할 수 없는 경우에는 종료합니다.

    tempfoo=`basename $0`
    TMPFILE=`mktemp /tmp/${tempfoo}.XXXXXX` || exit 1
    echo "program output" >> $TMPFILE

$TMPDIR 를 사용하는 경우에는 다음과 같이 합니다:

    tempfoo=`basename $0`
    TMPFILE=`mktemp -t ${tempfoo}` || exit 1
    echo "program output" >> $TMPFILE

다음의 경우, 스크립트 자신으로 에러를 잡습니다.

    tempfoo=`basename $0`
    TMPFILE=`mktemp -q /tmp/${tempfoo}.XXXXXX`
    if [ $?  -ne 0 ]; then
    	echo "$0: Can't create temp file, exiting..."
    	exit 1
    fi

관련 항목
mkdtemp(3), mkstemp(3), mktemp(3), environ(7)

역사
mktemp 유틸리티는 OpenBSD 2.1 에 등장했습니다. 이 실장은 OpenBSD 의 메뉴얼 페이지와는 독립에 기술되어 FreeBSD 2.2.7 에 처음으로 등장했습니다. 이 메뉴얼 페이지는 OpenBSD 유래입니다.