Linuxを基本からまとめてみた【基礎〜応用】

## Linuxとは何か？

- 業務用PCに向いた基本ソフトウェア(OS)のこと

## 主要なディストリビューション

※ Linuxディストリビューションは、Linuxカーネルとその他ソフトウェア群を1つにまとめ、利用者が容易にインストール・利用できるようにしたもの

- debian, ubuntu
- redhat, fedora, CentOs, Amazon Linux2

## Linuxシステムにおける抽象化のレベルとレイヤー

```
User Proccesses

『Graphical User Interfoce』 『Servers』 『Shell』
```
```
Linux Kernel

『System Calls』 『Process Management』 『Memory Management』 
『Device Drivers』
```
```
Handware

『Processor(CPU) 』 『Main Memory(RAM)』 『Disks』
『Network Ports』
```
## Linuxシステムにおけるユーザーとは？

- プロセスを実行したりファイルを所有したりすることができる独立した存在

## シェルとは？

- シェルとは、ユーザーがLinuxシステムを操作するための窓口で、操作を簡単にするための便利なツール
- bash, ksh, cshなどがあるが、bashシェルはほとんどのLinuxですデストリビューションのデフォルトのシェル

## コマンド

[Linuxを基本からまとめてみた【基本的なコマンド15選】](https://qiita.com/kanfutrooper/items/c6be0316dd76b2f88841)

## ディレクトリとは？

- ディレクトリとは、ファイルをまとめて保存するための場所
- 頂点に、/ディレクトリがあり、ここからフォルダやファイルなどの場所を表す

## ディレクトリ(絶対パスと相対パス)

- パスとは、ファイルやディレクトリの場所を示すための指定方法
- 絶対パスとは、ファイルやディレクトリの場所をルートディレクトリから辿っていく完全なパスのこと
- 相対パスとは、相対パスとは、現在の場所からファイルを指すためのパスのこと

## AWSのCloudShellでLinux環境を触る

①CloudShellを起動する

②ファイルを作成する

```
$ touch a.1 b.a c.a ts.sh test1.txt 
```
※ ＊を使うと特定の条件のファイル名やディレクトリ名にマッチさせることができる

```
//sample

$ ls -l[ab]*   ※ ファイル名がaかb、その後に任意の文字列、aから始まるものとbから始まるものその後は何でも良いという指定の仕方

$ ls -l　*.1   ※ 終わりは.1 
$ ls -l[a-c]*  ※ 先頭がaからc
$ ls -l[^ab]*  ※　先頭ab以外　  
```

## パーミッションとは？

- どの種類のオーナーがこのファイルに対して何ができるか？

```
-rwxr-xr-x
-rwx所有者r-x同グループr-xその他

r・・・Read 読み取り権限
w・・・Write 書き込み権限
x・・・Execute 実行権限
-・・・権限なし
```
```
// ファイルやディレクトリのパーミッションを変更する
$ chmod 400(権限の数字を3桁で指定) ファイル名

//スーパーユーザ(ルートユーザー)への切り替え
$ cat /etc/shadow 

$ sudo cat /etc/shadow　　※ sudoコマンドは、『スーパーユーザーとして実行』という指定

//現在のユーザーアカウントからrootユーザーに切り替えられる
$ sudo su -
// 元に戻す
# exit
```
## sshとは？
- ネットワークを介してPCに安全に接続し操作するためのツール(プロトコル通信方式)

## EC2インスタンスを構築

① AWS ⇨　サービスでEC2を検索し、『EC2』⇨　『インスタンス』⇨『インスタンスを起動』

② 名前を入力 ⇨ 『インスタンスタイプ』※無料枠のt2.microを選択する　⇨ 
『キーペア作成』　⇨ 『キーペア名を入力する』⇨『キーペアを作成』

③ネットワーク設定（VPC）とストレージを設定はデフォルトのまま ⇨ 『インスタンスを起動』

④成功の表示 ⇨『全てのインスタンスを表示』

⑤作成したServerを選択 ⇨ 詳細 ⇨ パブリックIPv4のアドレスをコピーする

## MacからのEC2接続

## WindowsからのEC2接続

※ TeraTermというソフトを使いログインする

① 『窓の森』からTeraterm Ver.5系統をダウンロードする

②　デフォルトでインストールする

③ TeraTerm新しい接続　TCP/IP ホスト(T):にパブリックIPv4のアドレスをコピーを入力する ⇨ 『続行』⇨ SSH認証　ユーザ名: ec2-user  RSA/DSA/ECDSA/ED2551鍵を使う　秘密鍵を選択
『...』⇨ ダウンロードフォルダ　⇨ 使用する鍵を指定する　⇨ 『OK』

## TeraTermの設定

(1)文字のサイズ変更

①上部メニュー：設定タグ ⇨ フォント

(2)ログ取得機能

①上部メニュー：ファイル ⇨ ログ ⇨ 『...』⇨ デスクトップ ⇨ 『OK』
※ ログの中断:停止　ログの再生:再開
```
//ユーザー情報を出力
$ id
```
## EC2インスタンスの削除方法

- 終了する場合、『インスタンスを選択』⇨『インスタンスの状態』⇨『インスタンスの終了』
- 削除する場合、『インスタンスを選択』⇨『インスタンスの状態』⇨『インスタンスの終了』⇨『削除』

## ドットファイルの説明

```
ls -a
ls -l .*
```
.ssh など隠しファイルが表示される

## リダイレクション記号とバイブ記号

```
>   ※ > 記号１だと出力結果の内容をファイルに上書きする
>>  ※ >> 記号2だと最後に追記する
```
```
|  ※ コマンドの実行結果を次のコマンドに渡す役割
```
## シェル変数と環境変数

- シェル変数とは、現在実行しているシェルの中だけで有効な変数
- 環境変数とは、新たなシェルを起動したり、コマンドを実行した場合にも継承される変数

## PATHとは？

- PATHとは、コマンドの実行ファイルを探すためのディレクトリのリストを保持する環境変数
※ コマンドを実行する際、シェルはまずPATHに登録されたディレクトリから実行ファイルを探す

- PATHを通すとは目的の実行ファイルをコマンドとしてLinuxのシェルに認識させるためにシェル変数や環境変数に実行ファイル保管場所のディレクトリを追加すること

- 『ls』というバイナリファイル(機械が読みやすい形式)がしかるべきディレクトリに保存されいる

## Linuxの終了コード

```
echo $?
```

## 特殊文字（シングルクォート,バッククォート,ダブルクォート,）とチルダ

```
~ 　※ 場所を表す:ログイン中のユーザーのhomeディレクトリ
```
```
'(シングルクォーテーション)' ※ 文字列を区切るために使用される特殊文字

`(バッククォーテーション)`　※ コマンドの出力結果を文字列として取得するために使用される特殊な記号

"(ダブルクォーテーション)" ※ 文字列を区切るために使用される特殊な記号
```
## テキスト編集viテクニックとnano基礎

(1) vi とは?
- vi とは、LinuxをはじめとするUnix系OSで標準的に搭載されているテキストエディタ

(2) vi の基本的な使い方

①vi コマンドでファイルを起動: vi ファイル名 とコマンドを実行して、ファイルを編集

②コマンドモードと入力モードの切り替え: ESC キーを押すとコマンドモードに切り替わり、それ以外のキーを押すと入力モードになる

③カーソル移動: コマンドモードで矢印キー、h、j、k、lキーなどを用いてカーソルを移動

④文字削除: コマンドモードで d キー、x キーなどを用いて文字を削除

⑤コピー・ペースト: コマンドモードで y キー、p キーなどを用いて文字列をコピー・ペーストする

⑥保存・終了: コマンドモードで :wq(上書き保存) か :q!(編集内容破棄) と入力してファイルを保存して終了

⑦編集内容を取り消す: Ctrl+C を押して小文字の u を押す 

```
vim .zshenv

※Press i to enter insert mode.
※Press Enter to add a new blank line.
※Press Esc to return to normal mode.
※Type :wq to save and exit.
```

(3)nanoとは？

- nano とは、LinuxをはじめとするUnix系OSで広く利用されている、使いやすいテキストエディタ

(4) nano の基本的な使い方

①nano コマンドでファイルを起動: nano ファイル名 とコマンドを実行して、ファイルを編集

②カーソル移動: 矢印キー、h、j、k、lキーなどを用いてカーソルを移動

③文字入力: 編集したい部分にカーソルを移動し、通常のキー操作で文字を入力

④コピー・ペースト: Ctrl+k でコピー範囲を指定し、Ctrl+u で貼り付ける

⑤検索・置換: Ctrl+w で検索、Ctrl+x で置換を実行

⑥保存・終了: Ctrl+O でファイルを保存し、Ctrl+X で終了

## パッケージ管理コマンドdnf(yum)基礎

- Linuxではソフトウェアのことをパッケージという
- パッケージを配布するような場所をリポジトリという
- リポジトリ: ソフトウェア（パッケージ）保管場所

```
sudo su -  ※rootユーザーに切り替える
dnf install httpd(パッケージ)
```




## 参考サイト

[【AWS】EC2でAmazon Linux 2を構築しSSH接続してみよう](https://kacfg.com/ec2-amazon-linux/)
[Linux徹底攻略-初学者でもこれ一本で現場で戦える！コマンド、カーネル、シェル、グロブ、パスdnf、ディストリビューション、プロンプト、EC2インスタンスやTeraterm導入まで2時間の濃密講義](https://www.youtube.com/watch?v=EA5sc0ayXYM&t=556s)
[シェル変数と環境変数](https://codezine.jp/unixdic/w/%E3%82%B7%E3%82%A7%E3%83%AB%E5%A4%89%E6%95%B0%E3%81%A8%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0#:~:text=%E3%82%B7%E3%82%A7%E3%83%AB%E5%A4%89%E6%95%B0%E3%81%AF%E3%80%81%E7%8F%BE%E5%9C%A8%E5%AE%9F%E8%A1%8C,%E3%81%8A%E3%81%8F%E3%81%A8%E3%82%88%E3%81%84%E3%81%A7%E3%81%97%E3%82%87%E3%81%86%E3%80%82)