
dd 유틸리티를 사용하여 출력 파일의 특정 영역을 입력 파일로 다시 쓰고 싶습니다. 출력 파일의 첫 번째 732618바이트를 건너뛰고 거기에서 708800바이트 쓰기를 시작해야 합니다. 입력 바이트를 건너뛰는 방법만 찾았습니다. 파일을 찾았지만 출력 파일에서 정보를 찾을 수 없습니다. 건너뛰는 방법, dd를 사용하여 수행할 수 있습니까?
답변1
매뉴얼 페이지에는 다음과 같이 나와 있습니다.
seek=N
N
obs
출력 시작 시 크기 청크 건너뛰기
conv=notrunc
출력을 자르지 않으려는 경우도 있습니다 .
$ echo abcdefghijkl > foo.txt
$ echo -n XYZ | dd bs=1 seek=3 of=foo.txt conv=notrunc
3+0 records in [...]
$ cat foo.txt
abcXYZghijkl
참고로 bs=1
위와 같이 사용하면 읽거나 쓰는 바이트마다 시스템 콜을 발행하게 되므로 write()
속도가 느려지게 됩니다. obs
하지만 (내가 아는 한) dd
부분 쓰기를 다시 시도하지 않기 때문에 전체 732618로 설정하지 않을 것 입니다.
GNU dd를 사용하면 oflag=seek_bytes
조회 오프셋을 바이트로 추가하고 지정할 수 있어 보다 합리적인 블록 크기를 허용합니다.
또는 Perl을 사용하여 찾으십시오.
$ echo abcdefghijkl > foo.txt
$ echo -n XYZ | ( perl -e 'sysseek STDOUT, 3, 0;'; cat ) 1<> foo.txt
$ cat foo.txt
abcXYZghijkl