dd
나는 그 주장에 대해 실험적으로 작업함으로써 그것을 사용하는 방법을 배우고 있습니다. 10바이트 파일을 만들고 싶습니다. 나는 다음이 효과가 있다고 생각합니다.
dd if=/dev/zero of=./foo count=1 bs=1 obs=9 seek=1
...맨 페이지에 다음과 같은 설명이 있기 때문입니다.
obs=BYTES write BYTES bytes at a time (default: 512) seek=N skip N obs-sized blocks at start of output
...하지만 그렇지는 않습니다. 2바이트 파일을 생성합니다.
>ls -l foo
-rw-rw-r-- 1 user user 2 Mar 28 16:05 foo
내 솔루션은 다음과 같습니다
dd if=/dev/zero of=./foo count=1 bs=1 obs=1 seek=9
하지만 내 연구에서는 첫 번째 버전이 작동하지 않는 이유를 이해하고 싶습니다. 감사해요.
답변1
과 간의 상호 작용이 잘 정의되지 않았기 dd if=/dev/zero of=./foo count=1 bs=1 obs=9 seek=1
때문에 명령은 10바이트 파일 대신 2바이트 파일을 생성 합니다 . (원하는 경우 이를 프로그램 오류라고 부를 수 있지만 문서 오류로 정의하는 것이 더 좋습니다.)bs
obs
누구나 bs
또는 ibs
그리고 obs
.
경험상 bs
덮어쓰면 obs
보시 dd if=/dev/zero of=./foo count=1 bs=1 seek=1
다시피 2바이트 파일이 생성되는 것 같습니다.
이를 사용하면 dd if=/dev/zero of=./foo count=1 ibs=1 obs=9 seek=1
예상되는 10바이트 파일을 얻게 됩니다.
대안으로, 디스크의 데이터 공간을 전혀 차지하지 않는 빈 파일을 생성하려면 직관적이지 않은 명명 truncate
명령을 사용할 수 있습니다.
truncate --size=10 foo
답변2
이것POSIX 맨페이지상태:
ibs=표현식
expr을 통해 입력 블록 크기를 바이트 단위로 지정합니다(기본값 512).
obs=표현
expr을 통해 출력 블록 크기를 바이트 단위로 지정합니다(기본값 512).
bs=표현식
둘 다 설정입력과 출력블록 크기를 expr 바이트로,ibs= 및 obs=를 대체합니다.. sync, noerror 및 notrunc 이외의 변환이 지정되지 않은 경우 각 입력 블록은 짧은 블록을 집계하지 않고 단일 블록으로 출력에 복사되어야 합니다.
리눅스도 dd
같은 방식으로 작동합니다. 대신 다음을 ibs
사용하십시오.
dd if=/dev/zero of=./foo count=1 ibs=1 obs=9 seek=1