Linuxの主なディレクトリについて

# この記事を書くきっかけ
Linuxのhomeディレクトリの上の階層には、/(ルートディレクトリ)やbinディレクトリがあります。他にもたくさんディレクトリがありますが、普段中身を見たり触ったりすることはありません。知らないままでも今のところ困っていませんが、「そういえばbinとかlibとかって一体何が入っているディレクトリなんだろう」と疑問に思ったので、調べてみました。

Linuxのディレクトリの中で、主なディレクトリについて、以下の項目に則って記述しています。
- 読み方
- その名の由来
- そのディレクトリは何なのか（WHAT）
- そのディレクトリの存在する目的（WHY）
- 追加情報


# Linuxの主なディレクトリ

## /（ルートディレクトリ）

**読み方**：ルートディレクトリ（Root Directory）

**由来**：
ファイルシステムの最上位階層であることから「根（root）」を意味します。ツリー構造の基点であるため、ルートディレクトリと呼ばれます。

**説明**：
ファイルシステムの最上位ディレクトリで、すべてのディレクトリとファイルの起点です。

**目的**：
システム全体のディレクトリ構造をまとめるための基盤として設置されています。

## /bin

**読み方**：ビン（bin）

**由来**：
バイナリ（binary）の略です。システムの基本的なバイナリ実行ファイルが格納されるディレクトリであるので、この名前がつけられました。
- 「バイナリ (binary)」 とは、コンピュータが直接実行できる機械語で書かれたファイルのことを指します。
- （↔︎)「ソースコード」: 人間が理解しやすい形で書かれたプログラムコード
- ソースコードはプログラミング言語で書かれており、コンピュータが理解できる形に変換する必要があります。この変換を行うプロセスを「コンパイル」と呼び、コンパイル後に生成されるファイルがバイナリファイルです。

**説明**：
基本的なユーザーコマンドのバイナリが置かれるディレクトリ。

**目的**：
システムの起動や修復の際に必要な最小限のコマンドを提供すること。

**具体的に**：
`ls`, `cp`, `mv`, `rm`, `cat`, `bash` などの、システムの起動や基本的な操作に必要なコマンドが置かれています。
例えば、/bin/ls はファイルやディレクトリの内容をリスト表示するためのバイナリ実行ファイルです。ユーザーがターミナルで`ls` コマンドを入力すると、このファイルが実行されて、指定されたディレクトリの内容が表示されます。

## /lib

**読み方**：リブ（lib）

**由来**：
ライブラリ（library）の略です。プログラムが実行される際に必要となる共有ライブラリが格納されているディレクトリです。
共有ライブラリとは、複数のプログラムが共通して利用するコードや関数の集まりです。これにより、システムの効率化とメモリ使用量の削減が可能になります。

**説明**：
基本的なプログラムやカーネルの依存する共有ライブラリが置かれるディレクトリ。

**目的**：
`/bin` や `/sbin` のバイナリが必要とするライブラリを提供すること。

例えば、lsコマンドを実行する際、lsコマンドは内部で libc というライブラリを使用してシステム呼び出しを行い、ファイルのリストを取得します。このように、/lib ディレクトリにあるライブラリがなければ、多くの基本的なコマンドやプログラムは正常に動作しません。


## /sbin

**読み方**：エスビン（sbin）

**由来**：スーパーバイナリ（superuser binaries）の略です。システム管理者（スーパー管理者）が使用するバイナリファイルが格納されるディレクトリであることを示しています。

**説明**：システム管理用のバイナリが置かれるディレクトリ。

**目的**：システムの管理やメンテナンスに使用されるコマンドを提供します。通常、一般ユーザーはこれらのコマンドを実行できません。

**/sbin ディレクトリに含まれる代表的なコマンド**

- `fsck`: ファイルシステムのチェックおよび修復を行うコマンド。
- `reboot`: システムを再起動するコマンド。
- `ifconfig`: ネットワークインターフェイスの設定や状態の確認を行うコマンド（現在は ip コマンドに置き換えられつつあります）。
- `init`: システムの初期化を行うプロセスで、システムの起動やシャットダウンに関与します。

/binファイルとは異なり、システムの設定、起動、シャットダウン、ネットワーク管理など、システム管理者が日常的に使用する重要なコマンドが格納されています。一般ユーザーが誤って操作したり実行したりしてシステムを不安定にすることを防ぐために、スーパーユーザー権限が必要とされています。

## /home
**読み方**：ホーム（home）

**由来**：
ユーザーのホームディレクトリが格納される場所であることから、家庭や家（home）を意味します。各ユーザーの個人データがここに保存されます。

**説明**：
ユーザーのホームディレクトリが置かれるディレクトリ。

**目的**：
各ユーザーの個人ファイルや設定ファイルを保存します。

**例**：
`/home/user1`, `/home/user2` など。各ユーザーのホームディレクトリ内には、ドキュメント、ダウンロード、音楽、画像、ビデオなどの一般的なフォルダがあり、ユーザーの個人データや設定ファイルが保存されます。

## /usr

**読み方**：ユーエスアール（usr）

**由来**：
システム全体で共有されるプログラムやライブラリが格納されています。
初期にはユーザー（user）の略とされていましたが、現在はUnix System Resources（UNIXシステム資源）の略とされています。

**説明**：
ユーザーが共用するプログラムやライブラリ、ドキュメントなどが置かれるディレクトリ。

**目的**：
追加のソフトウェアパッケージや、ユーザーが使用する一般的なコマンド、ライブラリ、マニュアルなどを提供します。

**例**：`/usr/bin`, `/usr/sbin`などが格納されています。

**/usr/bin**：
通常のユーザーが利用する追加のバイナリファイルが含まれます。システムの完全な運用環境で使用される一般的なユーザーコマンドが多く含まれます。例えば、gcc, python, git, nano, firefox などのコマンドが含まれます。

**/usr/sbin**：
システム管理者向けの追加のバイナリファイルが含まれます。システム管理やメンテナンスに関連するツールが多く含まれます。例えば、apachectl, htpasswd, visudo, chroot などのコマンドが含まれます。

**/bin ・ /sbin　と　/usr/bin ・ /usr/sbinの違いは？**

**/bin ・ /sbin**は、システムの基本的な機能を提供するために存在します。
- システムの最小限の動作環境において必要な基本コマンドを置く場所。
- システムを起動させるプロセスに必要不可欠なバイナリが含まれます。

**/usr/bin ・ /usr/sbin**は、豊富なツールやアプリケーションを提供するために存在します。
- システムが完全に起動した後に利用される追加のコマンド置く場所。
- より広範なツールセットが含まれており、日常の操作や管理に必要なプログラムが多く含まれます。


## /var

**読み方**：ヴァー（var）

**由来**：
可変（variable）の略です。システムの動作中に変更されるデータやログファイル、メールスプール（一時保存）などが格納されるディレクトリです。

**説明**：
可変データファイル（ログファイル、スプールファイル、キャッシュファイルなど）が置かれるディレクトリ。
可変データファイルとは、システムの運用中に頻繁に変更されるデータファイルのことを指します。

**目的**：
システムの動作中に生成される一時的なデータや持続的なデータを保存します。

**例**：`/var/log`, `/var/spool`, `/var/cache` など。

# Linuxのシステム用ディレクトリにアクセスする方法（読み出し専用）
macのFinderで/binや/etcなどのシステムディレクトリにアクセスする方法をいくつか紹介します。
1. Finderの「移動」メニューを使う方法
Finderを開き、メニューバーから「移動」>「フォルダへ移動」を選択します。
表示されたダイアログに「/etc」や「/bin」などのパスを入力し、「移動」をクリックします。

2. キーボードショートカットを使う方法
Finderを開いた状態で、`Command + Shift + G`を押します。
表示されたダイアログにパスを入力し、Enterキーを押します。

3. 隠しファイルを表示する方法
Finderを開いた状態で、`Command + Shift + . (ピリオド)`を押します。
これにより隠しファイルやフォルダが表示されるようになり、/etcや/binなどのシステムディレクトリも見えるようになります。

4. ターミナルを使用する方法
ターミナルを開き、「open /etc」や「open /bin」などのコマンドを入力します。
指定したディレクトリがFinderで開きます。

***
実際に、１の方法で、macのFinderから/binにアクセスして、lsファイルをダブルクリックしてみます。すると、自動的にターミナルが開いてlsコマンドが実行されます。

![Snipaste_2024-07-04_14-23-31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642333/a1532837-cd85-47fb-aa9d-766cb4b4fd36.png)
```
Last login: Thu Jul  3 00:00:00 on ttys000
/bin/ls ; exit;
user@userAir ~ % /bin/ls ; exit;
Applications		Public			img
Desktop			VSNotes			mysql-docker
Documents		anaconda3		program
Downloads		chromedriver		temp_images
Library			projectSample		Movies					
Music			Pictures	

Saving session...
...copying shared history...
...saving history...truncating history files...
...completed.

[Process completed]
```

**注意点**
「/（ルートディレクトリ）」直下のシステムディレクトリには重要なファイルが含まれているため、不用意に変更や削除をしないよう注意が必要です。閲覧のみにしましょう。

macOSの場合、セキュリティ機能により一部のディレクトリへのアクセスが制限されています。一般ユーザーにシステムディレクトリの書き換えが許可されていないので、編集して保存するということはできません。


# まとめ
- /（ルートディレクトリ）: いちばん上にあるディレクトリ。
- /bin: 基本的なコマンドが置かれている場所。ls、mv、cpなどのよく使うコマンドはここにある。
- /lib: 共有ライブラリの置き場所。複数のプログラムが共通して利用するコードや関数がここにある。これがないと、プログラムが実行されない。
- /sbin: パソコンのシステムを管理するためのコマンドを置く場所。起動やシャットダウンなど、超重要なコマンドはここにある。
- /home: ユーザーがいちばんよく見るディレクトリ。個人の写真や文書ファイルを置く場所。
- /usr: ユーザーが追加した機能やインストールしたプログラム、カスタムソフトウェアなどを置く場所。他にも役割がある。
- /var: 日常的に変更されるファイルを置く場所。キャッシュやログなど、中身が変化するファイルはここにある。

よく見かけるLinuxのディレクトリに何が入っているのか、超ざっくりとですが、知ることができました。