Huney

応用情報(AP) / ソフトウェア

UNIX系OSとは?ファイルシステム・シェル・パイプ・デーモンを基礎から理解しよう

UNIX系OSの基本について、ファイルシステム、絶対パス・相対パス、ファイルの種類、シェル、リダイレクション、パイプ、ソケット、デーモン、OSSまで初心者向けに解説します。

読了時間:約14分
  • #ソフトウェア
  • #UNIX
  • #Linux
  • #ファイルシステム
  • #シェル
  • #リダイレクション
  • #パイプ
  • #OSS
  • #応用情報技術者試験

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の操作も一気につながってくる!