리눅스 파일 변환/복사

LinuxBeginner
지금 연습하기

소개

Linux 명령줄은 파일 조작을 위한 강력한 유틸리티를 제공하며, 가장 다재다능한 도구 중 하나는 dd 명령어입니다. 이 유틸리티를 사용하면 입력 및 출력 프로세스를 정밀하게 제어하여 파일을 변환하고 복사할 수 있습니다. 원래 테이프 드라이브 및 기타 블록 지향 장치 작업을 위해 설계된 dd는 시스템 관리자와 파워 유저가 다양한 데이터 관리 작업에 의존하는 다목적 도구로 발전했습니다.

이 Lab 에서는 Linux 환경에서 파일을 변환하고 복사하기 위한 dd 명령어의 기능을 살펴봅니다. 바이트 단위 복사 수행 방법, 파일 전송 중 텍스트 대소문자 변환 방법, 그리고 dd를 파일 관리 작업에서 강력한 유틸리티로 만드는 구문과 매개변수를 이해하는 방법을 배우게 됩니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 85%입니다.학습자들로부터 100%의 긍정적인 리뷰율을 받았습니다.

dd 명령어 기본 이해

Linux 의 dd 명령어는 "data duplicator"의 약자로, 파일을 변환하고 복사하는 강력한 유틸리티입니다. cp와 같은 다른 복사 명령어와 달리, dd 명령어는 복사 프로세스를 더 자세하게 제어할 수 있습니다.

dd 명령어의 기본 구문을 이해하는 것부터 시작해 보겠습니다.

dd if=<input file> of=<output file> [options]

여기서:

  • if=는 입력 파일 또는 소스를 지정합니다.
  • of=는 출력 파일 또는 대상을 지정합니다.
  • [options]는 복사 프로세스를 제어하기 위한 추가 매개변수입니다.

이제 dd를 실제로 사용하는 방법을 살펴보겠습니다. 먼저, 작업할 샘플 파일을 만들어 보겠습니다.

  1. 프로젝트 디렉토리로 이동합니다.
cd ~/project
  1. echo 명령어를 사용하여 샘플 텍스트 파일을 만듭니다.
echo "This is a sample file for the dd command demonstration." > ~/project/example.txt
  1. 파일 내용을 확인합니다.
cat ~/project/example.txt

다음 텍스트가 표시되어야 합니다: This is a sample file for the dd command demonstration.

  1. 이제 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: 데이터가 복사된 속도
  1. 복사가 성공했는지 확인합니다.
cat ~/project/example_copy.txt

원본 파일과 동일한 텍스트가 표시되어야 하며, 복사 작업이 성공했음을 확인합니다.

dd 를 이용한 파일 형식 변환

dd 명령어의 강력한 기능 중 하나는 복사 프로세스 중에 데이터를 변환하는 기능입니다. conv= 매개변수를 사용하면 다양한 변환 옵션을 지정할 수 있습니다.

dd를 사용하여 파일의 텍스트 대소문자를 변환하는 방법을 살펴보겠습니다.

  1. 먼저, 대소문자가 혼합된 텍스트로 파일을 만듭니다.
echo "Linux File Conversion with DD Command Example" > ~/project/mixed_case.txt
  1. 파일 내용을 확인합니다.
cat ~/project/mixed_case.txt
  1. 이제 복사하는 동안 모든 대문자를 소문자로 변환해 보겠습니다.
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
  1. 결과를 확인합니다.
cat ~/project/lower_case.txt

다음과 같은 내용이 표시되어야 합니다: linux file conversion with dd command example

dd 명령어는 다른 변환 옵션도 지원합니다.

  • ucase: 소문자를 대문자로 변환
  • ascii: EBCDIC 를 ASCII 로 변환
  • ebcdic: ASCII 를 EBCDIC 로 변환
  • noerror: 읽기 오류 후 계속 진행
  • sync: 각 입력 블록을 입력 블록 크기로 패딩
  1. 텍스트를 대문자로 변환해 보겠습니다.
dd if=~/project/mixed_case.txt of=~/project/upper_case.txt conv=ucase
  1. 결과를 확인합니다.
cat ~/project/upper_case.txt

다음과 같은 내용이 표시되어야 합니다: LINUX FILE CONVERSION WITH DD COMMAND EXAMPLE

conv= 매개변수는 쉼표로 구분된 여러 변환 옵션을 허용할 수도 있습니다. 예를 들어, conv=ucase,sync는 대문자로 변환하고 각 입력 블록을 패딩합니다.

블록 크기 및 Count 옵션 사용법

dd 명령어는 블록 크기 (bs=) 및 카운트 (count=) 옵션을 통해 데이터를 읽고 쓰는 방식을 세밀하게 제어할 수 있습니다. 이러한 매개변수는 대용량 파일 또는 특정 데이터 세그먼트 작업 시 특히 유용합니다.

이러한 옵션이 어떻게 작동하는지 살펴보겠습니다.

  1. 먼저, 테스트를 위해 더 큰 샘플 파일을 만들어 보겠습니다.
for i in {1..10}; do echo "This is line $i of our test file for block operations." >> ~/project/block_test.txt; done
  1. 파일의 내용을 검사합니다.
cat ~/project/block_test.txt

파일에는 10 줄의 텍스트가 포함되어 있습니다.

  1. 이제 블록 크기 및 카운트 옵션을 사용하여 파일의 일부만 복사해 보겠습니다.
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
  1. 부분 복사본의 내용을 확인합니다.
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 바이트
  1. k 접미사를 사용하여 다른 블록 크기를 사용해 보겠습니다.
dd if=~/project/block_test.txt of=~/project/kb_copy.txt bs=1k count=1

이 명령어는 1 킬로바이트 (1024 바이트) 의 데이터를 복사합니다. 이는 테스트 파일 전체를 캡처하기에 충분합니다 (상대적으로 작기 때문).

  1. 복사된 내용을 확인합니다.
cat ~/project/kb_copy.txt

파일 크기가 1 킬로바이트 미만이므로 전체 파일이 복사되었음을 확인할 수 있습니다.

블록 크기 및 카운트 옵션은 디스크 이미지, 대용량 백업 파일 처리 또는 파일의 특정 부분을 추출해야 할 때 특히 중요해집니다.

dd 명령어 고급 옵션 사용법

기본 매개변수 외에도 dd 명령어는 복사 프로세스를 추가적으로 제어할 수 있는 몇 가지 고급 옵션을 제공합니다. 가장 유용한 몇 가지 옵션을 살펴보겠습니다.

status 옵션

status= 옵션은 dd가 진행 상황을 표시하는 방식을 제어합니다. 이는 대용량 파일을 복사할 때 특히 유용합니다.

  1. 다른 샘플 파일을 만들어 보겠습니다.
for i in {1..20}; do echo "Line $i: The dd command provides detailed status information." >> ~/project/status_example.txt; done
  1. 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= 옵션을 사용하면 각각 입력 및 출력 파일에서 블록을 건너뛸 수 있습니다. 이는 파일의 특정 섹션을 대상으로 할 때 유용합니다.

  1. skip을 사용하여 테스트 파일의 중간부터 복사를 시작해 보겠습니다.
dd if=~/project/block_test.txt of=~/project/skipped_copy.txt bs=10 skip=10

skip=10 옵션은 dd에게 복사를 시작하기 전에 입력 파일의 처음 10 개 블록 (각 10 바이트 크기) 을 건너뛰도록 지시합니다.

  1. 결과를 확인합니다.
cat ~/project/skipped_copy.txt

파일의 시작 부분이 건너뛰어진 것을 확인할 수 있습니다.

  1. 이제 seek 옵션을 사용하여 출력 파일의 시작 부분에 공간을 남겨두겠습니다.
dd if=~/project/block_test.txt of=~/project/seek_example.txt bs=10 seek=5

seek=5 옵션은 dd에게 데이터를 쓰기 전에 출력 파일의 시작 부분에서 5 개의 블록을 건너뛰도록 지시합니다.

  1. 출력 파일을 검사합니다.
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 명령어를 살펴보았습니다.

다음과 같은 방법을 배웠습니다.

  1. if= (입력 파일) 및 of= (출력 파일) 매개변수를 사용하여 dd 명령의 기본 구문을 사용하여 파일의 정확한 복사본을 만듭니다.

  2. 대문자와 소문자 간의 텍스트 변환과 같이 복사하는 동안 파일 내용을 변환하기 위해 conv= 매개변수를 사용하여 변환 옵션을 적용합니다.

  3. 블록 크기 (bs=) 및 카운트 (count=) 옵션을 사용하여 읽기 및 쓰기 프로세스를 제어하여 복사할 데이터의 양과 청크 크기를 정확하게 지정할 수 있습니다.

  4. status=progress와 같은 고급 옵션을 사용하여 복사 프로세스를 모니터링하고, skip=seek=을 사용하여 파일의 특정 섹션을 대상으로 지정하고, 플래그를 사용하여 특수 I/O 처리를 제어합니다.

dd 명령어는 Linux 관리자의 툴킷에서 강력한 도구입니다. 처음에는 복잡해 보일 수 있지만, 유연성 덕분에 간단한 파일 변환부터 디스크 이미지 생성, 드라이브 삭제 또는 손상된 저장 장치에서 데이터 복구와 같은 복잡한 시스템 작업에 이르기까지 다양한 작업에 매우 유용합니다.

dd는 잘못 사용하면 위험할 수 있다는 점을 기억하십시오. 파일이나 디스크를 덮어쓰기 전에 확인 프롬프트를 제공하지 않기 때문입니다. 특히 시스템 디스크 또는 중요한 데이터를 사용할 때는 항상 매개변수를 다시 확인하십시오.