bash script (backup)2021. 1. 6. 13:15

 

반달가면 이글루에서 백업 - 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

 

 

Posted by 반달가면

댓글을 달아 주세요

리눅스 (backup)2021. 1. 6. 10:58

 

반달가면 이글루에서 백업 - bahndal.egloos.com/465571

 

리눅스에서 df 명령으로 디스크의 빈 공간을 확인해 보면 /dev/shm 디렉토리가 있는데, 파일시스템 형식은 tmpfs이고 크기는 램(RAM) 용량의 반 정도 될 것이다.
 
이 디렉토리는 공유 메모리(shared memory)라고 해서 일종의 램디스크인데, RAM 용량의 반을 당장에 실제로 점유하고 있는 것은 아니고 사용하는 만큼만 용량을 소모한다. 그러므로 RAM 용량이 반이나 날아갔다고 오해하면서 걱정할 필요는 없다.

자주 읽기/쓰기를 하는 임시 파일을 사용해야 할 경우에 RAM 용량이 충분하다면 이 디렉토리가 상당히 요긴하다.

다만, 한가지 주의할 점은 /dev/shm의 접근 권한이다. 모든 사용자가 읽고 쓸 수 있으므로, 만약 이 디렉토리를 사용하고 싶다면 하위에 자신만 접근할 수 있는 권한으로 디렉토리를 하나 만들어서 사용하자.

cd /dev/shm
mkdir my_tmp_dir
chmod 700 my_tmp_dir  (자신만 접근할 수 있도록 권한 설정)

참고로, 만약 다른 프로그램들이 RAM을 이미 많이 점유하고 있는 상태에서 /dev/shm 디렉토리를 사용하다가 사용량이 RAM 용량을 초과하게 되면 그 때는 스왑(swap) 영역으로 넘어간다.

 

Posted by 반달가면

댓글을 달아 주세요

리눅스 (backup)2021. 1. 6. 10:53

반달가면 이글루에서 백업 - bahndal.egloos.com/450013

 

디렉토리 점유 용량을 확인하는 명령인 du와 상호보완적으로 쓰게 되는 명령이 디스크/파일시스템의 빈 공간을 확인하기 위한 df 명령이다. 터미널 창에서 아래와 같이 입력해 보자. 

df

표시되는 항목은 파일시스템(Filesystem), 디스크 목록과 크기(Size), 사용된 공간(Used), 빈 공간(Avail), 사용률(Use%), 해당 파일시스템이 연결되어 있는 디렉토리(Mounted on) 등이다. 기본 용량 단위는 du와 마찬가지로 1024바이트 기준이다. 

용량 표시를 좀더 읽기 편하게 보고 싶다면 -h 옵션을 이용하자. 메가 또는 기가바이트 단위로 표시해 준다. 

df -h

네트워크로 연결된 파일시스템(NFS)을 제외하고 현재 PC에 소속된 파일시스템(local file system) 만 보고 싶다면 -l 옵션을 사용. 

df -hl

 

 

Posted by 반달가면

댓글을 달아 주세요

리눅스 (backup)2021. 1. 6. 10:48

 

반달가면 이글루에서 백업 - bahndal.egloos.com/448152

 

리눅스에서 특정 디렉토리가 얼마나 많은 용량을 차지하고 있는지 확인하고 싶으면 du 명령을 활용하자. 예를 들어 현재 디렉토리의 용량을 확인하려면 터미널창에서 아래와 같이 입력.

du ./

위와 같이 입력하면 현재 디렉토리와 그 하위 디렉토리를 나열하면서 각 디렉토리별로 어느 정도 용량을 점유하고 있는지 보여준다. 용량값은 1024바이트를 기준으로 한 것이다. (즉 용량값이 20이라고 나왔으면 1024*20=20480바이트)

만약 n바이트 단위로 용량을 표시하고 싶다면 -B 옵션을 사용하면 되겠다. 만약 512바이트를 1로 놓고 용량값을 표시하려면 아래와 같이 입력한다. (용량값은 1024바이트 기준보다 딱 2배 많게 표시될 것이다. 단위 크기가 반으로 줄었으므로)

du -B 512 ./

또 한가지 유용한 옵션은 맨 마지막에 해당 디렉토리의 총 용량을 표시해 주는 -c 옵션과 메가(M), 기가(G) 등의 단위를 표시해서 읽기 편하게 해 주는 -h 옵션이다. 예를 들어 홈 디렉토리 아래에 downloads 디렉토리의 용량을 확인하고 싶다면 아래와 같이 입력하면 되겠다.

du -ch ~/downloads
  -c : 마지막에 해당 디렉토리가 점유하는 총 용량을 표시
  -h : 사람이 읽기 좋게 표시(751876 -> 735M 이런 식으로)

하위 디렉토리의 용량을 일일이 확인할 필요 없이 해당 디렉토리의 총 용량만 보고 싶다면 grep을 활용하면 된다. 개인적으로 가장 자주 쓰는 형태다.

du -ch ~/downloads | grep total

 

 

 

Posted by 반달가면

댓글을 달아 주세요