반달가면 이글루에서 백업 - bahndal.egloos.com/476203
무작위로 이름이 정해지고 해당 사용자에게만 접근권한이 있는 임시 파일 또는 임시 디렉토리를 만들고 싶다면 mktemp 명령을 활용하자. 일단 아래의 예시를 보자.
mktemp myfile_XXXX.tmp
myfile_iX9v.tmp (파일이 생성된 후, 이름이 출력된다)
현재 디렉토리에서 "myfile_"로 시작되고 바로 뒤 4개 글자가 무작위로 정해지면서 확장자가 .tmp인 파일을 만든 후 파일 이름이 화면에 출력되었다. 이름에서 'X'라고 된 부분이 무작위로 바뀌며, 최소한 3개 이상의 'X'를 지정해야 한다.
임시 디렉토리를 만들고 싶다면 -d 옵션을 이용.
mktemp -d mydir_XXXX
mydir_jKuI (디렉토리가 생성된 후, 이름이 출력된다)
그냥 touch 또는 mkdir 명령을 사용해도 될 것 같은데 굳이 mktemp 명령이 필요한 이유는 무엇일까?
사실 홈 디렉토리에서 임시 파일을 만든다면 mktemp 명령을 굳이 쓰지 않아도 될 것 같다. 하지만 메모리 영역(RAM)에 연결된 /dev/shm 디렉토리에 임시 파일을 만들고 싶다면 되도록 mktemp 명령을 사용하는 것이 안전하다. /dev/shm 디렉토리의 권한이 777(rwxrwxrws)로 설정되어 있어 모든 사용자가 접근할 수 있기 때문이다.
반복적인 읽기/쓰기가 이루어지는 경우에 임시 파일을 일종의 램디스크인 /dev/shm 디렉토리에 만들면 디스크보다 훨씬 빠르다는 장점이 있다. 접근권한의 문제는 mktemp 명령으로 해결하면 된다. mktemp 명령으로 생성된 임시 파일의 권한은 600(rw-------), 임시 디렉토리의 권한은 700(rwx------)이다. 즉, 소유자만 접근 가능.
mktemp /dev/shm/myfile_XXXX.tmp
/dev/shm/myfile_BW66.tmp (파일 생성후 파일명 출력)
스크립트에서는 아래의 예시를 참고해서 활용해 보자. mktemp 명령의 출력 결과를 변수에 할당해서 사용하면 되겠다.
# 임시 디렉토리를 만들어 이름을 tmp_dir 변수에 할당
tmp_dir=`mktemp -d /dev/shm/mydir_XXXX`
# 임시 디렉토리 안에 임시 파일을 만들고 이름을 tmp_file 변수에 할당
tmp_file=`mktemp $tmp_dir/myfile_XXXX.tmp`
echo "temp file created: $tmp_file"
# 이제 임시 파일을 사용하면 된다. 문자열 abcde를 임시 파일에 저장
echo "abcde" > $tmp_file
...
# 임시 파일 삭제
rm $tmp_file
# 임시 디렉토리 삭제
rm -r $tmp_dir
'bash script' 카테고리의 다른 글
[bash: grep] 특정 문자열이 포함된 파일의 이름 찾기 (0) | 2021.01.28 |
---|---|
[bash: sleep] 1초 미만으로 쉬기 (0) | 2021.01.14 |
[bash: cut, rev] 뒤쪽에서부터 문자열(단어) 가져오기 (0) | 2020.12.28 |
[bash: mv, rename] 파일/디렉토리 이름 바꾸기 (한개 또는 여러개 한꺼번에) (0) | 2020.12.23 |
[bash: echo] 탭(tab) 출력할 때 따옴표(")의 중요성 (0) | 2020.12.16 |