[shell script] 임시 파일 이용하기

HYEOB KIM·2022년 4월 26일
0

Shell

목록 보기
52/71

/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 : 임시 파일을 지우는데 필요한 예외처리 구문입니다.

/tmp 에 임시 파일 만들기

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
profile
Devops Engineer

0개의 댓글