로부터 사양 :
- 경우]
bs=
expr
오퍼랜드를 지정하고 이하 다른 전환되고 sync
, noerror
또는 notrunc
요구되는, 각 입력 블록으로부터 반환 된 데이터는 별도의 출력 블록으로 기록된다; 경우 생성 read()
복귀 전체 블록보다 상기 sync
변환을 지정하지 않으면, 결과 출력 블록을 상기 입력 블록과 같은 크기로한다.
그래서 이것은 아마도 혼란을 야기 할 것입니다. 예, 때문에이 dd
되어 설계 기본적으로 부분 차단 read()
부분에 1 : S 1 매핑됩니다 write()
의, 또는 다른 사람 sync
에 꼬리 패딩 NUL 또는 공간 문자에 나가 거라고 bs=
때 크기가 conv=sync
지정됩니다.
이것이 뜻 dd
이다 (손상의 위험없이 / w 인해 부분 판독 또는 기록하기 위해) 데이터를 복사하는 데 사용할 금고 가 임의로 의해 한정되는 모든 경우이지만 하나 count=
, 인수로 인해 그렇지 dd
것 게 write()
동일 크기의 블록에 출력 입력이 완전히 read()
끝날 때까지 read()
심지어이주의해야 할 점은 있습니다 만 사실 때 bs=
지정 또는 obs=
되어 있지 사양 상태에서 바로 다음 문장으로 지정 :
- 경우]
bs=
expr
오퍼랜드를 지정하거나, 다른보다 전환되지 않고 sync
, noerror
또는 notrunc
요구되는 입력을 처리하여야하며, 최대 크기의 출력 블록으로 수집 입력의 끝에 도달 할 때까지.
없이 ibs=
및 / 또는 obs=
인수이 문제가되지 수 - 때문에 ibs
와 obs
기본적으로 같은 크기의 상표입니다. 그러나 우선 순위를 지정 하므로 지정 하지 않고 다른 크기 를 지정하여 입력 버퍼링에 대해 명시 적으로 얻을 수 있습니다 .bs=
예를 들어, 다음과 같은 경우 :
IN| dd ibs=1| OUT
... 그런 다음 POSIX dd
는 모든 단일 바이트를 단일 출력 블록 으로 수집write()
하여 512 바이트 단위로 청크 합니다.read()
그렇지 않으면, 당신이 할 경우 ...
IN| dd obs=1kx1k| OUT
... POSIX dd
는 한 read()
번에 최대 512 바이트이지만 입력을 전체 크기의 출력 블록 으로 수집하여 write()
모든 메가 바이트 크기의 출력 블록 (최종 EOF이므로 허용하고 제외하는 커널) 을 모두 사용합니다 .
또한 사양에서 :
count=
에 매핑 i?bs=
블록 등 임의의 한계를 처리하기 위해 count=
이식 당신이 개 필요합니다 dd
들. 두 개의 dd
s 로 수행하는 가장 실용적인 방법 은 하나의 출력을 다른 입력으로 파이핑하는 것이므로 원래 입력 유형에 관계없이 특수 파일 을 읽거나 쓰는 영역을 확실히 확보 할 수 있습니다.
IPC 파이프는 [io]bs=
인수를 지정할 때 안전하게 지정 하기 위해 이러한 값을 시스템의 정의 된 PIPE_BUF
한계 내에 유지해야 함을 의미합니다 . POSIX는 시스템 커널 이 에 정의 된 한계 내 에서만 원자 read()
와 원자를 보장해야한다고 명시하고 있습니다. POSIX는이 보장 될 적어도 ...write()
PIPE_BUF
limits.h
PIPE_BUF
{_POSIX_PIPE_BUF}
- 파이프에 쓸 때 원 자성으로 보장되는 최대 바이트 수입니다.
- 값 : 512
... (기본 dd
I / O 블록 크기 이기도 함 ) 이지만 실제 값은 일반적으로 4k 이상입니다. 최신 Linux 시스템에서는 기본적으로 64k입니다.
따라서 dd
프로세스 를 설정할 때 세 가지 값을 기준으로 블록 팩터 에서 프로세스를 수행해야 합니다.
- bs = (obs =
PIPE_BUF
이하)
- n = 읽은 총 바이트 수
- 카운트 = n / bs
처럼:
yes | dd obs=1k | dd bs=1k count=10k of=/dev/null
10240+0 records in
10240+0 records out
10485760 bytes (10 MB) copied, 0.1143 s, 91.7 MB/s
검색 할 수없는 dd
입력을 처리하려면 i / ow /를 동기화해야합니다 . 즉, 파이프 버퍼를 명시 적으로 작성하면 문제가되지 않습니다. 그게 다야 dd
. 여기에서 알 수없는 양은 yes
버퍼 크기입니다.하지만 다른 것으로 알려진 양으로 차단 dd
하면 약간의 정보를 곱하면 dd
데이터를 복사하는 데 안전하게 사용할 수 있습니다 (부분 읽기 또는 쓰기로 인한 손상 위험 없음)count=
POSIX 시스템에서 임의의 입력 유형으로 임의의 입력 유형을 임의로 제한 하고 단일 바이트가 누락되지 않은 경우에도 마찬가지 입니다.
다음은 POSIX 사양 의 스 니펫입니다 .
ibs=
expr
- 입력 블록 크기를 바이트 단위로 지정하십시오 (기본값은 512) .
expr
obs=
expr
- 출력 블록 크기를 바이트 단위로 지정하십시오 (기본값은 512) .
expr
bs=
expr
- 입력 및 출력 블록 크기를 모두
expr
바이트, 대체 ibs=
및로 설정하십시오 obs=
. 이하 전환 다른 경우 sync
, noerror
및 notrunc
지정된 각 입력 블록 짧은 블록 응집하지 않고 단일 블록으로 출력으로 복사한다.
또한 여기에 더 잘 설명되어 있습니다 .