소개
Linux 명령줄은 파일 조작을 위한 강력한 유틸리티를 제공하며, 가장 다재다능한 도구 중 하나는 dd 명령어입니다. 이 유틸리티를 사용하면 입력 및 출력 프로세스를 정밀하게 제어하여 파일을 변환하고 복사할 수 있습니다. 원래 테이프 드라이브 및 기타 블록 지향 장치 작업을 위해 설계된 dd는 시스템 관리자와 파워 유저가 다양한 데이터 관리 작업에 의존하는 다목적 도구로 발전했습니다.
이 Lab 에서는 Linux 환경에서 파일을 변환하고 복사하기 위한 dd 명령어의 기능을 살펴봅니다. 바이트 단위 복사 수행 방법, 파일 전송 중 텍스트 대소문자 변환 방법, 그리고 dd를 파일 관리 작업에서 강력한 유틸리티로 만드는 구문과 매개변수를 이해하는 방법을 배우게 됩니다.
dd 명령어 기본 이해
Linux 의 dd 명령어는 "data duplicator"의 약자로, 파일을 변환하고 복사하는 강력한 유틸리티입니다. cp와 같은 다른 복사 명령어와 달리, dd 명령어는 복사 프로세스를 더 자세하게 제어할 수 있습니다.
dd 명령어의 기본 구문을 이해하는 것부터 시작해 보겠습니다.
dd if=<input file> of=<output file> [options]
여기서:
if=는 입력 파일 또는 소스를 지정합니다.of=는 출력 파일 또는 대상을 지정합니다.[options]는 복사 프로세스를 제어하기 위한 추가 매개변수입니다.
이제 dd를 실제로 사용하는 방법을 살펴보겠습니다. 먼저, 작업할 샘플 파일을 만들어 보겠습니다.
- 프로젝트 디렉토리로 이동합니다.
cd ~/project
echo명령어를 사용하여 샘플 텍스트 파일을 만듭니다.
echo "This is a sample file for the dd command demonstration." > ~/project/example.txt
- 파일 내용을 확인합니다.
cat ~/project/example.txt
다음 텍스트가 표시되어야 합니다: This is a sample file for the dd command demonstration.
- 이제
dd명령어를 사용하여 이 파일의 정확한 복사본을 만듭니다.
dd if=~/project/example.txt of=~/project/example_copy.txt
다음과 유사한 출력이 표시되어야 합니다.
0+1 records in
0+1 records out
56 bytes copied, 0.000418813 s, 133.7 kB/s
출력은 다음을 보여줍니다.
- Records in/out: 읽기/쓰기된 전체 및 부분 블록의 수
- Bytes copied: 복사된 총 데이터 양
- Time taken: 작업에 걸린 시간
- Speed: 데이터가 복사된 속도
- 복사가 성공했는지 확인합니다.
cat ~/project/example_copy.txt
원본 파일과 동일한 텍스트가 표시되어야 하며, 복사 작업이 성공했음을 확인합니다.
dd 를 이용한 파일 형식 변환
dd 명령어의 강력한 기능 중 하나는 복사 프로세스 중에 데이터를 변환하는 기능입니다. conv= 매개변수를 사용하면 다양한 변환 옵션을 지정할 수 있습니다.
dd를 사용하여 파일의 텍스트 대소문자를 변환하는 방법을 살펴보겠습니다.
- 먼저, 대소문자가 혼합된 텍스트로 파일을 만듭니다.
echo "Linux File Conversion with DD Command Example" > ~/project/mixed_case.txt
- 파일 내용을 확인합니다.
cat ~/project/mixed_case.txt
- 이제 복사하는 동안 모든 대문자를 소문자로 변환해 보겠습니다.
dd if=~/project/mixed_case.txt of=~/project/lower_case.txt conv=lcase
conv=lcase 옵션은 dd에게 복사 작업 중에 모든 대문자를 소문자로 변환하도록 지시합니다. 다음과 유사한 출력이 표시되어야 합니다.
0+1 records in
0+1 records out
46 bytes copied, 0.000401813 s, 114.5 kB/s
- 결과를 확인합니다.
cat ~/project/lower_case.txt
다음과 같은 내용이 표시되어야 합니다: linux file conversion with dd command example
dd 명령어는 다른 변환 옵션도 지원합니다.
ucase: 소문자를 대문자로 변환ascii: EBCDIC 를 ASCII 로 변환ebcdic: ASCII 를 EBCDIC 로 변환noerror: 읽기 오류 후 계속 진행sync: 각 입력 블록을 입력 블록 크기로 패딩
- 텍스트를 대문자로 변환해 보겠습니다.
dd if=~/project/mixed_case.txt of=~/project/upper_case.txt conv=ucase
- 결과를 확인합니다.
cat ~/project/upper_case.txt
다음과 같은 내용이 표시되어야 합니다: LINUX FILE CONVERSION WITH DD COMMAND EXAMPLE
conv= 매개변수는 쉼표로 구분된 여러 변환 옵션을 허용할 수도 있습니다. 예를 들어, conv=ucase,sync는 대문자로 변환하고 각 입력 블록을 패딩합니다.
블록 크기 및 Count 옵션 사용법
dd 명령어는 블록 크기 (bs=) 및 카운트 (count=) 옵션을 통해 데이터를 읽고 쓰는 방식을 세밀하게 제어할 수 있습니다. 이러한 매개변수는 대용량 파일 또는 특정 데이터 세그먼트 작업 시 특히 유용합니다.
이러한 옵션이 어떻게 작동하는지 살펴보겠습니다.
- 먼저, 테스트를 위해 더 큰 샘플 파일을 만들어 보겠습니다.
for i in {1..10}; do echo "This is line $i of our test file for block operations." >> ~/project/block_test.txt; done
- 파일의 내용을 검사합니다.
cat ~/project/block_test.txt
파일에는 10 줄의 텍스트가 포함되어 있습니다.
- 이제 블록 크기 및 카운트 옵션을 사용하여 파일의 일부만 복사해 보겠습니다.
dd if=~/project/block_test.txt of=~/project/partial_copy.txt bs=10 count=5
이 명령어에서:
bs=10은 블록 크기를 10 바이트로 설정합니다.count=5는 5 개의 블록만 읽고 써야 함을 지정합니다.
이는 입력 파일의 처음 50 바이트 (10 바이트 × 5 블록) 만 복사됨을 의미합니다. 다음과 유사한 출력이 표시되어야 합니다.
5+0 records in
5+0 records out
50 bytes copied, 0.000412813 s, 121.1 kB/s
- 부분 복사본의 내용을 확인합니다.
cat ~/project/partial_copy.txt
원본 파일의 처음 50 바이트만 표시되어야 합니다.
블록 크기 옵션은 다음 접미사를 사용할 수 있습니다.
c(바이트, bytes) - 1 바이트w(단어, words) - 2 바이트b(블록, blocks) - 512 바이트k(킬로바이트, kilobytes) - 1024 바이트M(메가바이트, megabytes) - 1024*1024 바이트G(기가바이트, gigabytes) - 102410241024 바이트
k접미사를 사용하여 다른 블록 크기를 사용해 보겠습니다.
dd if=~/project/block_test.txt of=~/project/kb_copy.txt bs=1k count=1
이 명령어는 1 킬로바이트 (1024 바이트) 의 데이터를 복사합니다. 이는 테스트 파일 전체를 캡처하기에 충분합니다 (상대적으로 작기 때문).
- 복사된 내용을 확인합니다.
cat ~/project/kb_copy.txt
파일 크기가 1 킬로바이트 미만이므로 전체 파일이 복사되었음을 확인할 수 있습니다.
블록 크기 및 카운트 옵션은 디스크 이미지, 대용량 백업 파일 처리 또는 파일의 특정 부분을 추출해야 할 때 특히 중요해집니다.
dd 명령어 고급 옵션 사용법
기본 매개변수 외에도 dd 명령어는 복사 프로세스를 추가적으로 제어할 수 있는 몇 가지 고급 옵션을 제공합니다. 가장 유용한 몇 가지 옵션을 살펴보겠습니다.
status 옵션
status= 옵션은 dd가 진행 상황을 표시하는 방식을 제어합니다. 이는 대용량 파일을 복사할 때 특히 유용합니다.
- 다른 샘플 파일을 만들어 보겠습니다.
for i in {1..20}; do echo "Line $i: The dd command provides detailed status information." >> ~/project/status_example.txt; done
status=progress옵션과 함께dd를 사용합니다.
dd if=~/project/status_example.txt of=~/project/status_copy.txt bs=1k status=progress
status=progress 옵션을 사용하면 dd는 복사 작업 중에 실시간 진행 상황 정보를 표시합니다.
status 옵션은 여러 값을 지원합니다.
none: 정보를 표시하지 않음noxfer: 전송 통계를 제외한 모든 정보 표시progress: 주기적인 전송 통계 표시
skip 및 seek 옵션
skip= 및 seek= 옵션을 사용하면 각각 입력 및 출력 파일에서 블록을 건너뛸 수 있습니다. 이는 파일의 특정 섹션을 대상으로 할 때 유용합니다.
skip을 사용하여 테스트 파일의 중간부터 복사를 시작해 보겠습니다.
dd if=~/project/block_test.txt of=~/project/skipped_copy.txt bs=10 skip=10
skip=10 옵션은 dd에게 복사를 시작하기 전에 입력 파일의 처음 10 개 블록 (각 10 바이트 크기) 을 건너뛰도록 지시합니다.
- 결과를 확인합니다.
cat ~/project/skipped_copy.txt
파일의 시작 부분이 건너뛰어진 것을 확인할 수 있습니다.
- 이제
seek옵션을 사용하여 출력 파일의 시작 부분에 공간을 남겨두겠습니다.
dd if=~/project/block_test.txt of=~/project/seek_example.txt bs=10 seek=5
seek=5 옵션은 dd에게 데이터를 쓰기 전에 출력 파일의 시작 부분에서 5 개의 블록을 건너뛰도록 지시합니다.
- 출력 파일을 검사합니다.
hexdump -C ~/project/seek_example.txt | head
이렇게 하면 파일이 실제 데이터가 시작되기 전에 50 바이트의 0(5 개의 10 바이트 블록) 으로 시작하는 것을 보여줍니다.
iflag 및 oflag 옵션
iflag= 및 oflag= 옵션은 입력 및 출력 파일의 특수 처리를 제어합니다.
dd if=~/project/block_test.txt of=~/project/direct_copy.txt bs=4k iflag=direct,fullblock
일반적인 플래그는 다음과 같습니다.
direct: 데이터에 직접 I/O 사용dsync: 데이터에 동기화된 I/O 사용sync: 데이터 및 메타데이터에 동기화된 I/O 사용nonblock: 논블로킹 I/O 사용fullblock: 전체 입력 블록 누적
이러한 고급 옵션은 dd를 백업 생성, 디스크 복제 및 데이터 복구를 포함한 다양한 시스템 작업에 유용한 도구로 만듭니다.
요약
이 랩에서는 다재다능한 파일 변환 및 복사 기능을 제공하는 Linux 의 강력한 dd 명령어를 살펴보았습니다.
다음과 같은 방법을 배웠습니다.
if=(입력 파일) 및of=(출력 파일) 매개변수를 사용하여dd명령의 기본 구문을 사용하여 파일의 정확한 복사본을 만듭니다.대문자와 소문자 간의 텍스트 변환과 같이 복사하는 동안 파일 내용을 변환하기 위해
conv=매개변수를 사용하여 변환 옵션을 적용합니다.블록 크기 (
bs=) 및 카운트 (count=) 옵션을 사용하여 읽기 및 쓰기 프로세스를 제어하여 복사할 데이터의 양과 청크 크기를 정확하게 지정할 수 있습니다.status=progress와 같은 고급 옵션을 사용하여 복사 프로세스를 모니터링하고,skip=및seek=을 사용하여 파일의 특정 섹션을 대상으로 지정하고, 플래그를 사용하여 특수 I/O 처리를 제어합니다.
dd 명령어는 Linux 관리자의 툴킷에서 강력한 도구입니다. 처음에는 복잡해 보일 수 있지만, 유연성 덕분에 간단한 파일 변환부터 디스크 이미지 생성, 드라이브 삭제 또는 손상된 저장 장치에서 데이터 복구와 같은 복잡한 시스템 작업에 이르기까지 다양한 작업에 매우 유용합니다.
dd는 잘못 사용하면 위험할 수 있다는 점을 기억하십시오. 파일이나 디스크를 덮어쓰기 전에 확인 프롬프트를 제공하지 않기 때문입니다. 특히 시스템 디스크 또는 중요한 데이터를 사용할 때는 항상 매개변수를 다시 확인하십시오.



