お知らせ: たぶん古い記事です。
🐦「こんにちは。記事メンテナンスサービスです。」
🐦「この記事は大雑把に 860 日以上は経過しているようです。内容の賞味期限にご注意ください。」
Linux を使い始めた方はもうご存知かと思いますが、 Windows との大きな違いの一つはファイルの扱いです。
まずファイルパスが違いますよね。ドライブの概念でなく、 / を根とする単一のファイルシステムツリーだったり。 そこにいろいろ mount していくことだったり。
この記事ではそういうことには触れず、 ぶっちぎってちょっと特殊なファイルについて触れます。
Rev 2
すこし手直ししてリンクを調整しました。
通常のファイルのおさらい
通常ファイルにはデータを収めます。 最初にデータを書き込み、 そこからは読んだり書き換えたり書き加えたりします。
つまりファイルサイズという概念があるわけです。 当たり前ですよね。
- 例1: ファイル A「すみっこでぐだぐだ」
- 例2: ファイル B「すごい長文〜(以下略)」
これは Windows と変わりません。
Note
あえて違いを述べれば、改行コードでしょう。 Windows では CR と LF の 2 文字ですが、GNU/Linux では LF 一文字です。
文字エンコードも歴史的にはいろいろありましたが、 今や Unicode でほぼ統一、それも UTF-8 がほぼ主役です (Unicode 自体が長い歴史のため、実際はそう単純ではないです)。
特殊なファイル、デバイスファイル
/dev を ls -l なりで覗いてみましょう。
user$ ls -l /dev
普通のディレクトリと比べてみてください。 何か数字、おかしくないですか。
サイズのところが 1, 5 とかなってます。 しかもファイルによって全部違います。 よく見るとファイル名もなんかハードウェアぽいのが多いです。
大雑把にいって、デバイスファイルはハードウェアとの出入り口です。 ハードウェアなどをファイルのように見せかけて、 そのファイル的なハードウェアなどへ読み書きを行うことで 操作ができるというわけです。
Caution!
デバイスファイルに迂闊に読み書きアクセスはしないようにしましょう。 びっくりする程度で済めばいいですが、 最悪何かが壊れます。
前述の番号はその固有名とも言える数値で、 major, minor の組み合わせです。 読み書きの単位でブロックデバイス、キャラクターデバイスと区別します。
Note
デバイスファイルにはハードウェアの抽象化の他にも 色々な種類があります。
デバイスファイルは特殊で、サイズがないし、 読み書きで何が起こるかはデバイスファイル次第です。 例えば /dev/null は万能ゴミ箱で、サイズは常に0。 書き込んだものを寛容に全て飲みこみます。ブラックホールです。
user$ ls -s /dev/null
0 /dev/null
user$ echo "王様の耳はロバの耳!" > /dev/null
user$ ls -s /dev/null
0 /dev/null
Note
そんな変なゴミ箱なんに使うの、と思われるかも知れません。 コマンドは色々なメッセージを出しますが、 時には静かに暮らしたい時もあるのです。 そういうときはそういうコマンドの出力をそっと繋いであげます。
特殊なファイル群
Windows にはレジストリという概念があって、 システムの色々な設定がそこにあることをご存知かも。
Linux では主に /dev 、 /proc 、 /sys の下に 色々なディレクトリとファイルがあり、 それらを通じて Linux カーネルや各種デバイスの状態を知ったり、 一部では設定も行えます。
このサイトが見えるということは、 ネットワークを通じてアクセスされているわけですが、 じゃあそのネットワークデバイスはなにが装備されているでしょう。
user$ ls /sys/class/net
enp0s31f6 lo
sumikko.tokyo の Debian さんは大体 Intel のギガビット有線が繋がっています。 上の enp なんちゃらがそれです (lo は今はそっとしておいてあげましょう)。
Note
ちょっと前まではネットワークデバイスの名前は ethN でした。
最近はハードウェアがどの部分に付いているかを 数字とアルファベットの複雑な組み合わせで区別します。
/dev や /proc や /sys 以下のファイルは、 当面はファイル名を見るだけにしましょう。
うっかり読んだり書いたりすると大変なことになりかねないです。
今は覚えていればそれでいいと某司令も仰っています。
まとめ
- GNU/Linux ではとにかくファイルが重要です。
- ファイルといっても特殊なファイルがあります。
- 特殊なファイルはハードウェアや Linux カーネルの窓口などです。
Warning
特殊なファイルは、色々と触る前に絶対に正体を調べ、 迂闊な操作は止めましょう。
ご一読いただきありがとうございました。