IT 공부내용 정리/Linux

터미널 명령어 - dd 파일을 저단위에서 복사할 때

따뜻한 차가움 2025. 3. 31. 12:02

사용 버전 : Linux 우분투(레드햇 계열) 24.04.01 LTS 버전
사용한 시스템 지역/언어 : 대한민국/한글

man dd 원문

더보기

DD(1)                            User Commands                           DD(1)

NAME
       dd - convert and copy a file

SYNOPSIS
       dd [OPERAND]...
       dd OPTION

DESCRIPTION
       Copy a file, converting and formatting according to the operands.

       bs=BYTES
              read and write up to BYTES bytes at a time (default: 512); over‐
              rides ibs and obs

       cbs=BYTES
              convert BYTES bytes at a time

       conv=CONVS
              convert the file as per the comma separated symbol list

       count=N
              copy only N input blocks

       ibs=BYTES
              read up to BYTES bytes at a time (default: 512)

       if=FILE
              read from FILE instead of stdin

       iflag=FLAGS
              read as per the comma separated symbol list

       obs=BYTES
              write BYTES bytes at a time (default: 512)

       of=FILE
              write to FILE instead of stdout

       oflag=FLAGS
              write as per the comma separated symbol list

       seek=N (or oseek=N) skip N obs-sized output blocks

       skip=N (or iseek=N) skip N ibs-sized input blocks

       status=LEVEL
              The  LEVEL  of information to print to stderr; 'none' suppresses
              everything but error messages,  'noxfer'  suppresses  the  final
              transfer  statistics, 'progress' shows periodic transfer statis‐
              tics

       N and BYTES may be followed by the following  multiplicative  suffixes:
       c=1,  w=2,  b=512,  kB=1000,  K=1024,  MB=1000*1000, M=1024*1024, xM=M,
       GB=1000*1000*1000, G=1024*1024*1024, and so on for T, P, E, Z, Y, R, Q.
       Binary prefixes can be used, too: KiB=K, MiB=M, and so on.  If  N  ends
       in 'B', it counts bytes not blocks.

       Each CONV symbol may be:

       ascii  from EBCDIC to ASCII

       ebcdic from ASCII to EBCDIC

       ibm    from ASCII to alternate EBCDIC

       block  pad newline-terminated records with spaces to cbs-size

       unblock
              replace trailing spaces in cbs-size records with newline

       lcase  change upper case to lower case

       ucase  change lower case to upper case

       sparse try to seek rather than write all-NUL output blocks

       swab   swap every pair of input bytes

       sync   pad  every  input  block  with  NULs to ibs-size; when used with
              block or unblock, pad with spaces rather than NULs

       excl   fail if the output file already exists

       nocreat
              do not create the output file

       notrunc
              do not truncate the output file

       noerror
              continue after read errors

       fdatasync
              physically write output file data before finishing

       fsync  likewise, but also write metadata

       Each FLAG symbol may be:

       append append mode (makes sense  only  for  output;  conv=notrunc  sug‐
              gested)

       direct use direct I/O for data

       directory
              fail unless a directory

       dsync  use synchronized I/O for data

       sync   likewise, but also for metadata

       fullblock
              accumulate full blocks of input (iflag only)

       nonblock
              use non-blocking I/O

       noatime
              do not update access time

       nocache
              Request to drop cache.  See also oflag=sync

       noctty do not assign controlling terminal from file

       nofollow
              do not follow symlinks

       Sending a USR1 signal to a running 'dd' process makes it print I/O sta‐
       tistics to standard error and then resume copying.

       Options are:

       --help display this help and exit

       --version
              output version information and exit

AUTHOR
       Written by Paul Rubin, David MacKenzie, and Stuart Kemp.

REPORTING BUGS
       GNU coreutils online help: <https://www.gnu.org/software/coreutils/>
       Report any translation bugs to <https://translationproject.org/team/>

COPYRIGHT
       Copyright  ©  2023  Free Software Foundation, Inc.  License GPLv3+: GNU
       GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
       This is free software: you are free  to  change  and  redistribute  it.
       There is NO WARRANTY, to the extent permitted by law.

SEE ALSO
       Full documentation <https://www.gnu.org/software/coreutils/dd>
       or available locally via: info '(coreutils) dd invocation'

GNU coreutils 9.4                 April 2024                             DD(1)

man dd 번역기 번역본

더보기

DD (1) 사용자 명령 DD (1)

이름
       DD- 파일을 변환하고 복사하십시오

개요
       DD [피연산자] ...
       DD 옵션

설명
       피연산자에 따라 파일, 변환 및 서식을 복사하십시오.

BS = 바이트
              한 번에 바이트 바이트를 읽고 쓰십시오 (기본값 : 512). 위에-
              IBS와 OBS

CBS = 바이트
              한 번에 바이트 바이트를 변환합니다

conv = convs
              쉼표로 분리 된 기호 목록에 따라 파일 변환

count = n
              N 입력 블록 만 복사하십시오

IBS = 바이트
              한 번에 바이트 바이트를 읽으십시오 (기본값 : 512)

if = 파일
              stdin 대신 파일에서 읽으십시오

iflag = 플래그
              쉼표로 분리 된 기호 목록에 따라 읽습니다

OBS = 바이트
              한 번에 바이트 바이트 작성 (기본값 : 512)

of = 파일
              stdout 대신 파일에 쓰십시오

oflag = 플래그
              쉼표로 분리 된 기호 목록에 따라 쓰십시오

seet = n (또는 oseek = n) skip n obs 크기의 출력 블록을 건너 뜁니다

skip = n (또는 iseek = n) skip n ibs 크기의 입력 블록

상태 = 레벨
              Stderr에 인쇄 할 정보 수준; '없음'은 억제합니다
              오류 메시지를 제외한 모든 것이 'Noxfer'는 최종을 억제합니다
              전송 통계, '진행 상황'은 주기적 전송 통계를 보여줍니다.
              틱

N 및 바이트에 이어 다음 곱셈 접미사가 이어질 수 있습니다.
       C = 1, w = 2, b = 512, kb = 1000, k = 1024, mb = 1000*1000, m = 1024*1024, xm = m,
       GB = 1000*1000*1000, G = 1024*1024*1024 등 T, P, E, Z, Y, R, Q.
       이진 접두사도 사용할 수 있습니다 : kib = k, mib = m 등.  n이 끝나면
       'B'에서는 블록이 아닌 바이트를 계산합니다.

각 확실한 기호는 다음과 같습니다.

EBCDIC에서 ASCII까지 ASCII

ASCII에서 EBCDIC까지의 EBCDIC

ASCII에서 대체 EBCDIC까지의 IBM

CBS 크기의 공간이있는 블록 패드 Newline-Terminated Records

차단 해제
              CBS 사이즈 레코드의 후행 공간을 Newline으로 교체하십시오

lcase 변경 대문자가 소문자로 변경됩니다

UCAES는 소문자를 대문자로 변경합니다

Sparse는 All-Nul 출력 블록을 쓰기보다는 추구하려고합니다.

면봉은 모든 입력 바이트 쌍을 교환합니다

IBS 크기에 흠이있는 모든 입력 블록을 동기화하십시오. 함께 사용될 때
              차단 또는 차단을 풀고 숫자가 아닌 공백으로 패드

출력 파일이 이미 존재하면 제외 실패

nocreat
              출력 파일을 작성하지 마십시오

notrunc
              출력 파일을 자르지 마십시오

노 에러
              읽기 오류 후에도 계속하십시오

fdatasync
              마무리하기 전에 출력 파일 데이터를 물리적으로 쓰십시오

fsync 마찬가지로 메타 데이터도 작성합니다

각 플래그 기호는 다음과 같습니다.

Append Append 모드 (출력에 대해서만 의미가 있습니다; conc = notrunc sug-
              gested)

데이터에 직접 I/O를 직접 사용하십시오

예배 규칙서
              디렉토리가 아니라면 실패합니다

DSYNC 데이터에 동기화 된 I/O를 사용합니다

메타 데이터와 마찬가지로 동기화됩니다

풀 블록
              입력의 전체 블록 축적 (iflag 만 해당)

비 블록
              비 블로킹 I/O를 사용하십시오

노아 타임
              액세스 시간을 업데이트하지 마십시오

Nocache
              캐시 드롭 요청.  OFLAG = SYNC도 참조하십시오

Noctty는 파일에서 통제 터미널을 할당하지 않습니다

nofollow
              Symlinks를 따르지 마십시오

실행중인 'DD'프로세스에 USR1 신호를 보내면 I/O Sta-
       표준 오류에 대한 틱스틱과 복사를 재개하십시오.

옵션은 다음과 같습니다.

-헬프이 도움말과 종료를 표시합니다

--버전
              출력 버전 정보 및 종료

작가
       Paul Rubin, David Mackenzie 및 Stuart Kemp가 작성했습니다.

보고 버그
       GNU Coreutils 온라인 도움말 : <https://www.gnu.org/software/coreutils/>
       번역 버그를 <https://translationproject.org/team/>에보고하십시오

저작권
       저작권 © 2023 Free Software Foundation, Inc. 라이센스 GPLV3+: GNU
       GPL 버전 3 이상 <https://gnu.org/licenses/gpl.html>.
       이것은 무료 소프트웨어입니다. 자유롭게 변경하고 재분배 할 수 있습니다.
       법률에 의해 허용되는 범위 내에서 보증은 없습니다.

참조하십시오
       전체 문서 <https://www.gnu.org/software/coreutils/dd>
       또는 Info '(Coreutils) DD 호출을 통해 로컬로 사용 가능

GNU Coreuutils 2024 년 4 월 9.4 DD (1)

 

형태 : [입력] | dd | [출력]

기능 : [입력]에 해당하는 값을 변환하여 [출력]으로 전달한다.

 

[옵션]

-bs=바이트: 한 에 지정한 이트   기록 (기: 512); ibs와 obs를 .

-count=N: N개의 입력 만 복. bs로 지정한 크기가 1개 블록

-if=파일: 표준 입력 대신 파일에서 읽습니다.

-of=파일: 표 출력 대신 파일 니다.

-conv=변: 쉼표 분된  목록에 따라 파일을 변.

-iflag=플: 쉼로 구된 기호 목록에 따라 읽습니다.

-oflag=플: 쉼   목록 따라 니다.

 

 

 

conv 변환 매개변수

더보기

block : 개행문자(enter, \n 등)로 끝나는 레코드를 cbs 크기의 공백으로 채움

unblock : cbs크기의 후행 공백을 개행문자로 대체

lcase : 대문자를 소문자로 변경

ucase : 소문자를 대문자로 변경

swap : 입력 데이터의 바이트 순서를 교환

 

※입력 데이터의 저장방식

 - 빅 엔디언 : 가장 중요한 바이트가 먼저 저장됨

 - 리틀 엔디언 : 가장 덜 중요한 바이트가 먼저 저장됨

예) 0x12345678을 저장할 경우

빅 엔디언 : 12 34 56 78 순서로 저장

리틀 엔디언 : 78 56 34 12 순서로 저장

 

flag 매개변수

더보기

iflag 주요 플래그

fullblock : 입력 블록을 완전히 채울 때 까지 읽음.

nonblock : 비차단모드로 읽음

direct : 직접 I/O 모드를 사용하여 데이터를 읽음.

sync : 동기화된 I/O 모드를 사용하여 데이터를 읽음.

noatime : 파일의 접근 시간을 업데이트 하지 않음.

 

oflag 주요 플래그

append : 파일의 끝에 데이터를 추가함.

direct : 직접 I/O 모드를 사용하여 데이터를 기록.

dsync : 데이터가 디스크에 기록될 때까지 쓰기작업 동기화

sync : 데이터와 메타데이터가 디스크에 기록될 때까지 쓰기작업 동기화

nocache : 캐시를 사용하지 않고 데이터를 기록.

noatime : 파일의 접근 시간을 업데이터하지 않음.

 

 

dd의 활용

파이프라인 사용예시

더보기

1. 입력데이터를 변환하여 출력

$echo "HELLO WORLD" | dd conv=lcase | tee ouput.txt

HELLO WORLD 를 소문자로 변환후 해당 결과를 output.txt 파일로 저장하고 화면에 출력함

 

2. 입력데이터의 변환

$echo "HELLO WORLD" | dd conv=lcase

HELLO WORLD 를 소문자로 변환후 해당 결과를 출력함.

 

3. 데이터의 압축

$cat file.txt | dd bs=1024 count=10 | gzip > file.txt.gz

file.txt에서 1024byte를 읽어 온 뒤(10개의 문자씩 읽음) gzip으로 압축하여 file.txt.gz로 저장

 

4.데이터 패턴 생성

$dd if=/dev/zero bs=1M count=1 | hexdump -C

1MB의 0으로 채워진 데이터를 생성하여 헥사 덤프로 출력

 

파일 활용 예시

더보기

1. 디스크 복제

$dd if=/dev/sda1 of=/dev/sda2

sda1 파티션의 내용을 sda2파티션으로 복사

 

2. 디스크 이미지 생성 및 복원

$dd if=/dev/sda of=/path/to/image.img

/dev/sda 디렉토리의 내용을 image.img로 저장

 

3. 부트로더 복사

$dd if=/dev/sda of=/path/to/mbr/backup.img bs=512 count=1

/dev/sda 파일에서 512byte크기의 1블록을 읽어서 backup.img 파일로 저장

 

4. 데이터 변환 및 처리

$dd if=/dev/zero of=/path/to/file.txt bs=1M count=100

0으로 구성된 파일(zero)에서 1Mb 단위로 100개의 블록을 읽어와 file.txt로 저장

 

5.디스크 성능 테스트

$dd if=/dev/zero of=/temp/testfile bs=1G count=1 oflag=direct

0으로 채워진 1Gb 용량의 데이터를 testfile에 쓰고 쓰기 속도를 측정

※/dev/zero 파일 대신 /dev/urandom 파일을 사용하여 무작위 데이터 사용 가능

 

$dd if=/tem/testfile of=/dev/null bs=1G count=1 iflag=direct

testfile을 /dev/null로 보내면서 파일의 읽기 속도를 측정

 

각 활용 예시의 필요성

더보기

1. 디스크 복제

 - 백업 및 복구에 활용

 - 시스템 마이그레이션 : 새로운 하드 드라이브로 시스템을 이전할 때 그대로 복사하여 손쉽게 사용

 - 동일한 환경 구축 : 여러대의 컴퓨터에 동일한 시스템 환경을 구축하고 싶을 때 사용

 

2. 디스크 이미지 생성 및 복원

 - 디스크의 상태를 이미지 파일로 저장하여 백업

 - 가상머신 활용 : 디스크 이미지를 가상머신에 사용하여 테스트 환경 구축

 - 디스크 이미지를 통해 다른 시스템으로 쉽게 전송

 

3. 부트로더 복사

 - 부트로더 백업 및 복구 : 부팅 문제 발생시 복구를 위해사용

 - 멀티부트 설정 : 여러 운영체제를 설치할 때 부트로더를 복사하여 멀티 부트 환경을 설정 가능

 

4.데이터 변환

 - 주로 보안 계통에서 사용하며 데이터를 0이나 랜덤 데이터로 채우기 위해 사용

 

5. 읽기/쓰기 속도 측정

 - 자신의 프로그램 처리속도가 느리다고 생각 될 때 점검용도로 사용 가능

 

dd 명령어는 cp 명령과 다르게 저수준에서 조작하는 복사이므로 좀 더 넓은 범위의 활동을 할 수 있다.

가장 큰 차이는 파일시스템의 메타데이터를 무시할 수 있는지 여부이다.

메타데이터는 권한, 타임스탬프 등 파일에 대한 정보이다.

cp 명령어를 사용할 경우 메타데이터가 유지되는 반면

dd 명령어의 경우 이런 것들을 전부 무시하고 원시 데이터만 추출하여 처리할 수 있게 된다.