今日も元気にテクニカル

技術情報書きたいけど本ブログに書きたくないからこんな名前になりました。

ls -al /devで表示されるbrw-rw---- crw-rw----について

/dev内でls- alを実行すると謎の属性が表示された。以下適当に抜粋。

$ ls -al /dev
合計 8
crw-rw----  1 root root    14,  10 11月  4 01:45 dmfm
crw-rw----  1 root root    14,   9 11月  4 01:45 dmmidi
crw-------  1 root root    14,   3 11月  4 01:45 dsp
brw-rw----  1 root floppy   2,   0 11月  4 01:45 fd0
brw-rw----  1 root floppy   2,  84 11月  4 01:45 fd0u1040
brw-rw----  1 root floppy   2,  88 11月  4 01:45 fd0u1120
srwxrwxrwx  1 root root          0 11月  4 01:46 gpmctl
brw-r-----  1 root disk     3,   0 11月  4 10:45 hda
brw-r-----  1 root disk     3,   1 11月  4 01:45 hda1
brw-r-----  1 root disk     3,   2 11月  4 10:45 hda2
brw-r-----  1 root disk     3,   3 11月  4 10:45 hda3
crw-------  1 root root    10, 228 11月  4 01:45 hpet
prw-------  1 root root          0 11月  4 01:45 initctl
drwxr-xr-x  2 root root        160 11月  4 01:45 input
crw-------  1 root root     1,  11 11月  4 01:45 kmsg
srw-rw-rw-  1 root root          0 11月  4 01:45 log
brw-r-----  1 root disk     7,   0 11月  4 01:45 loop0
brw-r-----  1 root disk     1,   2 11月  4 10:45 ram2
brw-r-----  1 root disk     1,   3 11月  4 10:45 ram3
brw-r-----  1 root disk     1,   4 11月  4 10:45 ram4
crw-rw----  1 root tty      4,  37 11月  4 01:45 tty37
crw-rw----  1 root tty      4,  38 11月  4 01:45 tty38

こりゃなんじゃってことで調べると、どうやらスペシャル・ファイルと呼ばれるものらしい。

デバイスファイル - Wikipedia

スペシャル・ファイルとは、デバイスノードとも呼ばれ、主にHDDやメモリやプリンタやUSBメモリが扱われる。Windowsではマウントが完了したオブジェクトはマイコンピュータに表示されるのに対して、Linuxではls -al で普通のファイルと一緒に見えてしまうので(慣れるまでは)分かりづらいけど、他のファイルと同じように扱えるので、シェルから操作しやすい利点がある。

こういう

  • レジストリがなく、設定は全てテキストファイ
  • デバイスは特殊なViewがなく他のファイルと同じように見える

ってフラット感がLinuxだよななぁ。

Windowsでもmountvolっていうデバイスマウントコマンドがあるけど、実用ではほとんど使わない。

キャラクタデバイスとブロックデバイス

スペシャルファイルはキャラクタデバイスとブロックデバイスに分類される。

キャラクタデバイス
デバイスに向けてシーケンシャルにデータを送信するタイプ。リモート端末とか。バッファを持たず逐次書き込み。
ブロックデバイス
ランダムアクセス可能なデバイス。HDDとかメモリとかが代表例。バッファを持ち、バッファがデバイス側で指定されたブロックサイズ(16kとか)に到達したら書き込みを行う。

俺はこの説明でイメージ掴めるけど、不慣れな人には厳しいような…。

/dev以下のファイル

/dev以下のファイルの用途が気になるところだけど、たくさんありすぎるので一部だけ調べてみます。

/dev/hda、/dev/sda

/dev/hdaはIDEデバイス、/dev/sdaはSCSIデバイスです。主にHDDがマウントされることが多いですね。ただ/dev/sdaはUSB接続のディスク装置も使用するし、9月版 IDEハードディスクが「/dev/hda」ではなくなる日(1/2) − @ITの通り、ドライバによってはIDEデバイスも/dev/sdaにマウントするようです。なお、命名法則は

  • IDEデバイス(/dev/hda、/dev/hdb、/dev/hdc、/dev/hdd)
    • 【1】/dev/hda プライマリIDEのマスター
    • 【2】/dev/hdb プライマリIDEのスレーブ
    • 【3】/dev/hdc セカンダリIDEのマスター
    • 【4】/dev/hdd セカンダリIDEのスレーブ
  • SCSIデバイス(/dev/sda、/dev/sdb、/dev/sdc)
    • PCIカードの順番に自動認識(外付けストレージがsdaになることもある)

となります。物理デバイス認識の順番で3文字目がa,b,c…と変化してゆき、論理パーティションの順番で4文字目が1,2,3…と変化します。

http://www.miraclelinux.com/technet/document/linux/training/1_3_1.html

/dev/zero

/dev/zeroは読み出すと"「 0」(\0、NULL)"を返す特殊ファイルです。
dd if=/dev/zero of=/dev/hda1 とかするとHDDのデータが全消去されます
Linux(UNIX)•W€ƒRƒ}ƒ“ƒh‚É‚æ‚éƒf[ƒ^–•Á