UNIX系OSとは?ファイルシステム・シェル・パイプ・デーモンを基礎から理解しよう
はじめに
サーバーやクラウドについて勉強していると、
- Linux
- シェル
- ディレクトリ
- パス
- デーモン
といった言葉をよく見かけます。
これらを理解するうえで重要なのがUNIX系OSです。
UNIXの考え方を受け継いだOSは、サーバーをはじめとするさまざまなシステムで利用されています。
今回は、
ファイルシステム
↓
パス
↓
ファイルの種類
↓
シェル
↓
リダイレクション・パイプ
↓
ソケット・デーモン
↓
OSS
という順番で、UNIX系OSの基本を見ていきましょう。
1. UNIX系OSとは
**UNIX系OS(Unix-like OS)**とは、
UNIXの設計思想や機能などを受け継いだOSの総称
です。
代表的なものとして、
- Linux
- FreeBSD
- macOS
などがあります。
UNIX系OSでは、
- 階層型のファイルシステム
- シェルによるコマンド操作
- パイプによるコマンドの連携
- 複数ユーザー・複数タスクへの対応
などの考え方が使われています。
2. ファイルシステムとは
**ファイルシステム(File System)**とは、
OSがファイルやディレクトリを記憶装置上で管理するための仕組み
です。
例えばストレージに大量のデータが保存されていても、
ファイルAはどこ?
ファイルBはどこ?
空いている場所はどこ?
といった情報を管理できなければ、データを効率よく利用できません。
そこでファイルシステムによって、
- ファイル名
- ファイルの保存場所
- ディレクトリ
- ファイルサイズ
- アクセス権
- 更新日時
などを管理します。
3. UNIX系OSのファイルシステム
UNIX系OSでは、ファイルやディレクトリを**木構造(ツリー構造)**で管理します。
最上位には、
ルートディレクトリ
があります。
記号では、
/
と表します。
その下にさまざまなディレクトリが存在します。
/
├── bin
├── etc
├── home
│ ├── user1
│ └── user2
├── tmp
├── usr
└── var
このように、
/
↓
ディレクトリ
↓
サブディレクトリ
↓
ファイル
という階層構造になっています。
4. ルートディレクトリ
UNIX系OSのファイルシステムの頂点となるディレクトリが、
ルートディレクトリ(Root Directory)
です。
/
で表します。
例えば、
/home/user1/document.txt
というファイルなら、
/
└── home
└── user1
└── document.txt
という位置に存在します。
🍯 Windowsの C:\ などとは考え方が少し違い、UNIX系OSでは / を頂点としてファイルシステムを考えます。
5. パス
ファイルやディレクトリが、
ファイルシステム上のどこに存在するのか
を表すものを**パス(Path)**と呼びます。
パスの指定方法には、大きく、
- 絶対パス
- 相対パス
があります。
6. 絶対パス名
**絶対パス名(Absolute Pathname)**とは、
ルートディレクトリを基準として、ファイルやディレクトリの場所を指定する方法
です。
例えば、
/home/user1/document.txt
です。
先頭が、
/
から始まっています。
現在どのディレクトリにいても、同じファイルを示すことができます。
7. 相対パス名
**相対パス名(Relative Pathname)**とは、
現在いるディレクトリを基準として、ファイルやディレクトリの場所を指定する方法
です。
例えば現在、
/home/user1
にいるとします。
その中に、
document.txt
があるなら、
document.txt
だけで指定できます。
また、
.
は現在のディレクトリ、
..
は1つ上のディレクトリ
を表します。
例えば、
../user2/file.txt
なら、
現在の場所
↓
1つ上へ移動
↓
user2
↓
file.txt
という意味になります。
8. 絶対パスと相対パス
整理すると、
| 種類 | 基準 | 例 |
|---|---|---|
| 絶対パス | ルート / |
/home/user1/file.txt |
| 相対パス | 現在のディレクトリ | ../user2/file.txt |
覚え方はシンプルです。
絶対パス
→ / から全部書く
相対パス
→ 今いる場所から書く
9. UNIX系OSのファイル
UNIX系OSでは、
さまざまなものをファイルとして扱う
という考え方があります。
代表的なファイルの種類として、
- 通常ファイル
- ディレクトリファイル
- 特殊ファイル
があります。
10. 通常ファイル
**通常ファイル(Regular File)**は、
一般的なデータを保存するファイルです。
例えば、
- テキストファイル
- プログラム
- 画像
- 設定データ
などがあります。
memo.txt
program
image.png
など、普段イメージする「ファイル」に近いものです。
11. ディレクトリファイル
UNIX系OSでは、ディレクトリもファイルの一種として扱われます。
これを、
ディレクトリファイル(Directory File)
と呼びます。
ディレクトリには、ファイルや他のディレクトリを管理するための情報が含まれています。
home
│
├── fileA
├── fileB
└── directoryC
つまりディレクトリは、
ファイルなどを階層的に整理するための特殊なファイル
と考えられます。
12. 特殊ファイル
**特殊ファイル(Special File)**は、
入出力装置などをファイルのように扱うためのファイル
です。
UNIX系OSでは、
- ディスク
- 端末
- 各種デバイス
なども、ファイルと似た方法で扱えるようになっています。
例えば、
/dev
配下には、さまざまなデバイスを表すファイルがあります。
これによって、
ファイルを読み書きする
のと似た考え方で、
デバイスへ読み書きする
ことができます。
13. UNIX系OSの基本用語
ここからは、UNIX系OSを利用するときによく登場する、
- シェル
- リダイレクション
- パイプ
- ソケット
- デーモン
について見ていきましょう。
これらはLinuxを操作するときにも非常によく登場します。
14. シェル
**シェル(Shell)**とは、
利用者から入力されたコマンドを解釈し、OSへ処理を依頼するプログラム
です。
イメージすると、
利用者
↓
コマンド入力
↓
シェル
↓
OS
↓
ハードウェア
という関係です。
例えば、
ls
と入力すると、シェルがコマンドを解釈して処理を実行します。
代表的なシェルには、
- sh
- bash
- zsh
などがあります。
15. シェルの役割
シェルは単純にコマンドを実行するだけではありません。
例えば、
- コマンドの解釈
- プログラムの起動
- シェルスクリプトの実行
- リダイレクション
- パイプ
などの機能を提供します。
つまり、
ユーザーがUNIX系OSを操作するための窓口
と考えると分かりやすいです。
16. 標準入力・標準出力・標準エラー出力
リダイレクションとパイプを理解する前に、3つの基本的な入出力を押さえておきましょう。
UNIX系OSでは、
- 標準入力
- 標準出力
- 標準エラー出力
という考え方があります。
標準入力
プログラムへデータを入力するための基本的な入力先です。
通常はキーボードなどから入力します。
標準出力
プログラムの通常の実行結果を出力するための基本的な出力先です。
通常は画面へ表示されます。
標準エラー出力
エラーメッセージなどを出力するための出力先です。
こちらも通常は画面に表示されますが、標準出力とは別に扱えます。
プログラム
↙ ↘
標準出力 標準エラー出力
この仕組みがあることで、入出力先を柔軟に変更できます。
17. リダイレクション
**リダイレクション(Redirection)**とは、
プログラムの入力元や出力先を切り替える仕組み
です。
例えば、
ls > files.txt
とすると、
通常なら画面に表示される ls の結果を、
files.txt
へ保存できます。
ls
↓
標準出力
↓
画面
だったものを、
ls
↓
標準出力
↓
files.txt
へ変更したわけです。
18. リダイレクションの代表的な記号
代表的な記号として、
| 記号 | 意味 |
|---|---|
> |
出力先を変更する |
>> |
ファイルの末尾へ追記する |
< |
入力元を変更する |
例えば、
command > result.txt
なら出力をファイルへ保存します。
command >> result.txt
なら既存ファイルの末尾へ追加します。
command < input.txt
ならファイルを入力として利用します。
19. パイプ
**パイプ(Pipe)**とは、
あるコマンドの出力を、別のコマンドの入力として渡す仕組み
です。
記号では、
|
を利用します。
例えば、
command1 | command2
なら、
command1
↓
標準出力
↓
パイプ
↓
標準入力
↓
command2
となります。
20. パイプの例
例えば、
cat access.log | grep ERROR
とすると、
access.logの内容
↓
cat
↓
|
↓
grep
↓
ERRORを含む行だけ表示
という処理ができます。
1つの巨大なプログラムですべてを処理するのではなく、
小さなプログラムを組み合わせて複雑な処理を実現する
というUNIXらしい考え方です。
21. リダイレクションとパイプの違い
混同しやすいので整理しましょう。
リダイレクション
→ 入出力先を変更する
パイプ
→ コマンド同士の入出力をつなぐ
例えば、
ls > files.txt
なら、
コマンド → ファイル
です。
一方、
ls | grep txt
なら、
コマンド → コマンド
です。
🍯 「> はファイルへ」「| は次のコマンドへ」と覚えるとイメージしやすいです。
22. ソケット
**ソケット(Socket)**とは、
プロセス間でデータを送受信するための通信の仕組み・窓口
です。
特にネットワーク通信では、
プログラムA
↓
ソケット
↓
ネットワーク
↓
ソケット
↓
プログラムB
のように利用されます。
例えばWebサーバーとWebブラウザがネットワークを通じて通信するときも、ソケットを利用した通信が行われます。
23. ソケットとIPアドレス・ポート番号
ネットワーク通信では、
- IPアドレス
- ポート番号
などを利用して通信相手を識別します。
例えば、
192.0.2.10:80
なら、
192.0.2.10
→ コンピュータを識別
80
→ 通信するサービスを識別
というイメージです。
アプリケーションはソケットを利用することで、TCPやUDPなどを使ったネットワーク通信を行えます。
24. デーモン
**デーモン(Daemon)**とは、
UNIX系OSでバックグラウンドで動作し、サービスなどを提供する常駐プロセス
です。
ユーザーが毎回手動で起動して処理するのではなく、
OS起動
↓
デーモン起動
↓
バックグラウンドで待機
↓
要求を受ける
↓
処理
という形で動作します。
25. デーモンの例
例えば、
- Webサービス
- SSHサービス
- ログ管理
- スケジュール処理
など、さまざまなシステム機能がバックグラウンドで動作します。
UNIX/Linuxでは、デーモンを表す名称として末尾に d が付くものも多くあります。
例えば、
sshd
はSSH接続を受け付けるデーモンです。
SSH
+
daemon
→ sshd
というイメージです。
26. OSS
UNIX系OSと関連して覚えておきたいのが、
OSS(Open Source Software)
です。
OSSとは、
ソースコードが公開され、定められたライセンス条件のもとで利用・改変・再配布などが可能なソフトウェア
です。
代表的なOSSには、
- Linuxカーネル
- Apache HTTP Server
- PostgreSQL
- Git
などがあります。
27. オープンソース=何でも自由ではない
ここは注意が必要です。
OSSだからといって、
何をしても無条件で自由
という意味ではありません。
OSSにはそれぞれライセンスがあります。
利用者は、そのライセンスで定められた条件に従う必要があります。
例えばライセンスによって、
- 著作権表示を残す
- ライセンス文を含める
- 一定の場合にソースコードを公開する
などの条件が設定されることがあります。
そのため、
OSS
≠ 著作権がないソフトウェア
OSS
≠ 無条件で何でも自由
という点を覚えておきましょう。
28. 代表的なOSSライセンス
代表的なOSSライセンスには、
- GPL
- BSD License
- MIT License
- Apache License
などがあります。
ライセンスによって、
改変したソフトウェアを配布するときに、どのような条件を守る必要があるのか
などが異なります。
特に**GPL(GNU General Public License)**は、一定の条件でソフトウェアを再配布する場合などに、対応するソースコードの提供が求められることがあるライセンスとして知られています。
一方、BSD LicenseやMIT Licenseなどは、比較的制約の少ないライセンスとして利用されています。
29. UNIX系OSの全体像
今回登場した内容をまとめると、
UNIX系OS
│
├─ ファイルシステム
│ │
│ ├─ /
│ │ └─ ルートディレクトリ
│ │
│ ├─ パス
│ │ ├─ 絶対パス
│ │ └─ 相対パス
│ │
│ └─ ファイル
│ ├─ 通常ファイル
│ ├─ ディレクトリファイル
│ └─ 特殊ファイル
│
├─ シェル
│ │
│ ├─ コマンド実行
│ ├─ リダイレクション
│ └─ パイプ
│
├─ プロセス・通信
│ ├─ ソケット
│ └─ デーモン
│
└─ OSS
├─ ソースコードを公開
└─ ライセンスに従って利用
となります。
まとめ
この記事で覚えること
- UNIX系OSではファイルやディレクトリを階層構造で管理する
/はファイルシステムの頂点となるルートディレクトリ- 絶対パスはルートディレクトリを基準に指定する
- 相対パスは現在のディレクトリを基準に指定する
.は現在のディレクトリ、..は1つ上のディレクトリを表す- UNIX系OSには通常ファイル・ディレクトリファイル・特殊ファイルなどがある
- シェルはユーザーのコマンドを解釈してOSへ処理を依頼する
- リダイレクションはプログラムの入力元や出力先を変更する
- パイプはあるコマンドの出力を別のコマンドの入力へ渡す
- ソケットはプロセス間通信のための仕組み
- デーモンはバックグラウンドでサービスを提供する常駐プロセス
- OSSはソースコードが公開され、ライセンスに従って利用・改変・再配布などができる
- OSSは「著作権がない」「無条件で何でも自由」という意味ではない
🍯 はちみつメモ
UNIX系OSでは「すべてをファイルとして扱う」という考え方が大切。ファイルは
/を頂点とした階層で管理し、シェルからコマンドを操作する。さらに「>」で出力先を変え、「|」でコマンド同士をつなげる。この基本が分かるとLinuxの操作も一気につながってくる!