【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください

Linux で
Windows の Disk probe のように
ドライブ(パーティション)の中身のデータを
16進数で表示するソフトってありますか?
odはファイルが対象でないとうまくいかないようでして。

どうぞよろしくお願いいたします。

A 回答 (6件)

No1です。



od や hexdump は、同じ表示が続き時に、* でそれらを置き換えます。「中略」ということですね。
* の直前の行が繰り返されていると思ってください。どれだけ繰り返しかは、その次の行頭のアドレスでわかります。

/dev/zeroで埋めても df の表示が変わらないのは、メモリ上のマウントテーブルにそのまま情報が残っているからです。syncしても関係無いと思いますよ。いちどアンマウントすると、再びさしこんでももうマウントできない(パーティション情報が消されている)ので、表示されません。

デバイスに直接書き込むのは、普通は、アンマウントしてからだと思います。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
理解できる所まで理解して
分からない所を質問させていただこうかなと思っていましたため、
お礼を付けるのが少し遅れてしまい、申し訳ありません。

http://x68000.q-e-d.net/~68user/unix/pickup?od
をじっくり読んでいたのですが、
http://okwave.jp/qa/q8406776.html
で書いています消去してしまったMBRを od,hexdump でダンプしたものは単純なので理解できました。

dizzy@Minty ~ $ od MBR-破壊後.bu
0000000 000000 000000 000000 000000 000000 000000 000000 000000
*
0000700 000001 177356 177777 000001 000000 101257 045205 000000
0000720 000000 000000 000000 000000 000000 000000 000000 000000
*
0000760 000000 000000 000000 000000 000000 000000 000000 125125
0001000
dizzy@Minty ~ $ hexdump MBR-破壊後.bu
0000000 0000 0000 0000 0000 0000 0000 0000 0000
*
00001c0 0001 feee ffff 0001 0000 82af 4a85 0000
00001d0 0000 0000 0000 0000 0000 0000 0000 0000
*
00001f0 0000 0000 0000 0000 0000 0000 0000 aa55
0000200
dizzy@Minty ~ $

しかし、次の例がよくわかりません。

dizzy@Minty ‾ $ echo abcdef | od
0000000 061141 062143 063145 000012
0000007
dizzy@Minty ‾ $

2バイトを6桁で表示しているようですが、
とりあえず ab の部分だけ見ると
8進数で
a:141,b:142
なのを素直に並べたわけでもないようですし、

10進数で
a:97,b:98
なので、
ab: 97*256 + 98 = 48*512 + 256 + 64 + 32 + 2
= 6*4096 + 5*64 + 4*8 + 2
より、8進数で表示すると、
ab:6542
となる、というような変換をしたわけでもない。

どういう風な変換法則になっているのか、
どなたでもいいので教えていただけますか?

お礼日時:2014/01/04 00:26

No1, No5です。



>dizzy@Minty ‾ $ echo abcdef | od
>0000000 061141 062143 063145 000012

について。
"abcdef" を2バイトずつ区切って、"ab"。下位アドレスの"a"=97(10進)を下位バイト、上位アドレスにある"b"=98(10進)を上位バイトとみて(リトルエンディアン)、97+98*256=25185= 6*4096+1*512+1*64+4*8+1=61141(8進)

> = 6*4096 + 5*64 + 4*8 + 2
>より、8進数で表示すると、
>ab:6542
は、上下バイトが逆の上に、6*4096 + 5*64 + 4*8 + 2 を8進数に直すと、60542なので二重に間違っています。

リトルエンディアンなのは、Unixが開発されたコンピューターがリトルエンディアンだったから。
https://ja.wikipedia.org/wiki/%E3%83%AA%E3%83%88 …
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

ここのサイトで質問しますと
コンピューターに関してプロと思われる方達から
色々と教えていただくことができるので、
本当に勉強になります。

今回もおかげさまで
od,hexdump をある程度理解できましたし、
エンディアンについても知識をつけることができました。
エンディアンという言葉はガリヴァー旅行記から来ているのですか。
http://ja.wikipedia.org/wiki/%E3%82%A8%E3%83%B3% …
(ここを読んでいる一般の方のためのreference)

MBRは512バイトしかないので、
もうちょっと頑張れば私でも
MBRを od して
何が書き込まれているかを理解できるようになるかもしれませんね。

お礼日時:2014/01/05 01:25

Linuxでは、ヘキサダンプが良いかと思います。


使い方は、
man hexdump
で調査されたし。

一般には、
hexdump -C ファイル名
hexdump -C ファイル名 > printimg
printimgをエディタ等で表示します。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
hexdump の方が右にテキストファイルの文字も表示されるので
(日本語は・・・になりますが)
od より使いやすそうですね。

お礼日時:2013/12/31 12:05

>2GB の USB なのに


>
>0000000 000000 000000 000000 000000 000000 000000 000000 000000
>*
>16740000000
>
>とだけ書いてあります。
>一般のファイルを od で変換した場合は
>ちゃんと数字の列が長々と表示されます。

odの-vオプションの意味について調べて下さい。
2004877312バイト分の出力なので、最後が16740000000になっているのでしょう。
ちなみに、8進数表記になっているのでお間違えのないように。
16進数で表記したいなら-tオプションについて確認を。

>USB全体を消したのにパーティションが見えていた最初の方が変なのですが。

カーネルのキャッシュに残っていたんでしょう。
syncコマンドで適用すれば消えたんじゃないですかね。
あるいは読み書きした時点でエラーになったかもしれません。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

最初読んだ時
2004877312
という数字はどこから出てきたのだろうと思いましたが、
8進数の
16740000000
を10進数に変換すると
2004877312
になる、というわけなのですね。
http://www.peko-step.com/tool/nsin.html
(ここを読んでいる一般の方のためのreference)

sync というコマンドにつきましてはイマイチよく分からないです。
http://tewasura.com/?USB_Install
などと書いてありますが、
私は
cat debian-6.0.6-amd64-netinst.iso > /dev/sdb
の段階でずっと書き込まれていて
sync
のコマンドを実行しても一瞬で終わりましたし。

お礼日時:2013/12/31 12:07

普通に可能ですねぇ…。



>odはファイルが対象でないとうまくいかないようでして。

デバイス「ファイル」について調べてみるといいかと思います。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
回答No.1 の方の欄に詳細を書きこんでおります。

お礼日時:2013/12/30 16:26

>odはファイルが対象でないとうまくいかないようでして。



普通に出来ますけど(rootユーザじゃ無いとだめですよ)。
どんなコマンドを打って、どんなエラーになりましたか? df の結果も書いてください。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

今回の質問は
http://okwave.jp/qa/q8404421.html
の途中の操作
$ sudo dd if=/dev/zero of=/dev/sdc bs=128M count=17
のコマンドできちんとUSB全体が消去できているかと確かめようと思ってしたことなのですが、

dizzy@PC03 ~ $ sudo dd if=/dev/zero of=/dev/sdc bs=128M count=17
[sudo] password for dizzy:
dd: `/dev/sdc' を書き込んでいます: デバイスに空き領域がありません
15+0 レコード入力
14+0 レコード出力
2004877312 バイト (2.0 GB) コピーされました、 256.46 秒、 7.8 MB/秒

をした後、

dizzy@PC03 ~ $ sudo od /dev/sdc > od-result.txt
dizzy@PC03 ~ $

とうまくいったようでして、
(申し訳ありませんが、さっきなぜ失敗したのかはよく分かりません)
od-result.txt の中身を見てみますと、
2GB の USB なのに

0000000 000000 000000 000000 000000 000000 000000 000000 000000
*
16740000000

とだけ書いてあります。
一般のファイルを od で変換した場合は
ちゃんと数字の列が長々と表示されます。
この場合は全体が空なので MBR だけ表示される、ということでしょうか?
しかし上記のデータは512バイトもないと思うのですが・・・
ゼロで埋めたはずなのに「1674」とか書いてあるのも妙ですし。

念のために df の結果を載せておきます。
sudo dd if=/dev/zero of=/dev/sdc bs=128M count=17
sudo od /dev/sdc > od-result.txt
をした直後は

dizzy@PC03 ~ $ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda10 20G 11G 7.8G 58% /
udev 1.9G 4.0K 1.9G 1% /dev
tmpfs 773M 1.1M 772M 1% /run
none 5.0M 0 5.0M 0% /run/lock
none 1.9G 312K 1.9G 1% /run/shm
/dev/sda6 90G 12G 79G 13% /media/DATAFAT32_
/dev/sda9 20G 6.2G 13G 33% /media/Debian
/dev/sda8 9.9G 6.8G 2.6G 73% /media/Ubuntu
/dev/sda2 15G 7.3G 7.5G 50% /media/Recovery
/dev/sdc6 600M 17M 553M 3% /media/live-rw
/dev/sdc5 1.3G 34M 1.2G 3% /media/debian-live

だったのが、USBを抜き差ししてからだと

dizzy@PC03 ~ $ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda10 20G 11G 7.8G 58% /
udev 1.9G 4.0K 1.9G 1% /dev
tmpfs 773M 1.1M 772M 1% /run
none 5.0M 0 5.0M 0% /run/lock
none 1.9G 312K 1.9G 1% /run/shm
/dev/sda6 90G 12G 79G 13% /media/DATAFAT32_
/dev/sda9 20G 6.2G 13G 33% /media/Debian
/dev/sda8 9.9G 6.8G 2.6G 73% /media/Ubuntu
/dev/sda2 15G 7.3G 7.5G 50% /media/Recovery

というように
/dev/sdc6,/dev/sdc5 が消えています。
というか、
USB全体を消したのにパーティションが見えていた最初の方が変なのですが。

お礼日時:2013/12/30 16:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報