/tmp
디렉토리는 리눅스 시스템의 임시 파일을 저장하는 공간입니다. 리눅스는 시동할 때 /tmp
디렉토리에 있는 파일을 자동으로 제거하도록 시스템을 구성합니다.
mktemp
명령으로 현재 경로에 임시 파일을 만들어 보겠습니다.
반드시 <파일이름>.XXXXXX
의 형식으로 만들어주어야 합니다.
$ mktemp testing.XXXXXX
testing.p3gsJP
$ ls -l testing*
-rw------- 1 hyeob hyeob 0 Apr 26 03:26 testing.p3gsJP
mktemp
로 임시 파일을 만들면 생성된 파일 이름이 출력되는 것을 볼 수 있습니다.
임시 파일을 만들고 3
번 파일 디스크립터로 echo
출력을 임시 파일에 저장한 뒤, 파일의 내용을 출력하고, 임시 파일을 삭제하는 쉘 스크립트를 작성해보겠습니다.
$ cat test1
#!/bin/bash
testfile=$(mktemp testing.XXXXXX)
echo "$USER created <$testfile>"
exec 3>$testfile
echo "this is first line" >&3
echo "this is second line" >&3
echo "this is third line" >&3
exec 3>&-
echo "$testfile contents : "
cat $testfile
if rm -f $testfile
then
echo "$testfile is deleted..."
else
echo "Error!!"
fi
$ ./test1
hyeob created <testing.nbbdNZ>
testing.nbbdNZ contents :
this is first line
this is second line
this is third line
testing.nbbdNZ is deleted...
코드 리뷰
testfile=$(mktemp testing.XXXXXX)
:testfile
변수에는 임시 파일명이 들어갑니다.exec 3>$testfile
:3
번 파일 디스크립터를 이용해 출력 내용 3줄을 임시 파일에 저장한 뒤exec 3>&-
를 이용해3
번 파일 디스크립터를 닫습니다.if rm -f $testfile
: 임시 파일을 지우는데 필요한 예외처리 구문입니다.
mktemp -t
옵션은 /tmp
폴더에 임시 파일을 생성하도록 합니다.
$ mktemp -t testing.XXXXXX
/tmp/testing.CiMc85
$ ls -al /tmp/testing*
-rw------- 1 hyeob hyeob 0 Apr 26 03:40 /tmp/testing.CiMc85
mktemp -t
로 임시 파일을 만들면 명령 결과로 임시 파일의 전체 경로를 출력하는 것을 볼 수 있습니다.
mktemp -d
를 이용하면 현재 경로에 임시 디렉토리가 만들어집니다.
$ mktemp -d dir.XXXXXX
dir.IcDluz
$ ls
'=' dir.IcDluz output.txt states test1 users.csv
'~' 환경_변수.md result test test2
현재 경로에 임시 디렉토리를 만들고, 그 안에 임시 파일을 2개 생성하는 쉘 스크립트를 작성해봅시다.
$ cat test1
#!/bin/bash
testdir=$(mktemp -d dir.XXXXXX)
cd $testdir
testfile1=$(mktemp testing.XXXXXX)
testfile2=$(mktemp testing.XXXXXX)
exec 7>$testfile1
exec 8>$testfile2
echo "Sending data to directory $testdir"
echo "This is first line" >&7
echo "This is second line" >&8
$ ./test1
Sending data to directory dir.M6ei27
$ cd dir.M6ei27/
$ ls
testing.ueviiA testing.UHSO83
$ cat testing.ueviiA
This is first line
$ cat testing.UHSO83
This is second line