바이너리 파일에 특정 수의 0을 자동으로 쓰는 방법은 무엇입니까?
나는 쓴다:
#!/bin/bash
for i in {0..127};
do
echo -e -n "\x00" >> file.bin
done
그러나 Bless 출력 보기 파일을 사용 2D 65 20 2D 6E 20 5C 78 30 30 0A
하면 -e -n \x00
.
답변1
printf
휴대성이 있어야 한다그리고 8진수 문자 이스케이프를 지원합니다.
i=0
while [ "$i" -le 127 ]; do
printf '\000'
i=$((i+1))
done >> file.bin
( printf
그런 식으로 16진수 이스케이프를 지원할 필요는 없지만 \x00
많은 쉘에서는 지원합니다.)
바라보다왜 printf가 echo보다 나은가요?문제가 발생했습니다 echo
.
답변2
파일이 0이면 분명한 것은 다음과 같습니다.
dd if=/dev/zero of=file.bin bs=1 count=128
이는 단일 바이트 쓰기를 수행하기 때문에 실제로는 매우 비효율적입니다. 다음을 쉽게 사용할 수 있습니다.
dd if=/dev/zero of=file.bin bs=128 count=1
여기서 bs' is the 'block size' and
count`는 블록이 몇 개 있는지를 나타냅니다. 여러 개의 작은 덩어리보다 한 덩어리로 쓰는 것이 더 좋습니다!
위의 명령은 다음과 같습니다.아니요에 첨부하면 file.bin
덮어쓰게 됩니다. 한 가지 방법은 다음과 같습니다.
dd if=/dev/zero bs=128 count=1 >> file.bin
설명: 그렇지 않은 경우 표준 출력에 쓴 of=
다음 dd
출력 파일에 추가합니다.
답변3
printf
모든 매개변수에 동일한 형식이 재사용됩니다.- 이 형식은
%.0s
인수의 일부를 인쇄하지 않습니다.
이것들을 결합하면 꽤 좋은 결과를 얻을 수 있습니다
$ printf '\0%.0s' {1..128} >128nulls
128개의 null 값.