![dd를 사용하여 파일의 정확한 부분을 추출하시겠습니까?](https://linux55.com/image/135473/dd%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%ED%8C%8C%EC%9D%BC%EC%9D%98%20%EC%A0%95%ED%99%95%ED%95%9C%20%EB%B6%80%EB%B6%84%EC%9D%84%20%EC%B6%94%EC%B6%9C%ED%95%98%EC%8B%9C%EA%B2%A0%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
588Ko 파일이 있고 0x7E8D6에서 0x8AD5D까지 바이트를 추출하고 싶습니다. 나는 시도했다:dd if=file of=result bs=50311 count=1 skip=518358
- 50311은 0x8AD5D - 0x7E8D6을 나타냅니다.
- 518358은 0x7E8D6을 나타냅니다(자르고 싶은 곳부터)
dd는 지정된 오프셋으로 이동할 수 없다고 알려줍니다. 어떡해? 이 작업을 수행할 수 있는 다른 유틸리티가 있습니까?
답변1
dd를 사용하여 파일의 정확한 부분을 추출하시겠습니까?
구문을 약간 조정해 보겠습니다.
bs=1
개별 블록이나 바이트에서 계산하거나 건너뛰기를 원하므로 블록 크기를 1로 설정합니다.
skip=518358
스트림 시작 부분에서 이 만큼의 블록 또는 바이트를 건너뜁니다.
count=50311
스트림에서 너무 많은 블록이나 바이트를 복사합니다.
dd if=/path/file of=/path/result bs=1 count=50311 skip=518358
답변2
skip
그리고 count
블록으로 표현됩니다. 518358 × 50311바이트를 건너뛰도록 요청했습니다.
dd
오류가 발견되는 것을 방지할 수 있습니다., 그러니 어쨌든 피하는 것이 가장 좋습니다.
head
대부분의 Unix 변형(BusyBox는 포함하지만 OpenSBD는 제외)의 경우 및 에 여러 바이트를 전달할 수 있습니다 tail
. tail
1부터 세기 시작하는 것을 기억하세요 .
<file tail -c "$((0x7E8D6 + 1))" | head -c "$((0x8AD5D - 0x7E8D6))" >result