Linuxの基本

# Linuxの環境を用意することができる
WSL2を導入して、Ubuntuの環境を構築した。

:::note warn
補足：Dockerを導入したが、エラーが多発したため、断念。
　   後にインストールしたverが違ったとわかり、再度インストールして解決。　
     後日対処法をまとめる予定。
:::


# Linuxが何かを説明できる
### Linuxとは
コマンドでコンピューターを動かす基本的なソフトウェアのこと
「カーネル」＋「それを使用するソフトウェア」を組み合わせた状態のこと

<img width= "500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4052007/bc5f28a1-694e-4602-a924-4e70ccb4ceeb.png">



| Linux | 内容 |
|:----:|-----|
|カーネル|ハードウェアの制御やファイルの実行、ソフトウェアの実行リソースの管理を行う部分|
|ディストリビューション|カーネルにコマンドやアプリケーションなどのソフトウェアを加えたもの|


<img width = "500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4052007/0d96cb6f-4067-47cb-8502-d1d1f15e37a0.png">

**有名なディストリビューション**
- debian系はubuntu　
- Red Hat系はCentOS、Slackware
- 他　Amazon Linux

**各ディレクトリの役割**
| ディレクトリ| 役割 |
|:----:|-----|
|/bin |実行ファイルを置くためのディレクトリ　最低限必要な、重要度の高いコマンドを格納している|
|/dev |デバイスファイルを格納するディレクトリ|
| /etc |設定ファイルを置くためのディレクトリ|
| /home |ホームディレクトリが配置されるディレクトリ|



 https://staff.persol-xtech.co.jp/hatalabo/it_engineer/087.html


# シェルとは
ユーザとLinuxカーネルの橋渡しをするもの
またはコマンド上でユーザーと対話してハードウェアに指示を伝える秘書役のようなもの


![画像 (1).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4052007/8c3924d1-f040-4b3b-aa7d-f38cf1e0b77b.jpeg)


**シェルの種類**
sh,csh,bash,tcsh,zsh,fish



**ログインシェルの確認**
```
echo $SHELL
```

# ディレクトリを操作できる
**カレントディレクトリ(自分が今位置するディレクトリ)を確認する**
```
$ pwd 
```
**カレントディレクトリ(自分が今位置するディレクトリ)を移動する**
```
$ cd 
```

**ディレクトリ内のファイルを表示する**
```
$ ls
```

| option| 内容 |
|:----: |-----|
|~    |ホームディレクトリへ移動|
|..|ディレクトリ内のファイルを表示|
|-a|隠しファイルも合わせて表示|
|-F|隠ファイルの種類を表示|
|-l|ファイルの詳細情報を表示 |



**ディレクトリを作成・削除する**
```
$ mkdir 作成するディレクトリ名
$ rmdir 削除するディレクトリ名
```

**ファイルを作成・削除する**
```
$ touch 作成するファイル名
$ rm 削除するディレクトリ名
```
**マニュアルを確認する**
```
$ man ls
```


# ファイルを操作できる

**ファイルの中身を表示する**
```
$ cat -n ファイル名
```
- -n：行番号を表示する

**ファイルの内容をスクロールする**
```
$ less ファイル名
```

**ディレクトリ・ファイルを移動する**
```
$ mv ファイル名　ディレクトリ名
```

**シンボリックリンク:ファイルに別名をつける**
```
$ ln
```

**ファイルを検索する**
```
$ find . -name file.txt(検索条件) -print
```
- -name ファイル名で探す
- . 検索開始ディレクトリ


**文字列を検索する**
```
$ grep
```
**エディタを起動する**
```
$ vim
```

| 記号 | 内容 |
|:----|-----|
|:q|エディタの終了|
|:w|エディタの保存|
|i|編集スタート|
|esc|編集終了|

**vimコマンドのインストールを確認する**
```
vim --versio
```

# 標準出力とは
| 標準入出力 | 意味 |道具|
|:--------|-----|-----|
|標準入力|プログラムの標準的な入力|キーボード|
|標準出力|プログラムの標準的な出力|端末ディスプレイ|
|標準エラー出力|プログラムのエラーメッセージを出力する|端末ディスプレイ|

**リダイレクトとは**
標準入出力先を変更する機能のこと
| 記号 | 内容 |
|:-----:|-----|
|< file.txt|標準入力をファイルに変更する|
|> file.txt| 標準出力ファイルに変更する |
|>> file.txt|標準出力をファイルの末尾に追記する|
|2> file.txt|標準エラー出力をファイルを変更する|
|2>> file.txt|標準エラー出力をファイルの末尾に追記する|
|> file.txt 2>&1|標準出力と標準エラー出力の出力先をファイルに変更する|


**/dev/null とは**
主に余計な出力を防ぐために使われ主に不要な出力を無視するために使われる
空っぽにしたい場合に使われ、出力先としても書き込まれず保存されない



**パイプライン**
複数のコマンドを連携させる仕組み
```
$ ls -l | less
```
※lsコマンドの結果をlessコマンドに送る。

# パーミッションを操作できる
**ディレクトリのパーミッション表示する**
```
ls -ld ディレクトリ名(※-dオプションをつける)
```

|オーナー|グループ|その他|
|:---|---|---|
|rwx|r-x|r-x|

**権限を変更する**
```
$ chmod a+w ファイル名
```

   ▶ディレクトリのパーミッション
| 記号 | 意味 |
|:-----|-----|
|r|読み取り|
|w|書き取り|
|x|実行|

   ▶ユーザー指定
| 記号 | 意味 |
|:-----|-----|
|u|オーナー|
|g|グループ|
|o|その他|
|a|ugoすべて|

`su`：スーパーユ－ザーとも呼ばれる、rootユーザー
`sudo`：一般ユーザーにスーパーユーザーの権限を与えるコマンド


# プロセス・ジョブを管理できる
**メモリ上で実行状態にあるプログラムの確認＝プロセス**
```
$ ps
```

**シェルを一定時間停止するコマンド**
```
$ sleep 秒
```

**バックグラウンドプロセス・ジョブを終了する**
```
kill %ジョブ番号　またはプロセスID
```




## シェルスクリプトを使う

**シェルスクリプトとは**
コマンドラインにあらかじめ記述しておくファイル　定期的な作業には向く
実行権限をつけておく必要がある
**種類は.sh**


```
#!/bin/bash
 シバンで始まる
 #!で書かれた後の「bin/bash」でコマンドを実行する
```

**echo:処理の実行結果を出力する際に用いられる**

```
$ echo 'Hello' 
```

**相手に入力を求める**
```
$ read
```
**ファイルの読み取り**
ファイルの内容を`while`コマンドにリダイレクトして、
`read`コマンドを使って内容を一行ずつ読み取る
```
#!/bin/bash
 while read line
 do 
     echo $line
 done < file.txt

```



[参考書：マスタリング　Linuxシェルスクリプト](https://www.amazon.co.jp/%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%AA%E3%83%B3%E3%82%B0Linux%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88-%E7%AC%AC2%E7%89%88-%E2%80%95Linux%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%80%81bash%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%80%81%E3%82%B7%E3%82%A7%E3%83%AB%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%AE%9F%E8%B7%B5%E5%85%A5%E9%96%80-Mokhtar-Ebrahim/dp/481440011X)

[参考書：新しいLinuxの教科書](ttps://x.gd/UoB9y)