소개
이 실습에서는 tar, gzip, zip과 같은 일반적인 리눅스 명령어를 사용하여 파일과 디렉터리를 하나로 묶고 (아카이빙) 압축하는 방법을 배웁니다. 이러한 도구들은 리눅스 시스템에서 파일과 디렉터리를 관리하고 데이터를 효율적으로 저장하거나 전송하는 데 필수적입니다. 기초적인 작업부터 시작하여 점진적으로 복잡한 작업으로 나아가며 각 단계를 상세히 설명하겠습니다.
이 실습에서는 tar, gzip, zip과 같은 일반적인 리눅스 명령어를 사용하여 파일과 디렉터리를 하나로 묶고 (아카이빙) 압축하는 방법을 배웁니다. 이러한 도구들은 리눅스 시스템에서 파일과 디렉터리를 관리하고 데이터를 효율적으로 저장하거나 전송하는 데 필수적입니다. 기초적인 작업부터 시작하여 점진적으로 복잡한 작업으로 나아가며 각 단계를 상세히 설명하겠습니다.
먼저 실습에 사용할 샘플 디렉터리 구조를 만들어 보겠습니다. 이를 통해 다양한 유형의 파일과 디렉터리에서 파일 아카이빙과 압축이 어떻게 작동하는지 이해할 수 있습니다.
터미널을 열고 다음 명령어들을 입력하세요:
cd ~/project
mkdir -p test_dir/{subdir1,subdir2}
echo "This is file 1" > test_dir/file1.txt
echo "This is file 2" > test_dir/file2.txt
echo "This is in subdir1" > test_dir/subdir1/subfile1.txt
echo "This is in subdir2" > test_dir/subdir2/subfile2.txt
각 명령어의 역할은 다음과 같습니다:
cd ~/project: 현재 작업 디렉터리를 홈 디렉터리 내의 project 폴더로 변경합니다.mkdir -p test_dir/{subdir1,subdir2}: test_dir이라는 새 디렉터리와 그 안에 subdir1, subdir2라는 두 개의 하위 디렉터리를 생성합니다. -p 옵션은 필요한 경우 상위 디렉터리까지 자동으로 생성해 줍니다.echo 명령어들은 새로 만든 디렉터리 구조 내의 여러 위치에 샘플 내용이 담긴 텍스트 파일들을 생성합니다.이제 생성한 구조를 확인해 봅시다:
tree test_dir
만약 위와 같은 결과가 보이지 않거나 "command not found"라는 오류가 발생해도 걱정하지 마세요. 시스템에 tree 명령어가 설치되어 있지 않을 수 있습니다. 대신 ls -R test_dir 명령어를 사용하면 그래픽 요소는 적지만 비슷한 결과를 확인할 수 있습니다.
샘플 디렉터리 구조가 준비되었으니, 이제 tar 명령어를 사용하여 파일을 하나로 묶는 방법을 배워보겠습니다. tar는 "tape archive"의 약자로, 원래 테이프 드라이브에 아카이브를 생성하기 위해 사용되었습니다. 오늘날에는 여러 파일과 디렉터리를 하나의 파일로 묶는 데 주로 사용됩니다.
test_dir을 아카이브로 묶어 봅시다:
cd ~/project
tar -cvf test_archive.tar test_dir
이 명령어의 구성을 살펴보겠습니다:
tar: 아카이브 생성을 위해 사용하는 명령어입니다.-c: 새로운 아카이브를 생성 (create) 하라는 옵션입니다.-v: "verbose"의 약자로, 아카이브에 추가되는 파일의 이름을 화면에 출력합니다. 선택 사항이지만 진행 상황을 확인하는 데 유용합니다.-f: 생성할 아카이브 파일의 이름을 지정하는 옵션입니다. 이 옵션 바로 뒤에 파일명이 와야 합니다.test_archive.tar: 새로 만들 아카이브 파일의 이름입니다. .tar 확장자는 tar 아카이브의 관례적인 표현입니다.test_dir: 아카이브로 묶을 대상 디렉터리입니다.명령어를 실행하면 아카이브에 추가되는 파일 목록이 나타납니다.
아카이브의 압축을 풀지 않고 내용물만 확인하려면 다음 명령어를 사용합니다:
tar -tvf test_archive.tar
이 명령어는 test_archive.tar라는 파일 (-f) 에서 목록을 확인 (-t) 하고 상세 정보 (-v) 를 보여줍니다.
아카이브를 압축하기 전에, 먼저 아카이브에서 파일을 추출 (해제) 하는 방법을 배워보겠습니다. 이는 tar 아카이브를 다룰 때 매우 중요한 기술입니다.
test_archive.tar 파일의 내용을 추출하려면 다음과 같이 입력합니다:
mkdir extracted_tar
tar -xvf test_archive.tar -C extracted_tar
명령어의 의미는 다음과 같습니다:
mkdir extracted_tar: 아카이브의 내용물을 담을 extracted_tar라는 새 디렉터리를 생성합니다.tar: 아카이브 추출을 위해 사용하는 명령어입니다.-x: 아카이브에서 파일을 추출 (extract) 하라는 옵션입니다.-v: 작업 과정을 상세히 보여주며, 추출되는 각 파일을 화면에 출력합니다.-f: 작업 대상이 될 아카이브 파일을 지정합니다. 추출 시에는 추출할 tar 파일의 경로와 이름을 입력합니다.-C extracted_tar: 파일을 추출하기 전에 extracted_tar 디렉터리로 이동하라는 옵션입니다.명령어를 실행하면 추출되는 파일 목록이 나타납니다.
추출이 잘 되었는지 확인해 봅시다:
tree extracted_tar
tree 명령어를 사용할 수 없는 경우:
ls -R extracted_tar
이를 통해 아카이브 안에 들어있던 디렉터리 구조와 파일들을 확인할 수 있습니다.
이제 생성한 tar 아카이브를 gzip을 사용하여 압축해 보겠습니다:
gzip test_archive.tar
이 명령어는 test_archive.tar를 압축하고 파일 이름을 test_archive.tar.gz로 변경합니다. 원본 test_archive.tar 파일은 압축된 버전으로 대체됩니다.
압축된 파일의 크기를 확인하려면 다음 명령어를 사용하세요:
ls -lh test_archive.tar.gz
-lh 옵션은 파일 크기를 사람이 읽기 쉬운 형식 (KB, MB 등) 으로 보여줍니다.
참고로 .tar.gz 확장자가 일반적이지만, 동일한 의미인 .tgz 확장자를 사용하는 경우도 종종 볼 수 있습니다.
아카이빙과 압축을 모두 수행해 보았으니, 두 작업의 차이점을 이해하고 파일 크기를 비교해 보겠습니다.
아카이빙 (Archiving):
tar (Tape Archive)압축 (Compression):
gzip, bzip2, xz원본 디렉터리, tar 아카이브, 그리고 압축된 tar.gz 파일의 크기를 비교해 봅시다:
## 원본 디렉터리 크기 (실제 파일 내용 크기)
echo "원본 디렉터리 크기 (파일 내용):"
find test_dir -type f -exec ls -l {} \; | awk '{total += $5} END {print total " bytes"}'
## tar 아카이브 크기 (비교를 위해 다시 생성)
tar -cvf test_archive_compare.tar test_dir
echo "tar 아카이브 크기:"
ls -lh test_archive_compare.tar
## 압축된 tar.gz 파일 크기
echo "압축된 tar.gz 파일 크기:"
ls -lh test_archive.tar.gz
## 참고용 디스크 사용량 (블록/섹터 패딩 포함)
echo "원본 디렉터리의 디스크 사용량:"
du -sh test_dir
다음과 같은 점을 발견할 수 있습니다:
du) 은 파일 시스템의 블록 할당 오버헤드를 포함하기 때문에 실제 파일 크기와 다를 수 있습니다.아카이빙 후 크기가 늘어나는 것은 정상적인 현상입니다. tar 형식은 나중에 디렉터리 구조를 정확하게 복원하기 위해 필요한 메타데이터를 저장하는 데 약간의 용량을 사용합니다. 이 오버헤드는 큰 디렉터리에서는 무시할 수 있는 수준이지만, 아주 작은 파일이나 디렉터리에서는 눈에 띌 수 있습니다.
반면 압축은 데이터의 중복성을 찾아 제거함으로써 파일 크기를 획기적으로 줄여줍니다. 이는 특히 텍스트 파일이나 반복적인 내용이 많은 파일에서 매우 효과적입니다.
tar 아카이브를 만들고 나서 따로 압축하는 단계를 이해하는 것도 도움이 되지만, 실제 업무에서는 이 과정들을 하나로 합쳐서 수행하는 경우가 많습니다. tar 명령어에는 아카이브를 생성하면서 동시에 gzip 으로 압축하는 옵션이 내장되어 있습니다.
test_dir을 한 번에 압축된 tar 아카이브로 만들어 봅시다:
cd ~/project
tar -czvf test_combined.tar.gz test_dir
이 명령어는 이전에 사용한 것과 비슷하지만 중요한 옵션이 하나 추가되었습니다:
-z: 아카이브를 생성할 때 gzip 을 사용하여 압축하라는 옵션입니다.결과물인 test_combined.tar.gz 파일은 이전의 두 단계를 거쳐 만든 것과 동일하지만, 훨씬 간편하게 생성할 수 있습니다.
압축을 풀지 않고 이 압축 아카이브의 내용을 확인하려면:
tar -tzvf test_combined.tar.gz
여기서 -z 옵션은 우리가 다루는 파일이 gzip 으로 압축된 파일임을 tar 에게 알려줍니다.
압축 아카이브를 만들었으니, 이제 거기서 파일을 추출하는 방법도 알아야 합니다. test_combined.tar.gz 파일의 내용을 추출해 봅시다:
mkdir extracted
tar -xzvf test_combined.tar.gz -C extracted
명령어의 구성은 다음과 같습니다:
mkdir extracted: 추출된 내용물을 담을 extracted라는 새 디렉터리를 생성합니다.tar: 아카이브 추출 명령어입니다.-x: 아카이브에서 파일을 추출 (extract) 합니다.-z: gzip 으로 압축된 파일을 다루기 위해 필요한 옵션입니다.-v: 추출되는 각 파일을 화면에 보여줍니다.-f: 추출할 대상 아카이브 파일을 지정합니다.-C extracted: 파일을 추출하기 전에 extracted 디렉터리로 이동합니다.명령어를 실행하면 파일들이 추출되는 목록이 나타납니다.
추출 결과를 확인합니다:
tree extracted
또는:
ls -R extracted
아카이브에 들어있던 디렉터리 구조와 파일들이 그대로 복원된 것을 볼 수 있습니다.
tar와 gzip은 리눅스 및 유닉스 계열 시스템에서 흔히 사용되지만, 윈도우 시스템과의 호환성을 위해서는 zip 형식이 자주 사용됩니다. test_dir을 zip 아카이브로 만들어 봅시다:
cd ~/project
zip -r test_archive.zip test_dir
명령어의 역할은 다음과 같습니다:
zip: zip 아카이브를 생성하는 명령어입니다.-r: 모든 파일과 하위 디렉터리를 포함하여 재귀적 (recursive) 으로 작업하라는 옵션입니다.test_archive.zip: 생성할 zip 파일의 이름입니다.test_dir: zip 아카이브에 추가할 대상 디렉터리입니다.이 아카이브의 압축을 풀려면 다음 명령어를 사용합니다:
unzip -d unzipped_files test_archive.zip
-d 옵션은 압축을 풀 디렉터리를 지정합니다. unzipped_files 디렉터리가 없으면 unzip이 자동으로 생성합니다.
zip 파일은 거의 모든 운영체제에서 별도의 도구 없이도 쉽게 인식하고 사용할 수 있다는 장점이 있어, 서로 다른 플랫폼을 사용하는 사용자들과 파일을 공유할 때 좋은 선택이 됩니다.
이 실습을 통해 리눅스에서 흔히 사용되는 몇 가지 중요한 파일 아카이빙 및 압축 기술을 배웠습니다:
tar를 사용하여 압축 없이 아카이빙하는 방법을 익혔습니다.gzip으로 파일을 압축하는 방법을 사용해 보았습니다.tar와 gzip을 결합하여 한 번에 압축 아카이브를 생성하는 방법을 배웠습니다.zip 아카이브 생성법을 배웠습니다.이러한 기술들은 대량의 데이터를 다루거나 시스템 간에 파일을 전송할 때 리눅스에서 효율적인 파일 관리를 위해 반드시 필요합니다. 압축은 파일 크기를 획기적으로 줄여 저장 공간과 전송 시간을 아껴준다는 점을 기억하세요.
리눅스를 계속 사용하면서 이러한 명령어들은 파일과 디렉터리를 관리하는 데 매우 유용하게 쓰일 것입니다. 파일 아카이빙과 압축 기술에 능숙해질 수 있도록 이 작업들을 꾸준히 연습해 보세요.