Linux(CentOS)のディレクトリ構造
サーバをいじりはじめて最初に感じたのが、各ディレクトリの意味をちゃんと理解できていないなーということでした。
サーバを管理する上では吐かれたログを見たり、システムの設定をいじったりしないといけないので、ディレクトリ構造については知っておくべきだと思い、現行のディレクトリ構造の標準などについて調べてみました。
※間違いがあったら指摘して戴けると嬉しいです。
目次
FHS(Filesystem Hierarchy Standard)について
FHSはLinuxディストリビューションの多くが従っているファイルシステム階層に関する標準だそうです。自分が利用しているCentOSもこれに則っているようです。
2017年1月現在での現行標準はv3.0のようです。
※ファイルシステムとは、記憶装置に格納されたデータ(ファイル)を、ユーザが操作できるようにするためにOSが提供している機能です。複数の関連するファイル(及びディレクトリ)を束ねるのがディレクトリになります。
Windows系OSではデバイスごとにツリー構造を持ちますが、UNIX系OSでは、すべてのデバイス上のファイルをひとつの階層構造(木構造)のいずれかのディレクトリ内に配置する仮想ファイルシステムになっており、この木構造の根にあたるのがルートディレクトリになります。
ディレクトリ構造
Linuxのファイルシステム最上位はルートディレクトリ("/")です。※ルートディレクトリは厳密には/直前の空白らしいのですが/と表すのが慣例となっています。
その直下のディレクトリは下記のようになっています。
名前 | 格納される内容 | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
/bin |
最低限必要な基本コマンドの実行ファイル(binaries)が格納されている。 例えば、chmod、sh、ls、cp、pwd、chown、psなど。 ※/usr/binと違いシングルユーザモードで使う最低限のもの置いている点。/binにないものを/usr/binに置いている。 |
||||||||||||||||||||
/boot | 起動(ブート)に必要なファイル。カーネルの他にもinitrd等が含まれる。 | ||||||||||||||||||||
/dev | 接続されたデバイスを制御する際に用いるデバイス・ファイル(スペシャル・ファイル)が置かれる。データ入出力を1文字(バイト)単位で行うマウス・キーボードのようなものをキャラクタデバイス、ある一定の大きさ(ブロック)単位で行うHDD・メモリ・FDのようなものをブロックデバイスと呼ぶ。 デバイスファイルに対し、open()などのシステムコールを用いると、カーネルドライバがファイルではなくデバイスへアクセスする仕組みになっている。 主なデバイスファイル名とその詳細については以下のようになる。
|
||||||||||||||||||||
/etc |
固有の設定ファイルが置かれる。設定ファイルの拡張子と定義されているわけでないものの、confとつくものが割とある。例えばWebサーバの設定はhttpd.conf(httpd/conf)などとして置かれる。 |
||||||||||||||||||||
/home | ユーザのホームディレクトリ。 | ||||||||||||||||||||
/lib | /bin配下や/sbin配下にある実行ファイルに必要なライブラリ。 | ||||||||||||||||||||
/media | リムーバブルなデバイスのマウントポイント。 | ||||||||||||||||||||
/mnt | ファイルシステムの一時的なマウントポイントで、通常は空である。 | ||||||||||||||||||||
/opt | アプリケーションのパッケージのインストール用。 | ||||||||||||||||||||
/proc |
procfs(process filesystem)というプロセスの情報をファイルシステムに見せかけたものをマウントするディレクトリ。ここではプロセスや場合によってはカーネルの情報が置かれる。 |
||||||||||||||||||||
/root | rootユーザのホームディレクトリ。 | ||||||||||||||||||||
/sbin | システム管理関係のコマンド実行ファイルが置かれる。 | ||||||||||||||||||||
/tmp | 一時的に利用するファイル置き場。システムを再起動したときには消去されている。 | ||||||||||||||||||||
/usr | マルチユーザで共有可能なリソース、アプリケーションが置かれるディレクトリ。
|
||||||||||||||||||||
/var | 内容が変化する可変データが置かれるディレクトリ。ログファイルやアプリケーションキャッシュなど。 |
この他にもディストリビューションやOSごとに固有のディレクトリだったり、インストールしたサブシステムによって追加されるディレクトリがあるようです。自分のCentOSではselinuxという強制アクセス制御のためのディレクトリ等もありました。
補足
■initrdとはなんぞや
聞いたことがあってもよくわかっていなかったものの一つです。Wikipediaさん曰く次の通りらしいです。
初期RAMディスク(initial ramdisk)はLinuxカーネルのブート時に一時的なルートファイルシステムをメモリに読み込むための方式。
カーネルのbootにはファイルシステムを参照しないといけないが、ファイルシステム構築にはカーネルが必要という矛盾があり、これを打開するため、カーネルブート時には一時的なファイルシステムをメモリ上に展開するということでしょうか…?
うーん確信が持てない…ということでさらに調べていくとめちゃくちゃわかりやすく解説されていらっしゃるサイト様がありましたので、リンクを張っておきます。
つまりポイントは以下
- 現状のLinuxでは、カーネルはモジュール化により各種ドライバを内包していない。なぜなら、ドライバをすべてカーネルに内包させると容量が肥大化するため。現在は必要に応じてモジュールをカーネルに組み込む形を取っている。
- つまりブート時にカーネル単体をメモリ上に展開しても、ドライバがないのでHDDを認識できない問題が起こる。
- initrdはブートする際に必要なHDDドライバなどのモジュールを、カーネルと一緒にメモリに展開するために記述されるファイル
モノリシックカーネルとドライバのモジュール化についても勉強になりましたので、ブートの仕組みやこれらについても後で改めて別記事にまとめようと思います。
自宅サーバのスペック等
前置き
サーバ構築・運用技術を養うために自宅でWebサーバ等を構築していきたいと思います。幸いマシン自体は5年前に購入したものがあったので、これを利用したいと思います。
古いモデルですが、勉強用途として使う分にはどうなのか、電力消費量はどうなのかなど今後体感したことをちょこちょこ書いて行きたいと思います。その際に、同じく勉強中の読者の方の後学になれば良いなということで簡単にサーバのスペックを記載しておきます。
サーバのスペック
マシンスペック
製品:HP ProLiant MicroServer N54Lモデル(ディスクレスモデル)
リソース名 |
詳細 |
---|---|
プロセッサ |
AMD Turion(TM) Ⅱ NEO N54Lプロセッサー(2.2GHz) |
キャッシュメモリ |
1MB L2×2 |
メモリ |
4GB×1 |
HDD |
250GB×4 |
※(R)や(TM)は登録商標について表すものです。
搭載OS
CentOS 6.7
Ubuntuは大学で利用しており、別のディストリビューションも触ってみたかったのでCentOSを選択しました。もしかしたら今後変更することもあるかもしれませんが、とりあえずこれで行こうと思います。
プロフィール
書いてる人
寝ることとおいしいご飯を食べることが好きな、そこらへんの工学系の学生です。
専攻は機械だったこともあれば電気だったこともあります。現在は情報です。
はてなID(white-hawk)は好きな色と好きな動物を組み合わせただけなんですが、厨二病っぽくなってしまいました。
ブログで書くこと
ちょっぴり社会経験を積んでみて、実践的な技術力が欠けていると感じたので、実践的な取り組みを行ったりして学んだことをメモしていこうと思いブログを開設しました。
実践的な技術だけでなく理論寄りの記事も書くかもしれません。
勉強中の身ですので、もし記述内容に間違いがあった場合指摘して戴けると嬉しいです。
また、たまにおいしいご飯に関する記事も書くかもしれませんがご了承ください。