最低限のLinuxコマンド

自分のアウトプット用です。

# Linuxってなんだ？
コンピュータにおける人格（OS）の1つ。
Windows、Mac、Androidなどと同じ括りです。
オープンウェアなので誰でも使用可能。

### カーネル、ディストリビューション
**カーネル**はOSの中核（心臓）となるソフトウェア。
- サッカーでいうボランチ
- 野球でいうピッチャー

**ディストリビューション**は
カーネルだけだとOSとしては不便すぎるので
他のアプリを追加して使いやすくしたもの。
- サッカーはボランチだけじゃなくて、FW・SH・SB・CB・GKを揃えた方が圧倒的に戦いやすい
- 野球はピッチャーだけじゃなくて、キャッチャー含めた内野5人・外野3人いた方が圧倒的に戦いやすい

### シェル
カーネルとやり取りする仲介役で
Linuxを管理しているプログラムの1つです。
イメージは役所の受付ですね。

![スクリーンショット 2024-11-11 0.44.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3918502/08dac564-c8cb-d34f-a7ce-2c4e178bbfcf.png)


#### シェルの仕組み
例として「date」とコマンドで入力してEnterを押した時の流れを考えよう
1. シェルがdateという文字列を解釈
1. 「dateという文字列を入力されたから、今現在の時刻を表示するdateコマンドだ」と理解
1. Linuxカーネルの方に「dateコマンド実行して」と伝える
1. するとLinuxカーネルがdateコマンドを実行する
1. その実行結果をシェルが受け取って画面に表示


### ディレクトリ
ファイルが保存されている場所
WindowsやMacのフォルダと同じこと

※以下の画像はイメージにすぎない

| OS | 現実世界 |
|:-:|:-:|
| ディレクトリ  | 部屋  |
|  ファイル | もの  |

![スクリーンショット 2024-11-11 0.12.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3918502/d17f56b5-d2cd-b1b9-3aea-bb110bc2c168.png)

このような構造かつ「/」ルートディレクトリを初めとした
階層構造となっている
これをディレクトリツリーと呼ぶ

![スクリーンショット 2024-11-10 23.45.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3918502/117e8d7b-8afa-a613-b2cc-aaeb6548a54c.png)


# 最低限のLinuxコマンド

## cdコマンド（change directory)
- ディレクトリの移動
```
$ cd [ディレクトリ名]

# 例
$ cd /etc/hosts
```
| ディレクトリ | 意味 | 方法 |
|:-:|:-:|:-:|
| カレントディレクトリ  | 自分が現在いるディレクトリ  | `cd .`  |
| 親ディレクトリ  | 1つ上の階層のディレクトリ  | `cd ..`  |
| ホームディレクトリ  | 「/home/ユーザ名」ディレクトリ  |  `cd ~` |
|  ルートディレクトリ |  「/」ディレクトリ |  `cd /` |

## pwdコマンド（print working directory）
- 現在のディレクトリを確認
- 今どこにいるか知りたい時に使う
```
$ pwd

# 例
$ pwd
$ /home/yuya
```

## lsコマンド（list）
- ディレクトリの一覧確認
```
$ ls [オプション][ファイル名・ディレクトリ]

# 例
$ ls /etc
$ [		dd		launchctl	pwd		tcsh
bash		df		link		realpath	test
```
:::note info
**オプションとは**
つけることでコマンドの動作を変更することができる
:::
| オプション | 内容 |
|:-:|:-:|
|  -a | 隠しファイルまで表示  |
| -l  |  ファイルの詳細情報を表示 |
| -F  | ファイル種別を表示  |
|  *html |  拡張子がhtmlのファイル一覧を表示<br>（htmlは例でjs,phpなども可能） |
| /bin/b???  | bから始まり4文字で終わるファイルを表示  |

## mkdirコマンド（make directory）
- ディレクトリ作成
```
$ mkdir [オプション] [ディレクトリ名]

# 例
$ mkdir movie

# 例2 深いディレクトリまで一度に作成
$ mkdir -p movie/2024/11
```
| オプション | 内容 | 
|:-:|:-:|
|  -p | 深いディレクトリまで作成  |

## rmdirコマンド（remove directory）
- **空の**ディレクトリ削除
```
$ rmdir [オプション] [ディレクトリ名]

# 例
$ rmdir /test
```

## catコマンド（concatenate）
- ファイルの中身確認
※全部出てくる
```
$ cat [オプション] [ファイル名]

# 例
$ cat /etc/hosts
```
| オプション | 内容 | 
|:-:|:-:|
|  -n | 行数まで表示  |

## lessコマンド（less - opposite of more）
- ファイルの中身をスクロール表示で確認
- 長いファイルの中身を見たい時に使用
- ファイル内の操作は```vim```の操作と同じ
```
$ less [ファイル名]

# 例
$ less /etc/syslog.conf
```
| コマンド | 操作方法 | 
|:-:|:-:|
|  q | lessコマンドを終了  |
|  スペースキー、f | 1画面下にスクロール  |
|  b | 1画面上にスクロール  |
|  j | 1行下にスクロール  |
|  k | 1行上にスクロール  |

## tailコマンド
ファイルの終わりの部分の表示
デフォルトは10行表示
```
$ tail [オプション] [ファイル名]

# 例
$ tail /opt/homebrew/var/README.md
```
| コマンド | 操作方法 | 
|:-:|:-:|
|  -n | 行数を指定  |


## touchコマンド
- 空のファイルを作成。同じファイル名があった場合は、ファイルの更新時間を最新にする
```

$ touch [ファイル名]

# 例
$ touch /etc/hosts
```

## rmコマンド（remove）
- ファイル、ディレクトリを削除
- オプションなしで実行する際はディレクトリ内に何もない場合のみ実行可能
```
$ rm [ファイル名]

# 例
$ rm README.md
```
| オプション | 内容 | 
|:-:|:-:|
|  -i | 本当に削除していいか警告文を出す  |
|  -f | 警告文を出さずに削除する  |
|  -r | ディレクトリの中のファイルや<br>ディレクトリもまとめて削除  |
|  * | ディレクトリ内の全てのファイル削除  |


## mvコマンド（move）
- ファイルの移動、ファイル名の変更
```
$ mv [オプション] <移動元> <移動先>

# 例1 ファイルの移動
$ mv test1 files/

# 例2 ファイル名を変更
$ mv test1 test2
```
| オプション | 内容 | 
|:-:|:-:|
|  -i | ファイル名を変更する前に警告で確認  |


## cpコマンド（copy）
- ファイル、ディレクトリをコピー
```
$ cp [コピー元] [コピー先]

# 例1 test1ファイルをtest2にコピー
$ cp test1 test2

# 例2 test1ファイルをtestsディレクトリ内にコピー
$ cp test1 tests

# 例3 test1ディレクトリを2024ディレクトリ内にコピー
$ cp -r test1 2024
```
| オプション | 内容 | 
|:-:|:-:|
|  -i | 上書きする前に警告文で確認  |
|  -r | ディレクトリのコピー  |

## lnコマンド（link）
- リンクを貼るコマンド 
- 長いパス名を省略したい時に使用
- 複数バージョンを共存させ最新を区別したい時
:::note info
ハードリンクとは
1つのファイルの実体に複数の名前を付ける機能。
元のファイルを削除しても消えないファイル。

- 単細胞生物の無性分裂のイメージ
:::

:::note info
シンボリックリンクとは
リンク先のパス名が書かれた特殊ファイル。

リンク先がファイルの実体であり、シンボリックリンクを残したままファイルの実体を削除したり、ファイルを移動するとファイルを参照できなくなってしまう。

- 発電所が壊れると電気が使えなくなるイメージ
- 住民票を移動させると前に住んでいた近くの役所に住民票の発行をお願いしても確認できないイメージ
:::

```
$ ln [オプション] [リンク元のファイル] [リンク名]

# 例1 ハードリンク
$ ln file1 file2

# 例2 シンボリックリンク
$ ln -s baseball favorite_sports
```
| オプション | 内容 | 
|:-:|:-:|
|  -s| シンボリックリンクを貼る  |

## findコマンド
- ファイル検索
```
$ find [検索開始ディレクトリ名] [検索条件] [アクション]

# 例 
$ find . -name output.txt
```
| オプション | 内容 | 
|:-:|:-:|
|  -name | ファイル名を指定してファイル検索<br>ファイル名の大文字小文字は区別  |
|  -iname | ファイル名を指定してファイル検索<br>ファイル名の大文字小文字は区別**しない**  |
|  -type | ファイルの種類を検索  |

## chmodコマンド（change mode）
- ファイルやディレクトリのパーミッションを設定
```
$ chmod [u,g,o,a] [+-=] [ファイル名]

# 例1 相対指定 sportsファイルに読み取り権限追加
$ chmod u+r sports

# 例2 絶対指定 test2ファイルの権限を読み取りと実行だけ付与する際
$ chmod 755 test2
```
| 記号 | 意味 |
|:-:|:-:|
| u | 所有者の権限 |
| g | グループの権限 |
| o | その他ユーザーの権限 |
| a | 全てのユーザーの権限 |
| + | 権限の追加 |
| - | 権限の削除 |
| = | 記述した権限に変更 |

| パーミッション | 数値 |
|:-:|:-:|
| r（読み取り） | 4 |
| w（書き込み） | 2 |
| x（実行） | 1 |

## chownコマンド（change owner）
ファイル、ディレクトリのユーザーやグループの所有権の変更
```
$ chown [オプション] [ファイルorディレクトリ] [ファイルorディレクトリ]

# 例1 sport.txtのユーザー所有権の変更
$ chown root sports.txt

# 例2 sport.txtのユーザー、グループの所有権の変更
$ chown root:root sports.txt
```

## psコマンド（process status）
- 実行中のプロセス表示
```
$ ps [ディレクトリ名]

# 例 バックグラウンドでsleepコマンドを実行していることを表示
$ sleep 100 &
$ ps
$ PID TTY           TIME CMD
$ 84381 ttys000    0:00.01 sleep 100
```

## killコマンド（kill process）
- ジョブやプロセスを終了させる
```
$ kill [オプション] [プロセスID]

# 例 バックグラウンドで実行中のsleepコマンドを終了
$ sleep 100 &
$ ps
$ PID TTY           TIME CMD
$ 84381 ttys000    0:00.01 sleep 100
$ kill 84381
$ [1]  + terminated  sleep 100
```