
【基礎から学び直すITインフラ入門】#8 Linux基礎① - ディレクトリ構成
この記事ではLinuxのディレクトリ構造について解説します。
一区切りついたので、今後の記事構成や章立ての整理に時間を使っていて、一週間空いてしましました、、、前回記事は ↓ から
はじめに
前回までで、ネットワークの基礎知識を一通り学びました。TCP/IP、ルーティング、DNS、DHCPなど、データがどのように送受信されるかを理解できました。
今回からは、Linuxについて学んでいきます。サーバーOSとして、Webサーバー、メールサーバー、DBサーバー、DNSサーバー...とインターネット上で動いているサーバーの多くはLinuxで動いています。特にWebサーバーの分野では、Linuxが圧倒的なシェアを持っているため、本記事ではLinuxに焦点を当てて解説していきます。
Linuxのディレクトリ構造
まずは、Linuxのディレクトリ構造についてです。
Linuxでは、全てのファイルやディレクトリがルートディレクトリ(/) を頂点とした階層構造で管理されています。この構造はFHS(Filesystem Hierarchy Standard) という標準に基づいており、どのLinuxディストリビューションでもほぼ同じ構造になっています。
/ (ルート)
├── bin/ # 基本コマンド
├── boot/ # 起動関連
├── dev/ # デバイスファイル
├── etc/ # 設定ファイル
├── home/ # ユーザーのホーム
├── lib/ # ライブラリ
├── opt/ # 追加アプリ
├── proc/ # プロセス・カーネル情報
├── root/ # rootユーザーのホーム
├── sys/ # カーネル・デバイス情報
├── tmp/ # 一時ファイル
├── usr/ # ユーザープログラム
│ ├── bin/
│ ├── lib/
│ └── local/
└── var/ # 可変データ
├── log/ # ログファイル
└── tmp/ # 一時ファイルルートディレクトリ(/)
全ての起点となるディレクトリです。Windowsでは「C:\」や「D:\」のように複数のドライブが存在しますが、Linuxでは全てが「/」以下の単一の階層構造にまとめられています。
/bin と /usr/bin
binは「binary(バイナリ)」の略で、実行可能なコマンドが格納されています。
/bin には、システムの起動や修復に必要な基本的なコマンドが入っています。例えば、ls(ファイル一覧表示)、cp(コピー)、mv(移動)、rm(削除)などです。
/usr/bin には、一般的なユーザーが使うコマンドやアプリケーションが入っています。システム起動には必須ではないが、日常的に使うコマンドがここにあります。
/boot
システムの起動に必要なファイル(カーネルなど)が入っています。Linuxカーネルや起動に必要な初期RAMディスクなどがここに格納されています。通常の作業で触ることはほとんどありませんが、システムが起動しないときに確認する場所の一つです。
/dev
デバイスファイルが入っています。Linuxには、すべてをファイルとして扱う、という設計思想があり、ハードウェアもファイルとして扱います。その置き場が /dev で、たとえばハードディスクは /dev/sda というファイルとして表されます。ファイルである以上、普通のコマンドでそのまま操作できますが、ディスク上には存在せず、OSが起動するとカーネルがハードウェアを検出し、仮想的なファイルとして扱います。
/etc
システムやアプリケーションの設定ファイルが格納されています。例えば、/etc/passwd(ユーザー情報)、/etc/hosts(ホスト名とIPアドレスの対応)、/etc/ssh/sshd_config(SSH設定)などです。
サーバーの設定を変更する際は、この /etc 以下のファイルを編集することが多いです。ただし、設定ファイルの編集ミスはシステムの動作不良に直結するため、慎重に行う必要があります。
/home
各ユーザーのホームディレクトリが格納されています。
例えば、hiroというユーザーなら /home/hiro/ がホームディレクトリになります。ユーザーの個人的なファイルやドキュメント、設定ファイルなどはここに保存されます。
Windowsの「C:\Users\hiro\」に相当します。
/lib
システムの起動や /bin や /sbin のコマンドが動作するために必要なライブラリファイルが入っています。Windowsでいう「DLLファイル」のようなものです。
/opt
サードパーティ製のアプリケーションがインストールされる場所です。パッケージマネージャーで管理されないソフトウェアがここに配置されることが多いです。例えば、独自にインストールしたソフトウェアなどです。
/proc
実行中のプロセスやカーネルの情報にアクセスするための仮想ファイルシステムです。/dev と同様、ディスク上には存在せず、カーネルがメモリ上に動的に生成します。例えば、/proc/cpuinfo(CPU情報)、/proc/meminfo(メモリ使用状況)、/proc/1234/(PID 1234のプロセス情報)といったファイルを読むことで、システムの状態をリアルタイムに確認できます。top や ps などのコマンドも、内部的にはこのディレクトリの情報を参照しています。
/root
root ユーザー専用のホームディレクトリです。一般ユーザーのホームディレクトリが /home/ユーザー名/ に作られるのに対し、root ユーザーだけは /root に置かれています。root はシステム全体を管理する特権ユーザーであるため、一般ユーザーの /home とは分離されています。
/sys
カーネルとデバイスの情報を扱う仮想ファイルシステムです。/proc と似ていますが、主にハードウェアやカーネルのパラメータを管理するために使われます。/proc が読み取り中心なのに対し、/sys はファイルに書き込むことでカーネルの動作を変更できる場合もあります。例えば、CPUのガバナー設定やネットワークインターフェースの情報などが格納されています。通常の作業で直接触ることはほとんどありませんが、システムの深い部分を理解・制御したい場面で参照することがあります。
/tmp
一時ファイル(Temporary file)を保存する場所です。アプリケーションが作業中に使う一時的なファイルがここに置かれます。
このディレクトリの内容は、システム再起動時にクリアされることが多いです。
/var
可変的なデータ(variable data)が格納されています。システム稼働中に内容が変化するファイルがここにあります。
特に重要なのが /var/log です。ここには、システムやアプリケーションのログファイルが保存されています。トラブルシューティングの際、まず確認するのがこのディレクトリです。
例えば、/var/log/syslog(システムログ)、/var/log/auth.log(認証ログ)、/var/log/nginx/access.log(Webサーバーのアクセスログ)などです。
パスの概念
ファイルやディレクトリの場所を示すには、パスを使います。パスには2種類あります。
絶対パス
ルートディレクトリ(/)からの完全な経路を示すパスです。必ず / から始まります。
例:
/home/hiro/documents/report.txt
/var/log/syslog
/etc/ssh/sshd_configどこにいても、この表記で同じファイルを指すことができます。
相対パス
現在いる場所(カレントディレクトリ)からの経路を示すパスです。
現在地が /home/hiro/ の場合:
documents/report.txt → /home/hiro/documents/report.txt
./documents/report.txt → 同じ(./は現在地を示す)
../yamada/memo.txt → /home/yamada/memo.txt (..は1つ上)記号の意味:
. (ドット1つ): 現在のディレクトリ
.. (ドット2つ): 1つ上のディレクトリ
相対パスは短く書けるので便利ですが、現在地によって意味が変わるため、場合にももちろんよりますが、スクリプトでは絶対パスを使うのが安全です。
まとめ
今回は、Linuxの基礎として、ディレクトリ構造を学びました。
Linuxのファイルシステムは、ルートディレクトリ(/)を頂点とした階層構造になっており、FHSという標準に基づいて整理されています。重要なディレクトリとして、コマンドが入っている /bin、設定ファイルが入っている /etc、ログが入っている /var/log、ユーザーのホームディレクトリがある /home など、この辺りは最低限知っておくべき内容かと思うので、覚えておきましょう。
本来は、基礎的なコマンドやフォルダ権限あたりも、本記事で書いていく予定でしたが、長くなりすぎたので、分割としました。
ですので、次回は今回書ききれなかった、よく使うコマンドと、その解説をしていきます。