Linuxの基本的なコマンド解説

Linuxで使用できる基本的なコマンドについて解説していきたいと思います。
書式の中で[]内のものは任意であるという意味でご認識ください。

## ディレクトリ操作での基本的なコマンド

### cd(change directory)コマンド
ディレクトリを移動するコマンド

書式：`cd [オプション] [ディレクトリ]`

オプションはあまり使わないので、覚えなくて大丈夫です。
特別なディレクトリの指定は以下の通りです。
| ディレクトリ | 内容 | 指定方法 |
|:-:|:-:|:-:|
| カレントディレクトリ  | 現在自分がいるディレクトリ  | 「.」  |
| 親ディレクトリ  | 1つ上の階層のディレクトリ  | 「..」  |
| ホームディレクトリ  | 「/home/ユーザー名」ディレクトリ  | 「~」（チルダ）  |
| ルートディレクトリ | 「/」ディレクトリ | 「/」 |

### pwd(print name of working derectory)コマンド
カレントディレクトリを表示するコマンド

書式：`pwd [オプション]`

今いるディレクトリがわからなくなったら`pwd`コマンドで確認しましょう。

### ls(list)コマンド
ファイルやディレクトリの一覧を表示するコマンド

書式：`ls [オプション] [ディレクトリ・ファイル名]`

便利なパス名展開を使うことができ、複数のファイルを一度に指定することができます。
| 記号 | 意味 |
|:-:|:-:|
| *  | 任意の文字列  |
| ?  | 任意の1文字  |

例
- `ls *.html`と入力するとindex.htmlやhome.htmlなど「〜.html」ファイルの出力が可能
- `ls ???.html`と入力すると「〇〇〇.html」という3文字.htmlファイルの出力が可能

**よく使用されるオプション**
| オプション | 内容 |
|:-:|:-:|
| -l  | ファイルの詳細情報を表示する  |
| -a  | 隠しファイルを含めたすべてのファイルを表示する  |
| -F  | ファイル種別を表示する  |

### mkdir(make directory)コマンド
ディレクトリを作成するコマンド

書式：`mkdir [オプション] ディレクトリ名`

**よく使用されるオプション**
| オプション | 内容 |
|:-:|:-:|
| -p  | 深いディレクトリを一度に作成する  |

例:以下のようなコマンド入力にすると事前に「test」、「2025」というディレクトリを作らなくてよくなります。

```
$ mkdir -p test/2025/02
```

:::note alert
ディレクトリ名は日本語で作成したら文字化けの可能性があるので、英語で命名するのがおすすめです。
:::

### rmdir(remove directory)コマンド
空のディレクトリを削除するコマンド

書式：`rmdir ディレクトリ名`

:::note alert
空でないディレクトリを削除しようとするとエラーになります。
:::

> 以降で`rm`コマンドを紹介するのですが、こちらで空でないディレクトリの削除もできるので一般的に`rm`コマンドが使用されているようです。

ここでパスというものを紹介させていただきます。

:::note
##### パスとは？
ディレクトリやファイルの住所情報。
ディレクトリの階層の区切りを「/」で表現します。
###### 絶対パス
ルートディレクトリ（「/」）から始まるパス
曖昧さがなく確実なパス表記になります。
深いところにあるディレクトリを指定する際コードが長くなってしまい、不便になってしまうことがある。
###### 相対パス
カレントディレクトリから始まるパス
短く表記することができます。

用途によって使い分けをしていきましょう。
:::

## コマンドの使い方の調べ方
### helpオプション
コマンドのヘルプメッセージを表示する

書式：`コマンド名 --help`

使用方法、コマンドの概要、利用可能なオプション一覧が出力されるので、コマンドの概要を理解したい際に使っていきましょう。

### man(manual)コマンド
コマンドのマニュアルが出力されます。

書式：`man 調べたいコマンド名`

`--help`オプションより詳しいので、コマンドを深いところまで理解したい際に使っていきましょう。

## ファイル操作についてのコマンド
### cat(concatenate)
ファイルの中身を表示するコマンド

書式：`cat [オプション] ファイル名`

ファイル名の間にスペースを空けることによって、複数のファイルをまとめて表示することもできます。

**よく使われるオプション**
| オプション | 内容 |
|:-:|:-:|
| -n  | 行番号を表示するオプション  |

### less(less - opposite of more)コマンド
ファイルの中身をスクロール表示するコマンド
長いファイルの中身を確認したい際に使用します。
書式：`less [オプション] ファイル名`

**`less`コマンドで出力された内容を確認する際の操作コマンド**
| コマンド | 内容 |
|:-:|:-:|
| スペース、f  | 一画面下にスクロール  |
| b  | 一画面上にスクロール  |
| j  | 一行下にスクロール  |
| k  | 一行上にスクロール  |
| q  | lessコマンド終了  |
| /文字列  | 下方向に向かって文字列を検索  |
| ?文字列  | 上方向に向かって文字列を検索  |
| n  | 次の検索結果に移動  |
| N  | 前の検索結果に移動  |

### headコマンド
データの先頭部分を表示するコマンド
`-行数`と指定することもできる。
オプションを指定しない場合は、先頭から10行を標準出力します。

書式：`head [オプション] [ファイル名]`

**オプション**
| オプション | 内容 |
|:-:|:-:|
| -n 行数  | データの先頭から指定した行数のデータが出力される  |

### tailコマンド
データの終わり部分を標準出力するコマンド
オプションを指定しない場合は末尾から10行を標準出力する。

書式：`tail [オプション] [ファイル名]`

オプションは`head`コマンドと同じになります。

### touchコマンド
空のファイルを作成するコマンド

書式：`touch 新規ファイル名 新規ファイル名2 ...`

ファイル名が存在していないときは空のファイルを作成し、存在しているときはタイムスタンプを更新する。

### rm(remove)コマンド
ファイル・ディレクトリを削除するコマンド

書式：`rm [オプション] 削除するファイル名 削除するファイル名2 ...`

:::note alert
`rm`コマンドを実行すると、ごみ箱ではなく完全に削除されるので注意しましょう。
:::

**オプション**
| オプション | 内容 |
|:-:|:-:|
| -r  | ディレクトリも合わせて削除する（ディレクトリの中のファイルもまとめて削除される）  |
| -f  | ファイルを削除する際に警告文を表示しない  |
| -i  | ファイルの削除前に確認することができる  |

### mv(move)コマンド
ファイルの移動、ファイル名の変更をするコマンド

書式：`mv [オプション] 移動元　移動先`

**オプション**
| オプション | 内容 |
|:-:|:-:|
| -i  | 上書きする前に確認することができる  |

### cp(copy)コマンド
ファイル・ディレクトリをコピーするコマンド
コピー先に同一のファイル名があると上書きされてしまうので注意しましょう。

書式：`cp [オプション] コピー元　コピー先`

**オプション**
| オプション | 内容 |
|:-:|:-:|
| -i  | 上書きする前に確認することができる  |
| -r  | ディレクトリをコピーすることができる  |

### ln(link)コマンド
リンクを張るコマンド
オプションを何もつけないと`ハードリンク`になります。

書式：`ln [オプション] リンク元ファイル　リンク名`

**オプション**
| オプション | 内容 |
|:-:|:-:|
| -s  | シンボリックリンクを張る  |

使い方
- 長いパスを省略したい時
- 複数バージョンを共存させ最新を区別したい時

※シンボリックリンクの方が使うこと多い。ハードリンクはいくつかの制限があって、異なるディスクをまたいで作成できなかったり、ディレクトリに対して使えないなど。シンボリックリンクはそのような制限を受けないです。

:::note
##### リンクを張るとは？
Linuxではファイルに別名をつけることができ、その別名をつけることを「**リンクを張る**」という。
Windowsでいうショートカットのようなものです。
「ハードリンク」と「シンボリックリンク」の２種類があります。
###### ハードリンク
- 1つのファイルに複数の名前をつける機能
- 元のファイルを削除しても消えない
- すべてのハードリンクがなくなった時に削除される
###### シンボリックリンク
- リンク先のパス名が書かれた特殊ファイル。リンク先がファイルの実体
- シンボリックリンクを残したままファイルの実体を削除したり、ファイルを移動するとファイルを参照できなくなる
:::

### findコマンド
ファイルを検索するコマンド

書式：`find 検索開始ディレクトリ 検索条件 アクション`

例：`$ find . -name README.md -print`

よく使われる検索条件
| 検索条件 | 内容 |
|:-:|:-:|
| -name  | ファイル名を指定してファイルを検索。ファイル名の大文字小文字は区別する。ワイルドカード使用可能「 * 」、「?」 「 * 」を使用する際は"で囲うこと  |
| -iname  | ファイル名を指定してファイルを検索。ファイル名の大文字小文字は区別しない  |
| -type  | ファイルの種類で検索。「-type f」：**通常ファイル** 「-type l」：**シンボリックファイル** 「-type d」：**ディレクトリ**  |
| -a  | 複数の検索条件を指定。`-a`は省略可能  |

### chmod(change mode)コマンド
ファイルやディレクトリのパーミッションを設定

書式：`chmod [ugoa] [+-=] [rwx] ファイル名`（相対指定）
例：`$ chmod u+r file名`

[ugoa]記号解説
| 記号 | 内容 | 
|:-:|:-:|
| u | 所有者の権限  |
| g  | グループの権限  |
| o  | その他ユーザーの権限  |
| a  | 全ユーザの権限  |

[+-=]記号解説
| 記号 | 内容 |
|:-:|:-:|
| +  | 権限を追加  |
| -  | 権限を削除  |
| =  | 記述した権限にする  |

数値で設定もできます。

書式：`chmod 8進数の数値　ファイル名`（絶対指定）
例：`chmod 755 fime名`

**8進数の数値解説**
| パーミッション | 数値 |
|:-:|:-:|
| r(読取権限）  | 4  |
| w(書込権限）  | 2  |
| x(実行権限)  | 1  |

例：オーナー[rwx]、グループ[r-x]、その他[r-x]のパーミッションを設定したいときの数値の求め方
| オーナー | グループ | その他 |
|:-:|:-:|:-:|
| rwx  | r-x  | r-x  |
| 4+2+1  | 4+1  | 4+1  |
| 7  | 5  | 5  |

:::note
##### パーミッションとは？
- ファイルやディレクトリを「誰がどのように操作できるか」を定めたもの
:::

### ps(process status)コマンド
実行中のプロセスを表示するコマンド

書式：`ps [オプション]`

**使われるオプション**
| オプション | 内容 |
|:-:|:-:|
| aux  | 全ユーザーのプロセスを詳細情報と合わせて表示する。オプションですが「-」をつけなくてよい  |

:::note
##### プロセス、ジョブとは？
###### プロセス
実行中のプログラムのこと

###### ジョブ
まとめて実行されるプロセスの集まり。シェルごとに管理されている。
:::

### jobsコマンド
現在のジョブの一覧を表示するコマンド

### killコマンド
ジョブやプロセスを終了するコマンド
書式：`kill [オプション] %ジョブID`
　　：`kill [オプション] プロセスID`

正確には、`kill`コマンドはシグナルを送信するコマンド。
デフォルトでは`TERM`という終了を指示するシグナルを送信している。

通常の`kill`コマンドを実行しても、終了できない時は最終手段として`SIGKILL`という強制終了のシグナルを送信してジョブ、プロセスを終了させることができる。

例：`kill -SIGKILL 4965`
  ：`kill -9 4965`
※上記2つの例は同じ意味


以上でLinuxの基本的なコマンド操作についての解説を終わります。
参考になれば幸いです。

**動画講座引用**
>山浦清秀.もう怖くないLinuxコマンド。手を動かしながらLinuxコマンドラインを5日間で身につけよう。.（Udemy）.2025/2/6視聴

**書籍引用**
>宮原徹.Linux標準教科書 Ver.4.0.0: LinuC(リナック)学習にも役立つLPI-Japan標準教科書シリーズ.株式会社翔泳社.