![dd 유틸리티를 사용하여 출력 파일에서 필요한 바이트 수를 건너뛰려면 어떻게 해야 합니까?](https://linux55.com/image/184768/dd%20%EC%9C%A0%ED%8B%B8%EB%A6%AC%ED%8B%B0%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%B6%9C%EB%A0%A5%20%ED%8C%8C%EC%9D%BC%EC%97%90%EC%84%9C%20%ED%95%84%EC%9A%94%ED%95%9C%20%EB%B0%94%EC%9D%B4%ED%8A%B8%20%EC%88%98%EB%A5%BC%20%EA%B1%B4%EB%84%88%EB%9B%B0%EB%A0%A4%EB%A9%B4%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%ED%95%B4%EC%95%BC%20%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
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