개발 창고/Server

[Linux] How to use "dd" command

로이제로 2023. 10. 28. 22:00
반응형

 

How to use "dd" command

 파일을 변환하고 복사합니다.

dd --help 결과

 

연산자 내용
bs=BYTES 한 번에 최대 BYTES bytes까지 읽고 씁니다.
cbs=BYTES 한 번에 BYTES bytes를 변환합니다.
conv=CONV 쉼표(,)로 구분된 기호 목록에 따라 파일을 변환합니다.
count=N N개의 입력된 블록만 복사합니다.
ibs=BYTES 한 번에 최대 BYTES bytes까지 읽습니다. (기본값 512)
if=FILE stdin 대신 파일을 읽습니다.
iflag=FLAGS 쉼표(,)로 구분된 기호 목록에 따라 읽습니다.
obs=BYTES 한 번에 최대 BYTES bytes까지 씁니다. (기본값 512)
of=FILE stdout 대신 파일을 씁니다.
oflag=FLAGS 쉼표(,)로 구분된 기호 목록에 따라 씁니다.
seek=N N 만큼 obs block 크기를 건너뛰고 출력을 시작합니다.
skip=N N 만큼 ibs block 크기를 건너뛰고 입력을 시작합니다.
status=LEVEL stderr에 출력 될 정보의 레벨을 지정합니다.
'none' : 오류 메시지를 제외한 모든 것을 제한합니다.
'noxfer' : 최종 전송 통계를 제한합니다.
'progress' : 주기적으로 전송 통계를 보여줍니다.

 

CONV 내용
ascii EBCDIC코드를 ASCII 코드로 변환합니다.
ebcdic ASCII코드를 EBCDIC코드로 변환합니다.
ibm EBCDIC코드를 ASCII코드로, ASCII코드를 EBCDIC코드로 변환합니다.
block cbs단위로 변환할 때 줄 바꿈 문자를 공백으로 변환합니다.
unblock cbs단위로 변환할 때 공백 문자를 줄 바꿈 문자로 변환합니다.
lcase 대문자를 소문자로 변환합니다.
ucase 소문자를 대문자로 변환합니다.
sparse try to seek rather than write the output for NUL input blocks
swab 입력되는 두 byte 순서를 변경합니다.
sync ibs 크기와 cbs 크기가 차이가 있는 경우 NULL 문자로 대체합니다.
excl 출력 파일이 이미 존재하면 수행하지 않습니다.
nocreate 출력 파일이 존재해야 수행합니다.
notrunc 출력 파일 끝을 잘라내지 않습니다.
noerror 읽기 에러가 발생해도 계속 진행합니다.
fdatasync 작업이 완료되기 전에 물리적으로 출력 파일에 쓰기를 진행합니다.
fsync fdatasync와 마찬가지로 메타데이터를 작성합니다.

 

FLAG 내용
append append mode (출력에만 적합; conv=notrunc 에 추천)
direct 데이터에 직접 입출력하는데 사용
directory 디렉토리가 없으면 실패합니다.
dsync 데이터에 동기화된 입출력을 사용합니다.
sync dsync와 마찬가지이며 메타데이터도 포함합니다.
fullblock 입력 전체 블록을 누적합니다. (iflag에서만 사용)
nonblock non-blocking 입출력에 사용합니다.
noatime atime (access time)을 갱신하지 않습니다.
nocache 캐시 데이터를 버립니다.
noctty 제어 터미널을 파일에 할당하지 않습니다.
nofollow 심볼릭 링크를 따라가지 않습니다.
count_bytes 'count=N'을 byte count로 처리합니다. (iflag에서만 사용)
skip_bytes 'skip=N'을 byte count로 처리합니다. (iflag에서만 사용)
seek_bytes 'seek=N'을 byte count로 처리합니다. (oflag에서만 사용)

 

사용 예시

▶ /var/log/dmesg 파일을 /tmp/test/test로 최대 1024byte로 읽기와 쓰기를 10개 블록으로 나눠 진행합니다.

# dmesg 파일 용량 확인
$> ls -lh /var/log/dmesg

# 폴더 생성
$> mkdir /tmp/test

# /var/log/dmesg파일을 /tmp/test/test로 블록 복사
$>dd if=/var/log/dmesg of=/tmp/test/test bs=1024 count=10

# /tmp/test/test 파일 용량 확인
$> ls -lh /tmp/test/test

dmesg파일을 1kb 10block로 나눠 보냈으므로 총 10kb block 복사

 

▶ /var/log/dmesg에서 블록 복사 된 /tmp/test/test의 파일의 내용을 대문자로 변환하여 덮어 씌우기

# 기존 /temp/test/test 내용 중 첫 3줄 확인
$> head -3 /tmp/test/test

# /var/log/dmesg파일을 /tmp/test/test로 블록 복사 (소문자를 대문자로 변환하여 복사)
$> dd if=/var/log/dmesg of=/tmp/test/test bs=1024 count=10 conv=ucase

# 치환 된 /temp/test/test 내용 중 첫 3줄 확인
$> head -3 /tmp/test/test

기존 dmesg에서 복사 된 내용을 대문자로 변환여 복된 결과

 

반응형