【社内勉強会】10分でわかる！Linux入門編その1 ～Linux標準教科書より～

# はじめに
こんにちは！
今年の4月に新卒で入社しました！[AXLBIT株式会社](https://axlbit.com/)ソリューション部の@ax-asadaです。

2024年 6月7日・7月5日に行われた社内勉強会で発表した内容をアウトプットもかねて書かせていただきます！

内容は研修期間中に読んだLinux標準教科書をざっくり説明しようかなと思います。
（Linux標準教科書はLinux技術者認定を行う機関のLinuCが提供するLinux初心者向けの教科書です）

ざっくり説明しすぎているので、気になる方はぜひ教科書を読んでみてください！

## 目次
<dl>
<dd>1. Linuxとは何か</dd>
<dd>2. 基本コマンド紹介</dd>
<dd>3. 管理者のできること</dd>
<dd>4. おわりに</dd>
</dl>

## 1. Linuxとは何か
### Linuxとは
そもそもLinuxって何？という方に向けて説明すると、

Linuxは<strong>オープンソースのOS</strong>です。

オープンソースのOSとは、世界中にソースが公開されているOSのことです。（そのまんまですね。）
現在も多くのディストリビューター（Linuxと他のOS部品を組み合わせてOSの形にし、配布する人）によって開発されています。

また、サーバOSの始祖ともいわれるUNIXから派生した、UNIX系OSの一つです。

### Linuxの特徴
OSとしてのLinuxの特徴は大きく分けて3つあります。
<dl>
<dd>・カーネル</dd>
<dd>・ユーザランド</dd>
<dd>・シェル</dd>
</dl>

<strong>カーネル：</strong>
ハードウェア制御（メモリやハードディスク）、ソフトウェア実行、リソース管理（プロセス管理）を行う部分。
ハードウェアに直接アクセスする部分で、Linuxの中核。

<strong>ユーザランド：</strong>
OSのうち、カーネル以外の部分のことで、ユーザが権限を持って操作する部分のこと。

<strong>シェル：</strong>
UNIX系OSで使用されるコマンドインタプリタ。
カーネルとユーザをつないでいる。
ユーザからのコマンドをカーネルにがわかるように実行。
その処理結果をユーザのターミナルに返す。

### ディストリビューションについて
Linuxにはディストリビューションというものがあるのですが、ディストリビューションとは何かというと、

<strong>カーネルとその他のソフトウェアを最初から組み合わせたもの</strong>です。

どういうことかというと
まず、先ほど説明した、「カーネル」だけでOSを利用するのは難しいです。
一般的なLinuxOSの形にするにはカーネルとソフトウェアを組み合わせる必要があります。
そこで、カーネルとその他のソフトウェアを組み合わせる煩雑さを解放するために最初から組み合わせた形で配布される、

これがディストリビューションです。
（RedhatやUbuntuなどがありますね）

## 2. 基本コマンド紹介
ここではLinuxで用いられる基本的なコマンドについて紹介します。
実際に使うときのオプションなどについては割愛します。
（実際、コマンドは覚えていなくても、Linuxで何ができるかを覚えるほうが大事だと思います。）

### ファイル、ディレクトリ操作
- 一覧表示
```shell:
ls ディレクトリ
```
- コピー
```shell:
cp コピー元 コピー先
```
- ファイル・ディレクトリの移動、名前の変更
```shell:
mv ファイルまたはディレクトリ
```
- ファイル・ディレクトリの削除
```shell:
rm　ファイルまたはディレクトリ
```

### ディレクトリ操作
- 現在のディレクトリの表示
```shell:
pwd
```
- ディレクトリに移動
```shell:
cd ディレクトリ
```
- ディレクトリの作成
```shell:
mkdir ディレクトリ
```

### ファイル操作
- ファイルの内容表示
```shell:
cat ファイル
```
- ページャによる内容表示
ページャとしてファイルを1ページずつ見ることができる。
```shell:
less ファイル
```
※/検索したい文字列 でファイル内の文字を検索できます。nで次の検索ワードを検索します。qでlessのページャを終了します。
- ファイルの場所の検索
```shell:
find パス -name ファイル名
```
- 空ファイル作成
```shell:
touch ファイル
```
※touchはタイムスタンプの更新なども行えます。
- ファイルの先頭/終わりの行を出力
```shell:
head ファイル  #先頭
tail ファイル  #終わり
```
※tail -fでリアルタイムに表示します。（ログファイルなど、変更をリアルタイムで見たいときに使われます。）
- 変更の有無を調べる（差分確認）
```shell:
diff ファイル１ ファイル２
```

### その他
- \| （パイプ）
前コマンドの標準出力を標準入力として実行します。
```shell:
コマンド | コマンド
（例）ls -la /user/bin | less
```
- \>（リダイレクト）
コマンドの標準出力をファイルに書き込みます。
```shell:
コマンド > ファイル   #上書きしない
コマンド >> ファイル  #上書きする（追記する）
```
※ファイルの内容に追記したい場合は「\>>」を利用することで前の内容を消さずに上書きで書き込んでくれます。 
- コマンドのオンラインマニュアル取得
コマンドについて知りたかったらとりあえずコレ
```shell:
man コマンド
```
- 文字列抽出
```shell:
grep 検索条件
```
※正直grepはめっちゃ使うのと、使い方に正規表現を用いることもあるので自分で調べたほうがいいです。

## 3. 管理者権限について
続いてLinuxで大事な管理者について紹介していこうと思います。
管理者の権限はLinuxではとても大事な要素なので知っておくといいかもです。

### ユーザ・グループ管理
まず前提としてLinuxを利用するには必ずいずれかのユーザにログインする必要があります。
（rootユーザか一般ユーザ）

また、LinuxはマルチユーザOSと呼ばれていて1台で動作しているLinuxのシステムを、複数のユーザーが同時に利用できます。

Linuxに存在するユーザは以下の3つです。
<dl>
<dd>・rootユーザ</dd>
<dd>・一般ユーザ</dd>
<dd>・システムユーザ</dd>
</dl>

<strong>rootユーザ：</strong>
Linuxの管理者権限をもつユーザのこと。
サービスの起動・停止、ソフトウェアのインストールやアンインストールなど、運用全般に対しての操作が可能なユーザ。

<strong>一般ユーザ：</strong>
ユーザごとのホームディレクトリが与えられて、rootユーザに比べて権限が限定されるユーザ。

<strong>システムユーザ：</strong>
アプリケーション等のサービス用に作成されるユーザのこと。
MySQL用のmysqlユーザなど。

### ユーザ・グループ管理の注意点
サーバ運用でよく聞く運用保守について考えると、
rootユーザで実行することとはどういうことかを知っておく必要があります。

<strong>rootユーザでログインする時の注意点</strong>
- 設定変更について：
管理者の権限で様々な設定変更を行えるということは、例えば間違った設定をしてターミナルを終了した場合に、作業ができなくなってしまう可能性があるということです。
なので、設定を変更する際には慎重になろう！ということ。
- ログイン履歴について：
またLinuxにはユーザのコマンド履歴が残るのですが、rootユーザでログインすると全てrootユーザで表示されてしまいます。
これは問題が発生したときに誰がそれを行ったのかわかりずらいです。
なので、一般ユーザでログインしてから後述する su や sudo を利用するのがいいと思います。

### su、sudoコマンドについて
su、sudo（すーどぅー）はユーザの変更、管理者権限で実行するときに使われるコマンドです。

- ユーザ変更
そのユーザになる。rootユーザが一般ユーザになったり、一般ユーザがrootユーザになることができる。
```shell:
su - ユーザ名
su -  #rootユーザに変更
```
※一般ユーザでログインしてrootユーザになれば、一般ユーザのログイン履歴が残るので、誰がrootとなって操作していたかが明確になる。

- root権限でコマンド実行
そのユーザがroot権限が必要なコマンドをコマンド単位で利用できるもの。
```shell:
sudo コマンド
```
※コマンドの実行をあとから確認できるメリットがある。

suとsudoを使って安全に利用できるようにするといいと思います。

## 4. おわりに
Linux標準教科書について、Linuxとは何か、コマンド、ユーザ管理などについてざっくり説明させていただきました。

10分でざっくり説明しようかと思ったのですが、やっぱりボリュームが多くて紹介しきれませんでした泣。（全然10分じゃない。）
次回、「10分でわかる！Linux入門編その2」を執筆させていただこうかと思います。（ネットワーク管理とかプロセス管理など）
よろしくお願いします。

※初心者の書いた記事なので指摘事項などあればよろしくお願いいたします。
## 資料
※Linux標準教科書は無料で公開されています：
[ダウンロード](https://linuc.org/textbooks/linux/)