TL;DR;
他サイトを参考にして記述している部分が多分にあるため他サイト参照を推奨。
自分用のメモとして。
Linuxディレクトリ構成
参考サイト、というかほぼここのまとめ。
(手で入力しながら覚えるみたいな手法)
ディレクトリの構成図
以下はCentOS
のディレクトリ構成となる。
おそらく他のディストリビューションもそんなに大きな差異は無いと思う。。。
/
┗ /bin
/boot
/dev
/etc
/home
/lib
/lost+found
/media
/misc
/mnt
/opt
/proc
/root
/sbin
/selinux
/srv
/sys
/tmp
/usr
┗ /user/bin
/user/etc
/usr/games
/usr/include
/usr/lib
/usr/libexec
/usr/local
/usr/sbin
/usr/share
/usr/src
/usr/tmp
/var
┗ /var/account
/var/chache
/var/crash
/var/db
/var/empty
/var/games
/var/lib
/var/local
/var/lock
/var/log
/var/mail
/var/named
/var/nis
/var/opt
/var/preserve
/var/pwcheck
/var/run
/var/spool
/var/tmp
/var/www
/var/yp
基本的には上記のような構成となる。
以降にて、各ディレクトリの用途などについて記載していく。
各ディレクトリ概要
/ : ルートディレクトリ
すべての始まり。すべてを包括する根っことなるディレクトリ。
/bin : コマンド管理
基本コマンドであるcd
だとかls
だとか、様々なコマンドは/bin
内に配置されている対応するコマンドファイルから呼び出され、実行されている。
CUIにおいて/bin
は心臓のようなもの。
ここにはLinuxの基本コマンドを管理するのが普通で、ソフトのインストールなどに付随するコマンドファイルは別の場所に配置する。
/boot : 起動に必要なファイル
ブートに必要なファイル。ブートログやカーネルイメージ(Linuxカーネルを圧縮したファイル)などが保存されている。
専門的な知識を有している人でなければここをいじることはそんなにないと思う。
/dev : デバイスファイル配置
デバイス(ハードウェア)をファイルとして扱うUNIX/Linux独自の設計思想からきている。
/etc : 設定ファイル
ほぼすべての設定ファイルがここに配置される。
カーネルのみならず、追加でインストールしたソフトウェアの設定ファイルもこの配下に配置されるため、かなり膨大なファイル数になることが多い。
追加インストールした場合は
/etc/sample
のようにアプリケーション名のディレクトリをetc配下に作成して、その中に配置することが多い。
/home : 一般ユーザのホームディレクトリ
通常ユーザーを追加するごとにユーザー名のディレクトリが追加される。
windowsでいうC:\Users\ユーザー名
のディレクトリが多分同じような役割。
/lib : binの実行に必要なファイル
/bin
や/sbin
のコマンドを実行するために必要となるファイルが配置される。
基本的にユーザーが変更を加えることはない。
64bit用の共用ファイルは別途
/lib64
というディレクトリが存在するため注意。
/lost+found : 復元用ファイル
システムのバックアップないし復元用のファイルが格納される。
意図しない再起動やシャットダウン時に使用される。
こちらも通常ユーザーが変更を加えることはない。
/media : リムーバブルメディアのマウントポイント
CDやDVDなんかを挿入した時に/media
配下にディスクのマウントが生成される。
/misc : リムーバブルメディアのマウントポイント
/media
以外のその他さまざまなデータ用のマウントポイント。
自動でメディアをマウントするデーモンautofsで利用する。
/mnt : 一時的なマウントポイント
/media
と違い、一時的なファイルシステムのマウントに使用する。
/opt : パッケージ管理システムのインストール先
rpmなどのパッケージ管理システムでパッケージをインストールした際、このディレクトリにインストールされる。
/proc : プロセスID付きディレクトリ
プロセスIDのついたディレクトリが配置される。
プロセス独自の情報を格納することからプロセスディレクトリ
と呼ばれる。
各種プロセスのステータス確認などに利用される。
psコマンド
など
/root : rootユーザーのディレクトリ
/home
がセキュリティ上の危険に晒されてもこいつは大丈夫。という保健用のディレクトリ。
/sbin : システム管理者用コマンド
再起動やファイルシステムの操作など、システム管理者にのみ許容された重要なコマンドが配置される。
/bin
同様、/sbin配下に新規でコマンドを追加、変更することは推奨されない。
/selinux : セキュリティ向上に利用?
rootへ権限が集中することを防ぎ、権限を分散させることでセキュリティの向上を図るためのもの、らしい。
rootが乗っ取られたら全部好き放題やられちゃうから権限を分散させようね~みたいなことだと思われる。
/srv : FTP/www専用のユーザディレクトリ
FTP、wwwなどで利用するユーザー用のスペース。
管理者が1人の場合は利用しない。
/sys : ドライバ関連のプロセス管理
動作しているプロセスやドライバをすべて/proc
で管理すると膨大になるため、/sysにドライバ関連のプロセスをまとめて負荷分散をしている。
※完全に分離しているわけではないので注意も必要
/tmp : 一時ファイルの保存場所
テンポラリデータ(一時データ)の保管場所。
メモリ上の一時ファイルを保存する。
ダウンロードフォルダとして利用することもあるが、
/tmp内のデータは再起動時に消去されてしまうので注意が必要。
消去されるのは再起動時だけではなく、
cron
でも定期的に消去されるため突然消えたらcronが仕事をしたと考える。
/usr : 共通利用するプログラム・ライブラリのデータ
各ユーザーが共通して利用するプログラム・ライブラリのデータ。
ソースからコンパイルされたソフトなどは/usr配下にインストールされる。
/etc
に保存されている設定ファイルのシンボルリンク(ファイルなどへのショトカのようなもの)も/usr配下に貼られることが多い。
/usr/bin : 一般ユーザが利用するコマンド
別名ユーザーコマンドの保存場所。
プログラムのインストールなどによって追加する場合はこのディレクトリが適している。
openssl
やphp
、git
コマンドなど。。。
/usr/etc : 一般ユーザが利用する設定ファイル
あんまり利用されない。基本的に/etcにてライブラリの設定ファイルは一元管理することが多い。
/usr/games : ゲーム用ディレクトリ
なぜか必須のディレクトリ。
/usr/include : C言語用ヘッダーファイル保存場所
C利用のアプリケーション開発をしない場合ほぼ使わなそう。
/usr/lib : 一般ユーザのライブラリ保存場所
/usr/bin
の実行に必要なライブラリの保管場所。
/libと同じように64bit用に
/usr/lib64
が用意されている。
/usr/libexec : 補助コマンド
コマンドから内部的に呼ばれる補助コマンドの保存場所
git-core
とか、openssh
とか
/usr/local : 管理者用ローカルファイル
管理者のみが利用するライブラリなどの追加に利用する。
/lib
や/bin
といった必須ディレクトリが用意されている。
管理者のみが使用可能なコマンドをここに用意できる。
/usr/sbin : 管理者用コマンド
usr版のsbin
/usr/share
アーキテクチャ(OSやソフト)に依存しないデータを配置。
マニュアルとかデータベースとか、そういったのが保存される。
/usr/src : ソースコード保存場所
概要の通り。
/usr/tmp : 一般ユーザの一時保存場所
ユーザーごとのテンポラリファイル保存場所。
通常はシンボルリンクが/tmp
ディレクトリに配置される。
/var : 可変的システムデータ保管場所
ログ
やキャッシュ
などの可変的システムデータ(動的ファイル)を保管しておく場所。
/tmpと違い、再起動などしても消去されずに残り続ける。
/var/account : アカウントに関する動的ファイル
ユーザーごとのアクションなども履歴として保管する。
例えば、/var/account/pacct
にはユーザーごとのコマンド入力の履歴が残っていたりする。
コマンドの履歴であれば
history
コマンドでも確認可能。
/var/chache : キャッシュ一時保管場所
キャッシュの一時保管をしてくれる場所。
ソフトで指定した一定の容量を超えると古いものから順に削除される。
/var/crash : クラッシュ時のダンプ
システムがクラッシュした際に原因を追究するために利用される。
/var/db : データベース情報
各ソフトで利用するデータベースの情報。
記述子についての情報を集めるnscd
などで利用。
nscd(Name Service Cache Daemon)
DNSやNISなどのネームサービスのデータベースを保持し、passwd
、group
、hosts
などのファイルの情報をキャッシュする。
/var/empty : SSHで利用されるディレクトリ
パーミッションの変更をするとログインできなくなるため注意
/var/games : ゲーム用の動的ファイル保存場所
セーブデータとか。
/var/lib : アプリの実行時に生成されるステータス情報
概要のうち、動的に生成されるものがここに保存される。
/var/local : /usr/localのログファイル保存場所
概要の通り。
/var/lock : 排他制御
特定のファイルなどに対して、他のユーザが使用中か、変更点を保存しているかなどの情報を保持する。
/var/log : あらゆるログが保存される場所
システム管理者御用達。
システム、メール、アクセスログ。。。その他諸々あらゆるログがここに集約される。
稼働中のサービスが何らかの理由でバグった。エラーを吐き出した。なんて状況ではこいつと死闘を繰り広げることを強いられる。
/var/mail : メール関連の動的ファイル
/var/spool/mail
へのシンボルリンク
/var/named : BIND DNSサーバ用ディレクトリ
名前解決に関連するファイルが保存される。
/var/nis : NIS+などで利用する動的ファイル
NIS+はネットワークネームサービス
の一種。
ネームサービスとは、ネットワークを通じてやりとりする必要のある情報を1つの場所に格納するためのもの。
情報の例として、マシン名とそのIPアドレス
やユーザー名
、パスワード
、アクセス権
といったような情報を持つ。
/var/opt : /opt用の動的ファイル保存場所
概要の通り
/var/preserve : エディタクラッシュ時にイイコトするやつ
エディタが何らかの理由でクラッシュしたときにメールでクラッシュ前のデータを送信してくれる偉いやつ。
/var/pwcheck : ユーザ認証
ユーザ認証のSASLライブラリでpwcheckを使う際に利用する。
通常は
saslauthd
を利用するためあまり使わないらしい。
/var/run : プロセス情報
特定プロセスのプロセス番号を含んだファイルを保持する。
※再起動時にクリアされる
基本的に
.pid
形式のファイルで保持する
/var/spool : 実行ファイル/データの一時保存
処理に時間のかかるものにプロセスをとられ続けるとリソースがもったいないので処理したデータを一時保存するための場所。
印刷データ、メールの送信データなど。
/var/tmp : システム関連の一時ファイル
/tmp
はメモリ上のデータの一時保存で、こいつは再起動時のデータなども扱うため、再起動してもデータを保持する。
cronによって一定期間で削除される。
/var/www : apacheのデータ保存場所
インターネット関連のディレクトリはここに収めるようにする。
昔は
/home/httpd
ディレクトリにあったものらしい
/var/yp : NISの動的ファイル保存場所
概要の通り