리눅스에서 특정 Hex 패턴으로 큰 파일만들기 조언을 구합니다.

heshd의 이미지

안녕하세요,

리눅스에서 특정 4바이트 Hex 값으로 다양한 크기의 파일(4K 부터 수십MB) 을 만드려고 합니다.

예를들면 1MB 의 파일을 모두

0x12345678 0x12345678 0x12345678 ... 총 (1MB) 이런식으로 만드려고 합니다.

처음 아이디어는 dd 를 이용하여 zero data 를 만든 후 이 zero data 를 원하는 4byte 크기의 패턴으로 변환하려고 하는데 패턴이 4바이트가 아닌 1바이트 변환밖에 되지를 않네요 ㅜ. 조언부탁드립니다.

예를 들면 dd 로 10KB 의 zero pattern 의 파일을 얻은 후 zero pattern 을 4byte Hex pattern 으로 변환

#] dd if=/dev/zero ibs=1k count=10 | tr "\000" $'\x12345678' > paddedFile.bin

하지만 이를 xxd 로 읽어보면 아래와 같이 1byte 만 변환되네요..

0000000: 1212 1212 1212 1212 1212 1212 1212 1212 ................
0000010: 1212 1212 1212 1212 1212 1212 1212 1212 ................
0000020: 1212 1212 1212 1212 1212 1212 1212 1212 ................
0000030: 1212 1212 1212 1212 1212 1212 1212 1212 ................
0000040: 1212 1212 1212 1212 1212 1212 1212 1212 ................

혹시 이를 아래 처럼 만들 수 있을까요? 조언 부탁드립니다.

0000000: 1234 5678 1234 5678 1234 5678 1234 5678
0000010: 1234 5678 1234 5678 1234 5678 1234 5678
0000020: 1234 5678 1234 5678 1234 5678 1234 5678
....

ymir의 이미지

$ echo 12345678 | xxd -r -p > in_2
$ for i in $(seq 3 20); do cat in_$((i - 1)) in_$((i - 1)) > in_$i; done
$ ls -al in_20
-rw-rw-r-- 1 ymir ymir 1048576  44 08:50 in_20

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

ymir의 이미지

위의 것을 이용해서 원하는 크기의 파일 만들기..

$ BSIZE=$(echo 'obase=2; 1200000' | bc)
$ FLIST=
$ for i in $(seq 1 $((${#BSIZE} - 2))); do [ ${BSIZE:$((i-1)):1} = "1" ] && FLIST+=" in_$((${#BSIZE} - $i))"; done
$ eval cat $FLIST > out_1200000
$ dir out_1200000
-rw-rw-r-- 1 ymir ymir 1200000  44 14:22 out_1200000

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

ymir의 이미지

파일 크기가 4 로 나눠떨어지지 않는 경우(하위 2 비트가 0 이 아닌)..
짜투리 추가..

$ touch in_b0
$ echo 12 | xxd -r -p > in_b1
$ echo 1234 | xxd -r -p > in_b2
$ echo 123456 | xxd -r -p > in_b3
$ dir in_b?
-rw-rw-r--  1 ymir ymir       0  44 14:01 in_b0
-rw-rw-r--  1 ymir ymir       1  44 14:01 in_b1
-rw-rw-r--  1 ymir ymir       2  44 14:01 in_b2
-rw-rw-r--  1 ymir ymir       3  44 14:01 in_b3
$ BLEFT=${BSIZE:$((${#BSIZE} - 2)):2}
$ cat in_b$(echo "ibase=2; obase=10; $BLEFT" | bc) >> out_120000x

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

Anti-Lock의 이미지

$ BSIZE=64
$ yes 12345678 | xxd -r -p | head -c $BSIZE > x
$ xxd x
00000000: 1234 5678 1234 5678 1234 5678 1234 5678  .4Vx.4Vx.4Vx.4Vx
00000010: 1234 5678 1234 5678 1234 5678 1234 5678  .4Vx.4Vx.4Vx.4Vx
00000020: 1234 5678 1234 5678 1234 5678 1234 5678  .4Vx.4Vx.4Vx.4Vx
00000030: 1234 5678 1234 5678 1234 5678 1234 5678  .4Vx.4Vx.4Vx.4Vx
indentation의 이미지

ㄷㄷㄷㅁㄹ

bushi의 이미지

[schoi0@SEL-SCHOI0-D2 net]$ val=$(echo -en "\x12\x34\x56\x78")
[schoi0@SEL-SCHOI0-D2 net]$ i=0
[schoi0@SEL-SCHOI0-D2 net]$ while [ $i -lt 20 ]; do echo -en ${val:$i%${#val}:1}; let i=i+1; done > x
 
[schoi0@SEL-SCHOI0-D2 net]$ ls -l x
-rw-rw-r--. 1 schoi0 schoi0 20  4월  4 11:15 x
 
[schoi0@SEL-SCHOI0-D2 net]$ hexdump -C x
00000000  12 34 56 78 12 34 56 78  12 34 56 78 12 34 56 78  |.4Vx.4Vx.4Vx.4Vx|
00000010  12 34 56 78                                       |.4Vx|
00000014
ymir의 이미지

${val:$i%${#val}:1} 에서 pos 부분이 조금 이상한 것 같아서 한참 봤는데..
$((..)) 를 쓰지 않아도 계산이 되는거였군요. 간편해서 좋네요.

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

bushi의 이미지

무심코 썼다가 되는 걸 보고 좀 놀랐습니다.
코드를 그대로 쓰기엔 문제가 좀 있어요.

[schoi0@SEL-SCHOI0-D2 wrs3]$ val=$(echo -en "\x0a")
[schoi0@SEL-SCHOI0-D2 wrs3]$ echo ${#val}
0

bushi의 이미지

버그 수정

[schoi0@SEL-SCHOI0-D2 net]$ val=("\x0a" "B" "\x12" "\x34")
[schoi0@SEL-SCHOI0-D2 net]$ i=0; while [ $i -lt 22 ]; do echo -en ${val[$i%${#val[@]}]}; let i=i+1; done > x
 
[schoi0@SEL-SCHOI0-D2 net]$ ls -l x
-rw-rw-r--. 1 schoi0 schoi0 22  4월  4 14:45 x
 
[schoi0@SEL-SCHOI0-D2 net]$ hexdump -C x
00000000  0a 42 12 34 0a 42 12 34  0a 42 12 34 0a 42 12 34  |.B.4.B.4.B.4.B.4|
00000010  0a 42 12 34 0a 42                                 |.B.4.B|
00000016

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.