Linux初心者が身につけておきたい知識とは？

こんにちは、
[InfraAcademy](https://engineer-ninaritai.com/infraacademy/)というLinuxやネットワークの学習サービスを作成しております、ryuと申します。

Linuxの学習サービスを運営していると、さまざまな方にお会いします。Linuxを勉強したい方はもちろん、ネットワークやセキュリティ、フルスタックエンジニアになるためのスキルを身につけたい人などさまざまです。
今回は、Linuxを勉強している人に向けて、**Linux初心者が身につけておきたい知識**について解説します。
_※Linux初心者とは、Linuxを触ったことのない人から学習を始めて3ヶ月程度の人のことを想定しております。_

## Linux初心者が身につけておきたい知識6選
Linux初心者が身につけておきたい知識とは、以下の通りです。

:::note info
* Linuxのディレクトリ構造
* Linuxの基本的なコマンド
* viによるファイル編集
* TCP/IPの基礎
* パッケージ管理
:::
それぞれについて、さらに詳しく解説します。

## Linuxのディレクトリ構造
Linuxのディレクトリ構造は、Linuxを操作する上で必ず知っておくべき知識です。
ファイルの編集や操作をする際に、ディレクトリ構造を知っていないと、どのファイルを操作するのか分からなくなるからです。
また、パスの指定方法を理解していないと、後述するLinuxの基本コマンドも使いこなせないからです。

Linux初心者の方は、まずはLinuxのディレクトリ構造を理解しておきましょう。
### ディレクトリとパス
ディレクトリとは、フォルダのことでファイルなどが格納されています。
ディレクトリやファイルの場所を指し示す場合は、パスを使用します。
パスには、相対パスと絶対パスの2種類があります。
### ディレクトリはツリーの構造をしている
Linuxはルートと呼ばれる、ディレクトリを頂点として、さまざまなディレクトリが格納されております。
![スクリーンショット 2023-12-07 12.15.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3577925/f0160791-25f2-88fd-1090-183a48422cfa.png)

### 主要なディレクトリ
Linuxのディレクトには、以下のようなものがあります。主要なディレクトリだけご紹介します。
| ディレクトリ| 説明 |
|:-:|:-:|
| /bin| 基本的なコマンドを実行するためのバイナリファイルが格納されています。  |
| /etc | システム全体の設定ファイルが置かれています。 |
|/boot| システムが起動する際に必要なファイルが保存されています。|
|/dev|デバイスファイルが配置される場所です。システムがハードウェアと通信するために使います。|
|/home| システム上の各ユーザーのホームディレクトリが置かれています。|
|/var|変更可能なデータ（ログファイル、メール、プリントキューなど）が格納されます。|

例えば、ログファイルであれば、/var/log/に保存され、WebサーバーのApache2の設定は、/etc/apache2ディレクトリに保存されます。Linuxのディレクトリの第一階層の役割を覚えておくと、どこに何のファイルがあるのかが分かります。
## Linuxの基本的なコマンド
### Linuxの基本的なコマンド一覧
Linuxの基本的なコマンドは以下のようなものがあります。

:::note info
* **ls** ディレクトリの内容をリスト表示
* **cd** カレントディレクトリを変更
* **pwd** カレントディレクトリのフルパスを表示
* **cp** ファイルやディレクトリのコピーを作成
* **mv** ファイルやディレクトリを移動または名前を変更
* **rm** ファイルやディレクトリを削除
* **mkdir** 新しいディレクトリを作成
* **rmdir** 空のディレクトリを削除
* **touch** 新しい空のファイルを作成するか、既存のファイルのタイムスタンプを更新
* **chmod** ファイルまたはディレクトリのアクセス権を変更
* **chown** ファイルまたはディレクトリの所有者とグループを変更
* **grep** ファイル内のテキストを検索し、一致する行を表示
* **adduser** ユーザーの作成
* **passwd** パスワードの変更
* **sudo** root権限でコマンドを実行
:::
一部のコマンドの使い方を解説します。
### lsコマンド
lsコマンドは、ディレクトリの内容を一覧で表示するコマンドです。
```
ls [オプション] [ファイルやディレクトリ]
```
例えば、/etcディレクトリ配下のファイルを一覧で表示する場合は、以下のように実行します。
```
ls /etc
```
ディレクトリを指定しないで、コマンドを実行すると、カレントディレクトリ配下の情報を一覧表示します。
```
ls
```
また、"-l"オプションを使用すると、ファイルのパーミッションや作成日時など詳細情報も表示されます。
```
ls -l /etc
```
![スクリーンショット 2023-12-07 12.19.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3577925/32f26d55-111d-a757-b942-a61b9c9609aa.png)

### cdコマンド
cdコマンドは、カレントディレクトリを変更するコマンドです。カレントディレクトリとは、現在作業しているディレクトリのことです。
cdコマンドは、以下のように実行します。
```
cd [ディレクトリ]
```
例えば、カレントディレクトリを/etcディレクトリに変更したい場合は、以下のように実行します。
```
cd /etc
```
### pwdコマンド
pwdコマンドは、カレントディレクトリを表示することです。
例えば、カレントディレクトリが/etcの場合、pwdコマンドを実行すると、/etcと表示されます。
```
pwd
```
### cpコマンド
cpコマンドは、ファイルをコピーするコマンドです。
例えば、file1.txtをfile2.txtにコピーする場合は、以下のように実行します。
```
cp file1.txt file2.txt
```
### mvコマンド
mvコマンドは、ファイルやディレクトリを移動または名前を変更するコマンドです。
例えば、file1.txtを/dirディレクトリに移動させたい場合は、以下のように実行します。
```
mv file1.txt /dir
```
### rmコマンド
rmコマンドはファイルやディレクトリを削除するコマンドです。
例えば、file.txtを削除する場合は、以下のように実行します。
```
rm file.txt
```
### mkdirコマンド
mkdirコマンドはディレクトリを作成するためのコマンドです。
例えば、testdirディレクトリを作成する場合は、以下のように実行します。
```
mkdir testdir 
```
### rmdirコマンド
rmdirコマンドはディレクトリを削除するコマンドです。
例えば、testdirディレクトリを削除する場合は、以下のように実行します。
```
rmdir testdir
```
rmdirコマンドは、空のディレクトリしか削除できません。testdirディレクトリ配下にファイルやディレクトリが存在する場合、rmdirコマンドで削除するとエラーが発生します。そのような場合は、rmコマンドでディレクトリを削除します。
```
rm -r testdir
```

そのほかにもさまざまな基本的なコマンドがありますが、ほかのコマンドの解説については、こちらで実施しております。
→[コマンドを動かして実践的に学ぶInfraAcademy(インフラアカデミー)](https://engineer-ninaritai.com/infraacademy/)
## viによるファイル編集
Linux初心者が身につけておきたい知識の1つがviコマンドの使い方です。
**viとは、ファイルを編集するためのコマンドです。**
Linuxでファイルを編集するために使用します。高機能なツールのため、Linux初心者の方は使いこなすのに苦労すると思います。しかし、使いこなせるようになると、ファイルの編集の効率が格段に上がります。
### viコマンドの基本的な使い方
viコマンドでファイルを編集する場合は、以下のように実行します。
```
vi [ファイル名]
```
viコマンドを実行すると、ファイルの中身が表示されます。
viコマンドは、普通のメモ帳のように、文字を入力するだけでは、ファイルを編集することはできません。
コマンドモードと編集モードの2つの種類があり、ファイルを編集する場合は、編集モードに移行する必要があります。
### viコマンドのコマンドモード
viのコマンドモードには、以下のようなものがあります。

| コマンド | 説明 |
|---------|------|
| `:w`    | 現在のファイルを保存します。 |
| `:q`    | エディタを終了します。 |
| `:wq`   | 変更を保存してエディタを終了します。 |
| `:q!`   | 保存せずにエディタを強制終了します。 |
| `:x`    | 変更を保存してエディタを終了します。 |
| `dd`    | カーソルがある行を削除します。 |
| `yy`    | カーソルがある行をコピーします。 |
| `p`     | ヤンクされた内容をカーソルの後に貼り付けます。 |
| `u`     | 最後の操作を元に戻します。 |
| `Ctrl + r` | 元に戻した操作をやり直します。 |
| `/文字列` | 文字列を前方向に検索します。 |
| `?文字列` | 文字列を後方向に検索します。 |
| `n`     | 検索方向に沿って次の検索結果に移動します。 |

viコマンドを使いこなすためには、上記のコマンドを身につける必要があります。

## TCP/IPの知識

### TCP/IPとは？
TCP/IPはインターネットを構成する主要なプロトコル群です。
TCP（Transmission Control Protocol）は信頼性の高い接続指向の通信を、IP（Internet Protocol）はデータパケットのルーティングとアドレッシングを指します。
例えば、ネットワークで使われるIPアドレスやMACアドレスなどのプロトコルやWEBやDNSといったサーバーのプロトコルなどが当てはまります。
**Linux初心者から中級者にレベルアップするためには、TCP/IPのプロトコルの仕組みを理解する必要があります。**

### ポート番号 
TCP/IPでは、ポート番号を使用して特定のプロセスやサービスにデータを送信します。
よく知られたポートにはHTTP（80）、HTTPS（443）、FTP（21）などがあります。プロトコルとポート番号をセットで覚えておきましょう。
| プロトコル | ポート番号 | 説明 |
|------------|------------|------|
| HTTP       | 80         | Webサーバー用 |
| HTTPS      | 443        | Webサーバー用(暗号化) |
| FTP        | 20, 21     | ファイル転送用。ポート20はデータ転送、ポート21はコントロール（コマンド）用 |
| SSH        | 22         | リモートシステムへの安全なアクセスに使用|
| Telnet     | 23         | リモートログインサービス用。 |
| SMTP       | 25         | メールの送信に使用。 |
| DNS        | 53         | ドメイン名とIPアドレスの変換に使用。 |
| DHCP       | 67, 68     | IPアドレス等を自動で割り当て。ポート67はサーバー、ポート68はクライアント用。 |
| POP3       | 110        | メールの受信に使用。 |
| IMAP       | 143        | メールの受信に使用。 |


## パッケージ管理
Linuxのパッケージ管理とは、Linuxシステム上でソフトウェアパッケージのインストール、アップグレード、設定、削除を簡単かつ効率的に行うためのシステムです。
サーバー構築の際や、コマンドを追加したい時などに使用します。
パッケージ管理を理解することで、Linuxにさまざまな機能を追加することができます。Linux初心者から理解しておきたい内容です。
### なぜパッケージ管理が必要？
**そもそも、なぜパッケージ管理が必要なのでしょうか？**
パッケージとは、ソフトウェアの実行に必要なプログラムファイル、ライブラリ、設定ファイル、ドキュメントなどを1つにまとめたものです。
パッケージ管理を使うことで、これらのプログラムファイルやライブラリを一括でインストールや更新をすることができます。
パッケージ管理がないと、プログラムの設定ファイルを1つ1つダウンロードして、インストールするという面倒な作業が発生します。そのため、パッケージという1つの単位でソフトウェアを管理します。
### パッケージ管理のコマンド
パッケージ管理のコマンドは、Linuxのディストリビューション毎によって異なります。
例えば、Debianを使っている場合は、aptコマンドやdpkgコマンドを使用します。Red Hat系では、yumコマンドやrpmコマンドを使用します。
```
apt-get update //パッケージ情報の更新
apt-get install [パッケージ名] //パッケージのインストール
apt remove [パッケージ名] //パッケージの削除
```
```
yum update //パッケージ情報の更新
yum install [パッケージ名] //パッケージのインストール
yum remove [パッケージ名] //パッケージの削除
```
これらのコマンドの使い方を覚えて、パッケージのインストールなどの操作ができるようになりましょう！
## Linux初心者がLinuxを練習するためには？
**Linux初心者がLinuxを練習するためにはどうしたらいいのでしょうか？**
VirtualBoxを使って環境構築するのは、面倒に感じるでしょう。そこで、InfraAcademyというサービスのご紹介です。(宣伝です笑)
InfraAcademyでは、シミュレーターを使ってLinuxの内容をハンズオン形式で学習することができます。もちろん、今回紹介した上記の内容は全て身につけることができます。さらに、サーバー構築や応用的な内容も学習することができます。
一部は無料で使えるので、ご興味ある方はぜひ使ってみてください！
→[コマンドを動かして実践的に学ぶInfraAcademy(インフラアカデミー)](https://engineer-ninaritai.com/infraacademy/)

https://qiita.com/ryu235464345/items/54b29c56dd118d8ae4a0

https://qiita.com/ryu235464345/items/bb5c447c600c8aa08992