【図解つき】まずはこれだけ抑える！Linuxとコマンド操作チートシート

# はじめに

コマンドをシェルに打ち込む作業。
一部のすごいエンジニアの人のみができる高尚なことだとずっと思っていました。
何かシステムエラーがあった時に先輩エンジニアの方がさっと黒い画面を立ち上げ謎の呪文を打ち続ける姿をただただ眺めるだけだった時代を思い出します。

そんな私ですが、最近本番サーバーにアクセスしたり、Docker内での操作も増えたので、最低限これだけ抑えればなんとなる！というコマンドをまとめることにしました。

⚪︎⚪︎したい！から逆引きできるように作りました。

# 基礎知識
## Linuxとは
Linuxはオペレーティングシステムの一種であり、ハードウェアとソフトウェアの間で情報のやり取りを効率的に行う役割を果たします。
そのほか、システムリソースの管理やプロセスの制御も担当しています。
以下、よく耳にする用語を解説します。

 ### Linuxディストリビューション
Linuxカーネルを基にして構築されたオペレーティングシステムの完全なセット。

### Linuxカーネル
オペレーティングシステムの核心部分であり、全ての基本的なシステム機能を提供します。これにはプロセス管理、メモリ管理、デバイスドライバの統合、システムの安全と効率を保証する機能が含まれます。

関係性をまとめると以下のようになります。
![Frame 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3743559/7f1b946a-c945-7d53-cef7-8f484dc57749.png)


## ディレクトリの考え方

| コマンド      | 意味                   |解説                         |
|-----------|-------------------------|--------------------------------|
| /  | ルートディレクトリ      |ファイルシステムの最上位                    |
| ~  | ホームディレクトリ     | 個々のユーザーに割り当てられたディレクトリ                    |

ルートディレクトリはすべてのユーザーがアクセスできるが、その内容を変更するには通常、管理者権限が必要です。

ホームディレクトリは自分のホームディレクトリに対して高い権限を持ちますが、他のユーザーのホームディレクトリには制限されたアクセスしか持ちません。

## ディレクトリ移動と位置確認

| コマンド      | やりたいこと                           |
|-----------|--------------------------------|
| pwd  | 自分の作業位置を確認                     |
| cd ..  | 親ディレクトリへの移動                    |
| cd / | ルートディレクトリへの移動                    |

# コマンド

## ユーザーアカウント

| コマンド      | やりたいこと                           |
|-----------|--------------------------------|
| whoami  | 現在のユーザー名を調べたい                     |
| groups  | ユーザーが所属しているグループを調べたい                    |
| sudo su  | ユーザーを一時的にrootに切り替える                    |
| sudo su - ubuntu | ユーザーを一時的にubuntuに切り替える                    |

`root`に変えて元のユーザーに戻したいときは`exit`
どんなユーザーがいるか調べたいときは以下。

```bash
cat /etc/passwd
```

## デイレクトリとファイルのリストを出力したい

| コマンド      | やりたいこと                           |
|-----------|--------------------------------|
| ls -l  | 詳細情報を表示したい                    |
| ls -a  | 隠しファイルも含めて表示したい                    |
| ls -la  | 詳細情報と隠しファイルの情報を表示したい                    |

`-l`は「long listing format」の意味。以下のような詳細を表示できる
- ファイルタイプとパーミッション: ファイルやディレクトリのアクセス権限（読み取り、書き込み、実行）
- リンク数: ファイルやディレクトリに対するハードリンクの数
- 所有者名: ファイルやディレクトリの所有者のユーザー名
- グループ名: ファイルやディレクトリの所有者グループ
- ファイルサイズ: バイト単位のファイルサイズ
- 最終更新時刻: ファイルやディレクトリが最後に変更された日時
- ファイル名: ファイルやディレクトリの名前

`-a`は「all」の意味。
`-la`は`-a`と`-l`をまとめた書いたもの。

## ディレクトリ
※`dummy`、`dummy/ponny/perry `適切なディレクトリ名に変えてください。

| コマンド      | やりたいこと                           |
|-----------|--------------------------------|
| mkdir dummy | ディレクトリを作成したい                    |
| mkdir -p dummy/ponny/perry  | ネストしたディレクトリを作成したい                    |
| rm -r dummy  | ディレクトリ削除したい                    |

`-p`は「parents」という意味。このコマンドを使うと親でディレクトリも含めて一度に作成できます。

## ファイル

※`dummy.txt`や`file dummy`は作成したいファイル名や書き込みたい内容に置き換えてください。
### ファイルの基本操作
| コマンド      | やりたいこと                           |
|-----------|--------------------------------|
| touch dummy.txt| 空ファイル作成したい                    |
| echo "file dummy" > dummuy.txt  | 初期内容を含むファイル作成したい                    |
| cat dummy.txt | ファイルの中身を出力したい                    |
| echo "overwritten" > dummy.txt  | ファイルの中身を上書きしたい                    |
| echo "appended" >> dummy.txt  | ファイルに追記したい                    |
| cp dummy.txt dummy2.txt  | ファイルをコピーしたい                    |
| mv dummy.txt dummy3.txt  |  ファイルをリネイムさせたい                  |
| rm dummy.txt  |   ファイル削除したい                    |


### ファイル検索
| コマンド      | やりたいこと                           |
|-----------|--------------------------------|
| find . -iname dummy.txt  | ファイル名からファイルの場所を探したい                    |
| find . -iname dummy*  | ファイル名の一部からファイルの場所を探したい                    |


ファイルの一部分の文字列からファイルの場所と文字列を含むファイルを探したいは以下のようにパイプライン処理でも検索できます。

```
ls | grep dumm
```


### ファイルの中身
| コマンド      | やりたいこと                           |
|-----------|--------------------------------|
| grep -irn dummy  | 現在のディレクトリで特定の単語が含まれるファイルを検索したい                    |

`-irn`について

- `-i`: 大文字小文字を区別せずに検索
- `-r`: 再帰的に検索を行います。指定されたディレクトリとそのサブディレクトリ内のすべてのファイルを検索
- `-n`: マッチした行が何行目であるかを表示


## どんなオプションがあるか調べたい時

`ls`は調べたいコマンドに置き換えてください。

| コマンド      | やりたいこと                           |
|-----------|--------------------------------|
| ls --help  | オプションを調べたい                    |

## 実行ファイルのインストール先を調べたい

| コマンド      | やりたいこと                           |
|-----------|--------------------------------|
| which vim  | 実行ファイルのインストール先を調べたい                   |

# 発展知識

## シェルスクリプトとは
シェルのコマンドをファイルにまとめたもので拡張子は`.sh`です。
`if`や`for`などの構文が使えるため簡単な条件分岐のあるプログラムを書くことができます。


# さいごに

以上となります。自分の使用頻度に合わせて随時更新していきます！

この本がとてもわかりやすかったです。(参考本)
[Linux＋コマンド入門 ——シェルとコマンドライン、基本の力 WEB+DB PRESS plus](https://amzn.to/3JeI9kP)