{{위키데이터 속성 추적}}
{{소문자}}
{{소프트웨어 정보
| name                   = dd
| logo                   = 
| screenshot             = 
| screenshot size        = 
| caption                = 
| author                 = [[켄 톰프슨]]
| developer              = [[AT&T 벨 연구소]]
| released               = 1974년 6월
| latest release version = 
| latest release date    = 
| operating system       = [[유닉스]], [[유닉스 계열]]
| genre                  = [[명령어]]
| license                = 
| website                = 
}}
'''dd'''는 파일을 변환하고 복사하는 것이 주 목적인 [[유닉스]] 및 [[유닉스 계열]] [[운영 체제]]용 명령 줄 유틸리티이다.<ref name="Unix-V7-man">{{웹 인용 | url=http://www.orangetide.com/Unix/V7/usr/man/man1/dd.1 | 제목=dd man page | author=Bell Laboratories | accessdate=2009-02-25 | 보존url=https://web.archive.org/web/20110208160759/http://www.orangetide.com/Unix/V7/usr/man/man1/dd.1 | 보존날짜=2011-02-08 | url-status=dead }}</ref>

유닉스에서 하드웨어와 특수 [[장치 파일]]용 장치 드라이버는 파일 시스템에서 마치 일반 파일처럼 나타난다. dd는 기능이 개별 드라이버에서 구현되어 있는 경우 이러한 파일들을 읽거나 기록하는 것이 가능하다. 그러므로 dd는 하드 드라이브의 [[부팅 섹터]]를 백업하는 등의 일과 고정된 크기의 랜덤 데이터를 취득하기 위해 사용할 수 있다. dd 프로그램은 복사 시 데이터에 변환을 수행할 수도 있는데, 여기에는 [[엔디언|바이트 순서]] 스와핑, [[ASCII]]↔[[EBCDIC]] 텍스트 인코딩 변환을 포함할 수 있다.<ref name="tfl-dd">{{웹 인용 | url=http://www.codecoffee.com/tipsforlinux/articles/036.html | 제목=How and when to use the dd command? | author=Sam Chessman | publisher=CodeCoffee | accessdate=2008-02-19 | archive-date=2008-02-14 | archive-url=https://web.archive.org/web/20080214125249/http://www.codecoffee.com/tipsforlinux/articles/036.html | url-status= }}</ref>

dd라는 이름은 [[IBM]]의 [[작업 제어 언어]](JCL)에서 발견되는 [[작업 제어 언어#인스트림 입력|DD 문]]과 관련되며<ref name="jargon-dd">{{웹 인용 | url=http://www.catb.org/jargon/html/D/dd.html | 제목=dd | author=Eric S. Raymond | accessdate=2008-02-19 }}</ref><ref>{{뉴스그룹 인용 |제목=Re: origin of the UNIX dd command |author=Dennis Ritchie |date=Feb 17, 2004 |newsgroup=alt.folklore.computers |message-id=c0s1he$1atuh9$1@ID-156882.news.uni-berlin.de |url=https://groups.google.com/forum/#!msg/alt.folklore.computers/HAWoZ8g-xYk/HDUVxwTVLKAJ |quote=dd was always named after JCL dd cards. |access-date=January 10, 2016}}</ref> 여기에서 DD는 "Data Description"을 가리킨다.<ref>See this old discussion {{웹 인용 | url=http://www.djmnet.org/lore/dd-origin.txt | 제목=The Unix "dd" command | publisher=alt.folklore.computers | accessdate=2011-07-05 | 보존url=https://web.archive.org/web/20110709114314/http://www.djmnet.org/lore/dd-origin.txt | 보존날짜=2011-07-09 | url-status=dead }}</ref> 이 명령의 문법은 다른 유닉스 명령보다 JCL 문과 유사하다.<ref name="jargon-dd"/>

원래 [[ASCII]]와 [[EBCDIC]] 간의 변환을 위해 고안된 dd는 [[버전 5 유닉스]]에 처음 등장하였다.<ref>{{기술보고서 인용 |first1=M. D. |last1=McIlroy |authorlink1=Doug McIlroy |year=1987 |url=http://www.cs.dartmouth.edu/~doug/reader.pdf |제목=A Research Unix reader: annotated excerpts from the Programmer's Manual, 1971–1986 |series=CSTR |number=139 |institution=Bell Labs}}</ref> dd 명령어는 [[단일 유닉스 규격|SUS]]의 일부인 [[IEEE]] 표준 1003.1-2008에 규정되어 있다.

== 용도 ==
dd 명령은 다양한 목적을 위해 쓰일 수 있다.
=== 데이터 전송 ===
{| class="wikitable"
|+dd의 데이터 전송 형태
|-
| <syntaxhighlight lang="bash">dd if=/dev/sr0 of=myCD.iso bs=2048 conv=noerror,sync</syntaxhighlight> || 
CD-ROM으로부터 [[ISO 이미지|ISO]] [[디스크 이미지]]를 생성한다. 일부의 경우 작성된 ISO 이미지는 CD-ROM 기록에 사용되는 것과 동일하지 않을 수도 있다.<ref>{{서적 인용
 | url = http://books.google.com/books?id=ZBKsMYz1Q4kC&pg=PA174&lpg=PA174&dq=iso+image+2048+block&source=bl&ots=fKnHYFhTYV&sig=yxcSn_WWaIm7uYrXyPaL4bW01Js&hl=en&sa=X&ei=zXD5U7O_CcbdaMbWgegE&redir_esc=y#v=onepage&q&f=false
 | 제목 = The Linux Command Line, A Complete Introduction
 | chapter = 15. Storage Media
 | year = 2012 | accessdate = 2014-08-24
 | author = William E. Shotts, Jr. | publisher = [[No Starch Press]]
 | page = 174
}}</ref>
|-
| <syntaxhighlight lang="bash">dd if=system.img of=/dev/sdc bs=4096 conv=noerror</syntaxhighlight> || 이전에 만든 이미지로부터 하드 디스크 드라이브(또는 SD 카드)를 복원한다.
|-
| <syntaxhighlight lang="bash">dd if=/dev/sda2 of=/dev/sdb2 bs=4096 conv=noerror</syntaxhighlight> || 하나의 [[하드 디스크 파티션|파티션]]을 다른 파티션으로 [[디스크 복제|복제]]한다.
|-
| <syntaxhighlight lang="bash">dd if=/dev/ad0 of=/dev/ad1 bs=1M conv=noerror</syntaxhighlight> || 하드 디스크 드라이브 "ad0"을 "ad1"으로 복제한다.
|}

=== 마스터 부트 레코드 백업 및 복원 ===
마스터 부트 레코드를 복구할 수 있다. 복구 파일로부터 전송받거나 복구 파일로 전송할 수 있다.

플로피 드라이브의 처음 두 개의 섹터를 복제:
<syntaxhighlight lang="bash">
dd if=/dev/fd0 of=MBRboot.img bs=512 count=2
</syntaxhighlight>

완전한 x86 [[마스터 부트 레코드]]의 이미지 만들기 (MS-DOS [[파티션]], MBR 매직 바이트 포함):
<syntaxhighlight lang="bash">
dd if=/dev/sda of=MBR.img bs=512 count=1
</syntaxhighlight>

[[마스터 부트 레코드]]의 부트 코드만의 이미지 만들기 ([[파티션 테이블]] 없이, 또 부팅 시 필요한 매직 바이트 없이):
<syntaxhighlight lang="bash">
dd if=/dev/sda of=MBR_boot.img bs=446 count=1
</syntaxhighlight>

=== 데이터 수정 ===
dd는 특정 자리의 데이터를 수정할 수 있다. 이를테면 아래의 명령을 통해 파일의 최초 512바이트를 널(null) 바이트로 채울 수 있다:

<syntaxhighlight lang="bash">
dd if=/dev/zero of=path/to/file bs=512 count=1 conv=notrunc
</syntaxhighlight>

notrunc 변환 옵션은 출력 파일을 잘라내지 않는다는 것을 뜻한다. 즉, 출력 파일이 이미 존재하면 지정된 바이트를 대체하되 출력 파일의 나머지 부분만은 남겨둔다. 이 옵션을 사용하지 않으면 dd는 512바이트 길이의 출력 파일을 생성한다.

디스크 이미지 파일로서 특정 디스크 파티션을 다른 파티션에 복제하려면 다음과 같이 실행한다:
<syntaxhighlight lang="bash">
dd if=/dev/sdb2 of=partition.image bs=4096 conv=noerror
</syntaxhighlight>

=== 디스크 완전 소거 ===
{{본문|데이터 완전 소거}}
보안 목적으로 이따금은 버림 받은 장치의 [[데이터 완전 소거|디스크 완전 소거]]를 할 필요가 있다.

dd를 이용하여 디스크를 0으로 채워 소거하는 방법은 아래와 같다:
<syntaxhighlight lang="bash">
dd if=/dev/zero of=/dev/sda bs=4k
</syntaxhighlight>

다른 방법으로 랜덤 데이터를 채워 소거할 수도 있다:
<syntaxhighlight lang="bash">
dd if=/dev/urandom of=/dev/sda bs=4k
</syntaxhighlight>

=== 데이터 복구 ===
파일, 드라이브, 파티션의 [[데이터 복구]] 및 복원에 대한 [[오픈 소스 소프트웨어]]의 초기 역사에는 GNU dd가 포함되어 있으며, 저작권 고지는 1985년에 시작된다.<ref>
{{웹 인용
 |url        = http://git.savannah.gnu.org/gitweb/?p=coreutils.git;a=blob;f=src/dd.c;h=dd56068151dff39de4c3709357cc13ed15fd404f;hb=dd56068151dff39de4c3709357cc13ed15fd404f
 |제목        = Savannah Git Hosting{{snd}} coreutils.git/blob{{snd}} src/dd.c
 |accessdate        = January 21, 2015
 |website        = git.savannah.gnu.org
 |보존url        = https://web.archive.org/web/20170331001605/http://git.savannah.gnu.org/gitweb/?p=coreutils.git%3Ba%3Dblob%3Bf%3Dsrc%2Fdd.c%3Bh%3Ddd56068151dff39de4c3709357cc13ed15fd404f%3Bhb%3Ddd56068151dff39de4c3709357cc13ed15fd404f
 |보존날짜        = 2017-03-31
 |url-status        = dead
 }}
</ref> dd 프로세스 당 하나의 블록 크기를 가지며 특정한 형태의 dd를 실행 중인 사용자의 상호작용 세션까지만 한정하여 복구 알고리즘을 제공하였다. 그 뒤 dd_rescue<ref>{{웹 인용|url=http://www.garloff.de/kurt/linux/ddrescue/|제목=dd_rescue|work=garloff.de}}</ref>라는 C 프로그램이 1999년 10월에 작성되어 해당 알고리즘 안에 두 개의 블록 크기를 가질 수 있었다. 그러나 2003년 dd_rescue의 데이터 복구 알고리즘을 강화한 셸 스크립트 dd_rhelp의 저자는 2004년에 처음 출시된 dd와는 무관한 데이터 복구 프로그램인 GNU [[ddrescue]]<ref>{{웹 인용|url=http://www.gnu.org/software/ddrescue/ddrescue.html|제목=Ddrescue - GNU Project - Free Software Foundation (FSF)|work=gnu.org}}</ref><ref>{{웹 인용 |url=http://www.kalysto.org/utilities/dd_rhelp/index.en.html |제목= dd_rhelp author's repository |last1= |author= LAB Valentin|date=19 September 2011|quote=Important note : For some times, dd_rhelp was the only tool (AFAIK) that did this type of job, but since a few years, it is not true anymore: Antonio Diaz did write a ideal replacement for my tool: GNU 'ddrescue'.}}</ref>의 사용을 권장하였다.

더 새로운 GNU 프로그램을 더 오래된 스크립트와 구별하기 위해 GNU의 ddrescue와는 다른 이름이 쓰이기도 하는데 여기에는 addrescue (freecode.com, freshmeat.net에서의 이름), gddrescue ([[데비안]] 패키지 이름), gnu_ddrescue([[오픈수세]] 패키지 이름)가 포함된다. savehd7이라는 다른 오픈 소스 프로그램은 복잡한 알고리즘을 사용하지만 사용을 위해 자체 프로그래밍 언어 인터프리터의 설치가 필요하다.

=== 드라이브 성능 벤치마크 ===
드라이브 벤치마크를 테스트하고, 1024바이트 블록에 대한 순차 시스템 읽기/쓰기 성능을 분석하려면 다음과 같이 진행한다:
<syntaxhighlight lang="bash">
dd if=/dev/zero bs=1024 count=1000000 of=file_1GB
dd if=file_1GB of=/dev/null bs=1024
</syntaxhighlight>

=== 랜덤 데이터로 파일 생성 ===
커널 랜덤 드라이버를 이용하여 랜덤 데이터로 이루어진 100바이트의 파일을 채우려면 다음과 같이 진행한다:
<syntaxhighlight lang="bash">
dd if=/dev/urandom of=myrandom bs=100 count=1
</syntaxhighlight>

=== 파일을 대문자로 변환 ===
파일을 대문자로 변경하려면 다음과 같이 진행한다:
<syntaxhighlight lang="bash">
dd if=filename of=filename1 conv=ucase
</syntaxhighlight>

== 같이 보기 ==
* [[백업]]
* [[디스크 복제]]
* [[유닉스 명령어 목록]]

== 각주 ==
<references />

== 외부 링크 ==
* {{man|cu|dd|SUS|convert and copy a file}}
* {{언어링크|en}} [http://www.gnu.org/software/coreutils/manual/html_node/dd-invocation.html dd]: manual page from the [[GNU 코어 유틸리티|GNU Core Utilities]].
* {{언어링크|en}} [http://www.chrysocome.net/dd dd for Windows].

{{유닉스 명령어}}

[[분류:디스크 복제]]
[[분류:데이터 복구 소프트웨어]]
[[분류:하드 디스크 소프트웨어]]
[[분류:표준 유닉스 프로그램]]
[[분류:유닉스 SUS2008 유틸리티]]