dd를 사용하여“FF”로 파일을 채우는 방법은 무엇입니까? dd? 이 명령은 파일 크기가 100KB에 도달 할

0xFF사용하여 파일을 채우는 방법 dd?

이 명령은 파일 크기가 100KB에 도달 할 때까지 출력 파일을 0으로 채 웁니다.

dd if=inputFile.bin ibs=1k count=100 of=paddedFile.bin conv=sync

그러나 0xFFs 대신 s 로 파일을 채우고 싶습니다 0x00.



답변

내가 아는 dd한로 패드를 사용하여 말할 수있는 방법이 없습니다 0xFF. 그러나 해결 방법이 있습니다.

먼저 필요한 길이로 파일을 작성하십시오 0xFF.

$ dd if=/dev/zero ibs=1k count=100 | tr "\000" "\377" >paddedFile.bin
100+0 records in
200+0 records out
102400 bytes (102 kB) copied, 0,0114595 s, 8,9 MB/s

tr0을로 대체하는 데 사용됩니다 0xFF. tr8 진의 인수를 기대합니다. 0xFF8 진수는 \377입니다.

결과:

$ hexdump -C paddedFile.bin
00000000  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
*
00019000

그런 다음 “패딩 된”파일의 시작 부분에 입력 파일을 삽입하십시오.

$ dd if=inputFile.bin of=paddedFile.bin conv=notrunc
0+1 records in
0+1 records out
8 bytes (8 B) copied, 7,4311e-05 s, 108 kB/s

노트 conv=notrunc알려줍니다 dd출력 파일을 절단하지 않도록합니다.

입력 파일 예 :

$ hexdump -C inputFile.bin
00000000  66 6f 6f 0a 62 61 72 0a                           |foo.bar.|
00000008

결과:

$ hexdump -C paddedFile.bin
00000000  66 6f 6f 0a 62 61 72 0a  ff ff ff ff ff ff ff ff  |foo.bar.........|
00000010  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
*
00019000


답변

lesmana의 대답에서 가능한 개선은 파일을 제자리에서 조작하는 것입니다. 큰 입력 파일의 경우 훨씬 빠를 수 있으며 스파 스 파일은 드물게 유지됩니다. 그러나 많은 상황에서 입력 파일을 수정하고 싶지 않으므로이 방법이 적합하지 않습니다.

다음 예제는 큰 희소 입력 파일로 시작하여 FF 문자로 최대 1GB 크기로 채 웁니다. newsize원하는 값으로 변경 하십시오. 보다시피, dd이 파일이 매우 크더라도이 부분은 1 분의 1 초 밖에 걸리지 않습니다.

$ ls -ld inputFile.bin
-rw-rw-r-- 1   …   1073741700   …   inputFile.bin
$ hexdump inputFile.bin
0000000 0000 0000 0000 0000 0000 0000 0000 0000
*
3fffff80 0000 0000
3fffff84

$ newsize=$((1024 * 1024 * 1024))
$ filesize=$(stat -c "%s" inputFile.bin)
$ padcount=$((newsize - filesize))
$ dd if=/dev/zero ibs=1 count="$padcount" | tr "\000" "\377" >> inputFile.bin
124+0 records in
0+1 records out
124 bytes (124 B) copied, 0.000162309 s, 764 kB/s

$ ls -ld inputFile.bin
-rw-rw-r-- 1   …   1073741824   …   inputFile.bin
$ hexdump inputFile.bin
0000000 0000 0000 0000 0000 0000 0000 0000 0000
*
3fffff80 0000 0000 ffff ffff ffff ffff ffff ffff
3fffff90 ffff ffff ffff ffff ffff ffff ffff ffff
*
40000000


답변