Linux研修テキストまとめ

# 1\.Linuxとオープンソース
**OSとは**
OS：ハードウェアとアプリの仲介役（ハードの違いを中和してくれる為、アプリが作成しやすい）

**Linuxとは**
システムを動かす為の基盤
<ol>
Linuxの特徴
<li>(UNIXで出来る事は大体出来る、逆も同様)</li>
<li>無償</li>
<li>自由度高い</li>
</ol>
<br>

Linuxを使って組まれたシステムを**Linuxディストリビューション**という。

<details><summary>代表例</summary>

**Red Had系ディストリビューション**
Red Hat Linux（現在はRed Hat Enterprise Linux）がベースに開発されたもの

**Debian系ディストリビューション**
フリーソフトウェアだけを採⽤する無償ディストリビューション（Ubuntu等）

**その他ディストリビューション**
代表的な例：SlackwareやopenSUSE
</details>
<br>

**オープンソースとは**
ソースコード（開発に必要な言語）を公開していて、自由に誰でも開発を進めれるスタイルのこと






# 2\.Linuxの基本操作
ユーザーインターフェースには$\color{red}{\rm CUI}$と$\color{blue}{\rm GUI}$がある。Linuxでは基本$\color{red}{\rm CUI}$を使用
<ul>
<li>$\color{red}{\rm CUIとは}$</li>文字情報で操作
<li>$\color{blue}{\rm GUIとは}$</li>
マウスを使用してアイコンやメニュー等で操作　　（使用例：x window system） 
</ul>

Linuxの使用は**ユーザー**と**パスワード**が必須

:::note info
管理者用の[rootユーザー]とそれ以外の[一般ユーザー]がある
:::

<details><summary>オンラインマニュアルに関して</summary>

man　：　オンラインマニュアル確認(ファイル：/usr/share/man)　　　終了：q
<ol>マニュアルページのセクション番号（用途）

<li>⼀般ユーザのコマンド</li>
<li>システムコール (カーネルが提供する関数)</li>
<li>ライブラリー呼び出し (プログラムライブラリーに含まれる関数)</li>
<li>デバイスファイル</li>
<li>設定ファイルの書式</li>
<li>ゲーム</li>
<li>その他</li>
<li>システム管理コマンド</li>
<li>Linux独⾃のカーネル⽤ドキュメント</li>
</ol>
</details>

<details><summary>コマンド一覧</summary>
<b>su -</b>　　　一般  →  root

<b>exit</b>　　　　root  →  一般

<b>cal</b>　　　　カレンダー

<b>whatis</b>　　　セクションの確認

<b>--help</b>　　　軽く使い方を確認

<ul>
<li>shutdown [オプション] 時間</li>
　　<ul><li>-r：再起動</li> 
　　<li>-h：シャットダウン</li> 
　　<li>-c：シャットダウンをキャンセル</li>
</ul><br>
⇒【時間】　now：今　  　+(数字)：何分後　  　(数字：数字)：何時何分
</ul>
</details>






# 3\.ファイルとディレクトリ
**【　ファイルとは　】**
通常ファイル、ディレクトリ、リンクファイル、特殊ファイル　４つがある。

:::note warn
ファイル名には、「＊」「！」「? 」等を含んではいけない
:::

<ul><li>
ls [オプション] [ファイル名 または ディレクトリ名]　ファイル一覧
<ul><li>-l　　ファイルやディレクトリの属性や詳細情報などを表⽰</li>
  <li>-a　　隠しファイルを含めて表⽰</li>
  <li>-R　　ディレクトリ内に存在するディレクトリの中⾝も表⽰</li>
</li></ul>

### ディレクトリ(フォルダ)について
ルートディレクトリ：ディレクトリの頂点
相対カレント、絶対ルート

:::note info
ユーザーことに「／home／ユーザー名」というホームディレクトリが割り当てられる
:::
【コマンド】
**cd [オプション] [移動先ディレクトリ]**　　カレントディレクトリの移動

**cat [ファイル名]**　テキストファイルの内容表示

### ハードリンクとシンボリックリンク
**iノード**　　ファイルやディレクトリの番号

**ハードリンク**　　1つのiノードに複数のファイル名を設定　　ln：作成コマンド

**シンボリックリンク**　　別iノードを設定　　　　　　　　　ln -s：作成コマンド

:::note info
イメージ
iノード(部屋 (データ) に入る為のドア)
ハード(１つのドアに複数のドアノブ (ファイル名) を作成)
シンボ(ドアノブが１つしか付けれない新しいドアを作成)
:::





# 4\.ファイル管理
cp [オプション]　元名　新名　　ファイルコピー
<details><summary>$\color{blue}{オプション}$</summary>
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

　**-p**　　属性ごと</li>

　**-i**　　上書き確認</li>

　**-R**	　ディレクトリを配下ごと</li>

　**-d**　　シンボリックリンクのままコピー</li>

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
</details>
mv [オプション] 元名　新名　　ファイル移動
<details><summary>$\color{blue}{オプション}$</summary>
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

　**-t**　　元ファイルを全て移動

　**-i**　　上書き確認

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
</details>
rm [オプション] ファイル名　　ファイル削除
<details><summary>$\color{blue}{オプション}$</summary>
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

　**-f**　削除確認なし

　**-i**　削除確認あり

　**-r**　ディレクトリ削除時付与

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
</details>

**mkdir**　　                   　　　　　　　　　　ディレクトリ作成

　-p 　　同名があれば作成せず、無ければ作成
　　　　$\color{red}{※他は大体ファイル操作コマンド同様}$

### ファイル・ディレクトリの圧縮と展開
【コマンド一覧】
<b>gzip [オプション] ファイル名　</b>　　　ファイル圧縮<br>
<b>zip [-r] 圧縮ファイル名 ファイル名orディレクトリ名</b>  　　　　
　　　　　ファイル圧縮＋名前変更<br>

<b>gunzip 圧縮ファイル名</b>　　解凍</b><br>
<b>unzip 圧縮ファイル名</b>　　 解凍、圧縮ファイルは削除されない<br>
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
### アーカイブ作成
<b>tar ()vf アーカイブファイル名 対象ディレクトリ名　</b>
**()** には【c作成　x展開　v詳細　fアーカイブファイル指定　j圧縮(bzip2)　J圧縮(xz)　z圧縮(gzip)】
<br>
拡張⼦「.tgz」は、tarコマンドで作成されたアーカイブファイルをgzip形式で圧縮させたもの






# 5\. ユーザとグループ
**UID（ユーザーID）**
・⼀般ユーザー　    　　100以上
・システムユーザー  　1~99
・rootユーザー　　　　0

:::note info
**sudo**　コマンド　：コマンド作動に一時的にrootの権限が使える　
     　　　※求められるパスワードは元ユーザーのパスワードを入力
:::

**グループ**　  　　　※ユーザーはグループに所属必須、複数所属OK。
・プライマリグループ、それ以外サブ
＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝
<details><summary><b>【コマンド一覧】</summary>

**groups [ユーザー名]**　　所属グループ情報
**id　[ユーザー名]**　　　所属グループ情報

**useradd [オプション][ユーザー名]**　作成


<br>
<ul><li>passwd [オプション][ユーザー名]</li>
<details><summary>オプション</summary>
<ul><li>-d	　　無効</li>
　　<li>-i 日数	　　有効期限が切れてから使用不可になるまでの日数を設定</li>
　　<li>-l	　　アカウントロック</li>
　　<li>-u	　　ロック解除</li>
　　<li>-w 日数	　　　有効期限が切れる何日前から警告を表示するかを設定</li>
　　<li>-x 日数	　　　有効日数を設定</li>
   </ul>
</ul>
</details>

<b>usermod [オプション] [ユーザー名]　　　ユーザー情報を変更

-c コメント　　$コメント変更$
-d ホームディレクトリのパス	　　$ホームディレクトリ変更$
-g グループID	　　$主グループ変更$
-G グループID	　　$サブグループ変更　複数指定可能$
-l [新ユーザー名]	　　$ユーザー名変更$
-s シェルのパス	　　$ログインシェル変更$
-aG　　　　　　　$グループ追加$

<b>userdel [オプション] [ユーザー名]　　　ユーザーを削除する

　-r　　　$ホームディレクトリ毎ユーザーを削除する$


<b>groupadd [オプション][グループ名]　　　グループを作成

　-g グループID　　 $指定したグループIDでグループ作成$
<br>
<b>groupmod [オプション] [グループ名]　　　グループ情報変更

　-g グループID	　　$変更後グループIDを指定$
　-n グループ名	　　$変更後グループ名を指定$
　-o グループID	　　$既に存在するグループIDへの変更$
　　

<b>groupdel [グループ名]	　　グループ削除







# 6\.パーミッション
:::note info
ファイルやディレクトリ
所有者(u)・グループ(g)。その他(o)、この3つに対してアクセス権限を設定
:::

<b>chown [オプション] 所有者名 ファイル名またはディレクトリ名　　所有者変更</b>

<b>chgrp 　　所有グループの変更</b>　
　　　-R　$指定したディレクトリとその中にあるファイルすべての所有グループ変更$

<b>chown [オプション] グループ名 ファイル名またはディレクトリ名</b>

:::note info
パーミッション：所有者や所有グループごとのアクセス権
:::

（例）$\color{red}{\rm d}$$\color{blue}{\rm rwx}$$\color{green}{\rm rw-}$$\color{	Orange}{\rm r-x}$
　$\color{red}{\rm d}$:ディレクトリ("誰"を表す) 　　　　　$\color{blue}{\rm rwx}$:所有者の権限 
　$\color{green}{\rm rw-}$:所有グループの権限 　　　　　　$\color{Orange}{\rm r-x}$:その他の権限

**権限付与方法**
　　　誰：　a全て　　u所有者　　gグループ　　oその他
　　　動作：　＋追加　　ー削除　　＝設定
　　　権限：　w書き込み　　r読み取り　　x実行
・もしくは２進数で表現　※上記の例だと 765







# 7\.テキストファイルの編集

---コマンドモード---
**Esc**　コマンドモード 
**x1**　　　削除
**dd**　　　1行削除　
**yy**　　　1行コピー
**p**　　　　貼り付け
**o**　　　　次の行から入力モード
**a**　　　カーソルの次の文字から入力モード
**gg**　　　ファイルの最初へ
**G**　　　　ファイルの最後へ
**$**　　　行の最後へ
**^**　　　　行の最初へ
**d$**　　　カーソルから行の最後までを削除
**d^**　　　カーソルから行の先頭までを削除
**dG**　　　カーソルからファイルの最後までを削除
**dgg**　　　カーソルから最後の行まで削除
**:set nu**　　行番号の表示
**「行番号」 G**　　行番号へ移動
<br>
**: w** 　　保存　（後ろに**ファイル名**を加えるとそのファイルに保存）
**: q** 　　viコマンド終了
**: wq** 　　保存して終了
**: q！** 　保存せず、強制的に終了






# 8\. シェルについて
**シェル**・・・コマンド実行→結果を表⽰しているプログラム

<br>

<b>リダイレクト</b>
コマンドの標準出⼒を端末画⾯ではなく、任意のファイルに切り替える
　**[ コマンド **>** ファイル名 ]**
ファイルの末尾に追記したい場合は、「**>>**」

**パイプ**　　
コマンドの実⾏結果を別のコマンドで処理できる
　**[　コマンド | コマンド　]**

**メタキャラクタ** 



**history**　コマンド履歴

**エイリアス**　コマンドのあだ名
<b>[alias　【付与名】=　"【コマンド】"]</b>　　 あだ名決定

:::note info
※エイリアス永続化方法（bashの設定ファイルに書き込む）
1⃣vi ~/.bashrc
2⃣ファイル内で、新しいエイリアスを追加
3⃣source ~/.bashrc
:::


<b>unalias [別名]　エイリアス解除　
　　ll：$さっき作ったエイリアス解除　$
　　-a：$全て$

**シェル変数**　　1つのシェル内だけで使える変数


**環境変数**：設定したシェルと、 シェル上で起動したシェルや実⾏したコマンドでも使える変数

**シェルスクリプト**：一連のコマンドをまとめた１つのファイル
　⇒viにてファイル内で[#!/bin/bash]入力して設定
<br>
【コマンド】
<b>printenv</b>　$環境変数を表⽰$
<b>set</b>　　　$設定されているシェル変数と環境変数をすべて表⽰$






# 9\.シェルスクリプト
⼀連のコマンド操作を⾃動化

<b>bash シェルスクリプトファイル名</b>　　実行
<b>source シェルスクリプトファイル名</b>　シェル変数をシェルスクリプト内で参照できる点

:::note info
シェルスクリプトにも引数を指定可能
:::






# 10\. ファイルの操作
<b>find パス 検索条件 アクション</b>　　通常の検索
<b>find / -name "<ファイル名>"</b>　　名前指定　※ワイルドカードを使用しざっくり検索OK
<details><summary>オプション</summary>

　　-d　　　　$ディレクトリのみ$　 　
　　-f　　　　$ファイルのみ$　　
　　-size　　$サイズ指定$
　　-perm　　$パーティション指定$　　
　　-user　　$ユーザー指定$
    　　-(a,c,m)(min,time)　　
組み合わせて　　a最終アクセス時刻　c最終ステータス　m最終変更時刻　min分単位　time日単位

＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝
</details>

<b>locate</b>　　　高速検索
例）locate *.txt　


<b>grep［オプション］ ＜検索パターン＞ ＜ファイル名＞</b>　テキストファイルの内容表示
　　-n　$(マッチした行の行番号を表示)$
　　-i　$(大文字小文字区別なし)$
　　-V　$(マッチしなかった行を表示)$
　　-E　$(拡張正規表現)$
<br>
<b>メタ文字</b>
　.　　　　　　　任意の1文字
　\　　　　　　　メタ文字効果打ち消し
　[文字]　　　　文字指定　(文字の前に^を入れるとその文字以外をマッチ)
　文字 - 文字 　　例：a-k, a-zA-Z　等
　文字$　　　　　指定した文字が行末に来る文字列のみ検索

　+　　　　　　直前の⽂字の1回以上の繰り返し（拡張表現）
　?　　　　　　直前の⽂字の0回または1回の繰り返し（拡張表現）
　＾　　　　　　行の先頭が○○






# 11\. ソフトウェアとパッケージ
**パッケージ** 　ソフトウェア動作の為に必要なファイルをまとめたもの
**パッケージ管理システム**　　パッケージの依存関係を管理するシステム

:::note info
RPMパッケージ、debパッケージなどがある
:::

**rpm オプション**　　　$\color{red}{\rm RPMパッケージを管理}$

　-ivh 　　指定したパッケージをインストール
　-Uvh 　　指定したパッケージをアップグレード
　-e 　　　指定したパッケージをアンインストール
　-q 　　　指定したパッケージがインストールされているか確認
　-qa 　　インストール済みパッケージを⼀覧表⽰
　-qi 　　指定したパッケージの説明を表⽰

**yum サブコマンド**　　$\color{blue}{\rm パッケージの管理}$

　update 　　システム全体をアップデート
　　　　　　　　　（パッケージ名を後ろに付けると指定した１つをアップデート）
　install 　　インストール
　remove 　　アンインストール
　list 　　　パッケージを⼀覧表⽰（未インストールも含む）
　info 　　　パッケージ名
　search 　　指定したキーワードでパッケージを検索

 




# 12\.ファイルシステム

外部記憶装置のデータをファイルとして管理する仕組み

**デバイスファイル**　デバイスを表すファイルのこと(/devディレクトリ以下に配置)

:::note info
主なデバイスファイル
/dev　　/sda　等
:::

### パーティーションの作成
1台のハードディスク=４つのパーティション(領域)を**基本パーティション**

:::note warn
基本パーティションの内１つを**拡張パーティション**に変更可能
:::

<b>fdisk デバイスファイル名</b>　　　デバイスファイル作成
　　$\color{red}{\rm ※パーティションだけではその中にファイルを保存出来ない。}$

<b>mkfs [-t ファイルシステム] デバイスファイル名</b>　　ファイルシステム作成
<br>
**マウント**
マウント：ディレクトリツリーに他のファイルシステムを接続すること
マウントポイント：デバイスを接続するディレクトリのこと
<br>
<b>mount デバイスファイル マウントポイント</b>　　マウント実⾏<br>

:::note alert

<b>FHS （ファイルシステム階層標準)</b>とは、ディレクトリやファイルの配置の規定

:::
<details><summary>FHSで規定されているディレクトリの配置</summary>

**bin**　　　システムに必須のコマンド
**boot**　　起動関連
**dev**　　デバイスファイル　　
**home**　　ホームディレクトリ
**lib**　　　共有ライブラリ
**root** 　　rootのホーム

</details>






# 13\.プロセスとジョブ
<b>ps [オプション]</b>　　プロセス情報確認
　a 　　$他のユーザーのプロセスも$
　u 　　$ユーザ名$
　x 　　$端末から実⾏されたものではないプロセス（サーバプロセス）も$

:::note info

表示例「PIO TTY TIME CMD　　　　　　　　　PID　　： ID
　　　　19262 ttyl 00: 00: 00 bash　　　　　　TTY　　： 実⾏した端末名
　　　　19325 ttyl 00: 00: 00 ps　　」　　　　TIME　： 実⾏時間
　　　　　　　　　　　　　　　　　　　　　CMD　： 実⾏コマンド
:::

<b>top</b>　　実行状況モニタリング

**シグナル**・・・プロセスへの命令
　9　　　KILL 　　　強制終了　※使用するのはTERMが有効で無かった時のみ
　15 　　TERM 　　 終了
　18 　　CONT 　　 再開
　19 　　STOP 　　 ⼀時停⽌
【シグナルを送信するkillコマンド】
<b>$ kill - [シグID] プロID
<b>$ kill -s [シグID] プロID</b>

（例1）kill 28000 　（例2） kill -15 28000　（例3）　kill -s TERM 28000

:::note info
kill シグIDを入力しない場合TERMが命令される
:::




### ジョブの管理
$\color{red}{\rm フォアグラウンドジョブ}$と$\color{blue}{バックグラウンドジョブ}$

実行すると終了するまで他のジョブは行えない：$\color{red}{\rm フォアグラウンドジョブ}$での実行状態
コマンドラインの末尾に「&」を付けると$\color{blue}{バックグラウンドジョブ}$で実行可能

<b>jobs</b>　実行中のジョブ確認

<b>fg [%ジョブID ]</b>　　$\color{red}{\rm フォアグラウンドジョブ}$実行
<b>bg [%ジョブID ]</b>　　$\color{blue}{バックグラウンドジョブ}$実行







# 14\.ネットワークの利⽤

**プロトコル**：通信関連のルール

:::note info
**TCP**：高信頼性、パケット(分割されたデータ)が届いたかを確認する
**IP**：32ビットがIPv4、128ビットがIPv6
**UDP**：TCPのパケット確認を行わない版、その分早い
**ICMP**：エラーやメッセージなどを伝送するプロトコル
:::

IPアドレス：ネットワーク部()とホスト部がある　
サブネットマスク：IPアドレスを2進数で表現したもの
　例）$\color{red}{\rm 192.172.}$$\color{blue}{\rm 46.45}$$\color{green}{\rm /16}$　
　　$\color{red}{\rm 192.172.}$がネットワーク部、$\color{blue}{\rm 46.45}$がホスト部、$\color{green}{\rm /16}$がネットワーク部がどこまでかを表す



**ネットワークセグメント**：同じネットワーク部のIPアドレスは1つのネットワークに属している。
　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　その範囲のこと。
**ネットワークアドレス**：先頭のIPアドレス

**ブロードキャストアドレス**：末尾のIPアドレス

**クラス**：IPアドレスを分類したもの、Aが0~127、Bが128~191、Cが192~223　

**グローバルIPアドレス**：インターネットに直接接続するIPアドレス

**プライベートIPアドレス**：インターネットに直接接続するわけではないIPアドレス
<br>
**ポート番号**：送信元や送信先のアプリケーションを識別するための番号
25　　 メール送信
80　　 HTTP
110　　メール受信
443　　HTTPS

#### 主な設定ファイル
/etc/hostname　ファイルのホスト名設定
/etc/hosts
/etc/resolv.conf
<br>
【コマンド】
<b>ifconfig [ネットワークインタフェース名】</b>　　　　　ネットワークインターフェース情報

<b>ss [オプション]　</b>　開いているポートを表示
　-a 　　$すべてのソケット (接続) 情報を表⽰$
　-1 　　$サーバが開いているポートを表⽰$
　-t　　 $TCPポートのみ表示$

<b>host ホスト名または IPアドレス</b>　　　対応するIPアドレスを確認







# 15\.システムの管理
【コマンド】
<b>last</b>　　最近ログインしたユーザー
<b>who</b>　　ログイン中のユーザー
<b>w</b>　　　ログイン中のユーザーと実行中のコマンド、システム情報