Linux基礎コマンド18選をまとめてみた

## はじめに
Linuxコマンドを学習したので、中でも重要な18個のコマンドについてまとめ、記事にしてみました。



## ディレクトリ操作コマンド
### ディレクトリとは
ファイルが保存されている場所のことで、`入れ子構造`になっている。
WindowsやMacのフォルダと同じ概念

また、ルートディレクトリ「/」を頂点とした階層構造（=`ディレクトリーツリー`）になっている

![スクリーンショット 2023-11-22 0.34.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3360649/2ca829ac-1a45-dc2e-bd42-b3d0a66df336.png)



### 1. 【 cd 】 現在作業中のディレクトリ[^1]を移動するコマンド
[^1]: カレントディレクトリと呼ぶ。


`c`hange `d`irectoryの略。
書式 $ `cd [オプション][ディレクトリ]`([]は任意)
cdコマンドでは以下のショートカット記号を使うことで、パスの入力を省略できます。
よく使うので、ぜひ覚えておきましょう！
<table>
  <caption>cd + ショートカット</caption>
  <thead>
    <tr>
      <th>名前</th> <th>説明</th>
    </tr>
  </thead>
  <tr>
    <td> cd / </td> <td>ルートディレクトリに移動</td>
  </tr>
  <tr>
    <td> cd . </td> <td>現在のディレクトリに移動</td>
  </tr>
  <tr>
    <td> cd .. </td> <td>親ディレクトリ(現ディレクトリの1つ上の階層)に移動</td>
  </tr>
  <tr>
    <td> cd ~ </td> <td>ホームディレクトリに移動</td>
  </tr>
  <tr>
    <td> cd - </td> <td>直前にいたディレクトリに移動</td>
  </tr>
</table>


### 2. 【 pwd 】 カレントディレクトリを確認するコマンド
作業をしていて、現在地が分からなくなった時に使う
書式 $ `pwd [オプション]`


### 3. 【 ls 】 ファイルとディレクトリの一覧リストを表示するコマンド
`l` i `s`tの略。
全体像を把握したい時に便利！
書式 $ `ls [オプション][ファイル名・ディレクトリ名]`
パス名展開を使うと、複数のファイルを一度に表示できます！
<table>
<thead>
    <tr>
      <th>記号</th> <th>意味</th>
    </tr>
  </thead>
  <tr>
    <td> * </td> <td>任意の文字列</td>
  </tr>
  <tr>
    <td> ? </td> <td>任意の1文字</td>
  </tr>
</table>

```
# 拡張子がhtmlのファイル一覧を表示
$ ls *.html
index.html  home.html 

# sから始まり4文字で終わるファイル一覧を表示
$ ls /bin/s???    
/bin/stty	/bin/sync
```


よく使うオプション

:::note info
オプション：コマンドに特定の引数（オプション）を加えることで、
　　　　　　コマンドの動作を変えられるも機能を持ったもの。
　　　　　　英熟語（動詞+副詞）と似た感じ！
　　　　　　(例)ls -a
:::


```
# 「.」で始まる隠しファイルも含めた全てのファイルを表示
$ ls -a
# ファイルの詳細情報を表示
$ ls -l
# ファイル種別を表示
$ ls -F
```
また、オプションは2つ以上指定できたり、オプションとコマンドの引数を同時に指定できる！
```
# オプションを2つ以上指定
$ ls -a
$ ls -a -l

# オプションとコマンドの引数を同時に指定
$ ls -al /
```



### 4. 【 mkdir 】 ディレクトリを作成するコマンド
`m`a`k`e `dir`ectoryの略。
書式 $ `mkdir [オプション] ディレクトリ名`


よく使うオプション
```
# 階層ディレクトリを一度に作成する
$ mkdir -p test/2023/11
```
:::note info
-pオプションを付けることで、2023,11それぞれのディレクトリを個別に作る手間を省ける！
:::

### 5. 【 rmdir 】 `空の`ディレクトリを削除するコマンド
`r`e`m`ove `dir`ectoryの略。
空でないディレクトリを削除しようとするとエラーになる
⇨中身のあるディレクトリの誤削除を防いでくれる！

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

## ファイル操作コマンド
### 6. 【 cat 】 ファイルの中身を表示するコマンド
con`cat`enateの略。
書式 $ `cat [オプション] ファイル名`

よく使うオプション
```
# 行番号を表示
$ cat -n　ファイル名

# 一度に複数のファイルを引数に指定すると、ファイルをまとめて表示できる
$ cat /etc/hostsname /etc/hosts
```

### 7. 【 less 】 ファイルの中身をスクロール表示するコマンド
catコマンドでは表示しきれない長いファイルの中身を見たい時に、
別のスクロール上で表示できる！
書式 $ `less [オプション] ファイル名`

<table>
  <caption>ファイル閲覧中の操作</caption>
  <thead>
    <tr>
      <th>名前</th> <th>説明</th>
    </tr>
  </thead>
  <tr>
    <td> スペースキー or f </td> <td>一画面下にスクロール</td>
  </tr>
  <tr>
    <td> b </td> <td>一画面上にスクロール</td>
  </tr>
  <tr>
    <td> j </td> <td>一行下にスクロール</td>
  </tr>
  <tr>
    <td> k </td> <td>一行上にスクロール</td>
  </tr>
  <tr>
    <td> q </td> <td>lessコマンドを終了</td>
  </tr>
  <tr>
    <td> /<文字列> </td> <td>下方向へ検索</td>
  </tr>
  <tr>
    <td> ?<文字列> </td> <td>上方向へ検索</td>
  </tr>
  <tr>
    <td> n </td> <td>次の検索結果に移動</td>
  </tr>
  <tr>
    <td> N </td> <td>前の検索結果に移動</td>
  </tr>
</table>

### 8. 【 tail 】 ファイルの最終行から数行を表示するコマンド
初期設定では末尾10行が表示される
書式 $ `tail [オプション] ファイル名`

よく使うオプション
```
# 末尾から指定した行数を出力
$ tail -n 20(行数)　ファイル名
```


### 9. 【 touch 】 空のファイルを作成するコマンド
指定したファイルのアクセス日時や最終更新日時を変更するコマンド。
`指定したファイルが存在ない場合は、空のファイルを作成する`

書式 $ `touch [オプション] ファイル名`

:::note info
touchコマンドの良いところ：誤って存在しているファイルを作成しても上書きしたりしない！
⇨とても安全なコマンド！
:::

使い方
```
# 複数の引数を指定することで、複数の新規ファイルをまとめて作成できる
$ touch 新規ファイル1 新規ファイル2
```

### 10. 【 rm 】 ファイル・ディレクトリを削除するコマンド
`r`e`m`oveの略。
書式 $ `rm [オプション] ファイル名・ディレクトリ名`(引数を複数持てる)

:::note warn
rmコマンドを実行すると、ゴミ箱を経ずに削除されてしまうので注意！
:::

よく使うオプション
```
# ディレクトリも合わせて削除
$ rm -r ディレクトリ名

# ファイルを削除する際に警告文を表示しない
$ rm -f　ファイル名

# ファイルの削除前に確認
$ rm -i　ファイル名
```


### 11. 【 mv 】 ファイルの移動・ファイル名を変更するコマンド
`m`o`v`eの略。
書式 $ `mv [オプション] 移動元　移動先`
ファイルの移動かファイル名の変更かは、
移動先をファイルとディレクトリのどちらに指定するかで変わる
移動先が
ファイルの場合⇨ファイル名の変更
ディレクトリの場合⇨ファイルの移動

よく使うオプション
```
# 上書きする前に確認する
$ mv -i 移動元　移動先
```

### 12. 【 cp 】 ファイル・ディレクトリをコピーするコマンド
`c`o`p`yの略。
書式 $ `cp [オプション] コピー元　コピー先`

:::note warn
コピー先のファイルがすでに存在していると上書きするので注意！
:::


よく使うオプション
```
# 上書きする前に確認する
$ cp -i コピー元　コピー先

# ディレクトリをコピーする
$ cp -r コピー元ディレクトリ　コピー先ディレクトリ
```






### 13. 【 ln 】 リンクを張るコマンド
`l`i`n`kの略。
書式 $ `ln [オプション]　リンク元ファイル　リンク名`（オプションなしはハードリンクになる）
#### リンクを張るとは
Linuxにおいて、ファイルに別名を付けること。
Linuxの場合、以下の２種類のリンクがある

<table>
  <thead>
    <tr>
      <th>名前</th> <th>説明</th>
    </tr>
  </thead>
  <tr>
    <td> ハードリンク </td> <td>・1つのファイルの実体に複数の名前をつける機能

・元のファイルを削除しても消えない

・全てのハードリンクがなくなった時に削除される</td>
  </tr>
  <tr>
    <td> シンボリックリンク </td> <td>・リンク先のパス名が書かれた特殊ファイル、リンク先がファイルの実体

・シンボリックリンクを残したままファイルの実体を削除したりファイルを移動すると、ファイルを参照できなくなる</td>
  </tr>
</table>

リンクの用途↓

:::note info
・長いパス名を省略したいとき
・複数バージョンを共存させ、最新を区別したいとき
:::

この説明のみだとイマイチ腹落ちしない場合は、ぜひこちらの記事を参考にして拝読してみてください！
リンクファイルを作成する意味だけでなく、ファイルの実態のinodeについても解説されています！
https://eng-entrance.com/linux-permission-link


よく使うオプション
```
# シンボリックリンクを張る
$ ln -s file1 file3
```

### 14. 【 find 】 ファイルを検索するコマンド
ファイルがどこにあるか探す際に便利なコマンド！
書式 $ `find 検索開始ディレクトリ　検索条件　検索アクション`
(検索条件には、オプションや判別式が入る)

よく使う検索条件
```
# ファイル名を指定してファイルを検索（ファイル名の大文字小文字は区別）
$ find . -name README.md (-printは省略可)

# ワイルドカードが使える（*を使う時は''で囲む）
$ find . -name '*.html' -print

# ファイル名を指定してファイルを検索（ファイル名の大文字小文字は区別しない）
$ find . -iname readme.md

## ファイルの種類で検索(通常、複数の検索条件と組み合わせて使う)
# -type f: 通常ファイル
$ find . -type f -print

# -type l: シンボリックリンク
$ find . -type l -print

# -type d: ディレクトリ
$ find . -type d -print

# 複数の検索条件を指定(省略可)
$ find . -type d -a -name images -print(imagesという名前のディレクトリを検索して)
```

## ファイル・ディレクトリ管理コマンド
#### パーミッションとは
パーミッション：ファイルやディレクトリを「誰がどのように操作できるか」を定めたもの

:::note info
ls -lコマンドでパーミッションを確認できる
:::

ls -lコマンドの出力内容
<table>
  <thead>
    <tr>
      <th>記号</th> <th>内容</th>
    </tr>
  </thead>
  <tr>
    <td> r(read) </td> <td>読み取り</td>
  </tr>
  <tr>
    <td> w(write) </td> <td>書き込み</td>
  </tr>
  <td> x(execute) </td> <td>実行</td>
  </tr>
</table>

 rwxr-xr-xの場合、

| 対象 | 読み取り | 書き込み |　　実行 |
|:-------|-------:|:-----:|------ |
|  オーナー   |    ○  | ○  |    ○   |
|   グループに属するユーザー   |    ○  |   × |   ○   |
| その他のユーザー | ○  |  ×    |     ○  |



### 15-1. 【 chmod 】 ファイルやディレクトリのパーミッションを設定するコマンド（相対指定）
`ch`ange `mod`eの略。
書式 $ `chmod [ugoa] [+-=] [rwx] ファイル名`


<table>
  <thead>
    <tr>
      <th>記号</th> <th>内容</th>
    </tr>
  </thead>
  <tr>
    <td> u </td> <td>所有者の権限</td>
  </tr>
  <tr>
    <td> g </td> <td>グループの権限</td>
  </tr>
  <td> o </td> <td>その他ユーザーの権限</td>
  </tr>
  <tr>
    <td> a </td> <td>全ユーザーの権限</td>
  </tr>
</table>

<table>
  <thead>
    <tr>
      <th>記号</th> <th>内容</th>
    </tr>
  </thead>
  <tr>
    <td> + </td> <td>権限を追加</td>
  </tr>
  <tr>
    <td> - </td> <td>権限を削除</td>
  </tr>
  <td> = </td> <td>記述した権限にする</td>
  </tr>
</table>

```
# 具体例
＄ chmod u+r file
```


### 15-2. 【 chmod 】 ファイルやディレクトリのパーミッションを設定するコマンド（絶対指定）
書式 $ `chmod 8進数の数値　ファイル名`

<table>
  <thead>
    <tr>
      <th>パーミッション</th> <th>数値</th>
    </tr>
  </thead>
  <tr>
    <td> r(読み取り) </td> <td>4</td>
  </tr>
  <tr>
    <td> w(書き込み) </td> <td>2</td>
  </tr>
  <td> x(実行) </td> <td>1</td>
  </tr>
</table>

| オーナー | グループ | その他 |
|:-------|-------:|:-----:|
|  rwx   |    r-x  | r-x  |
|   ↓   |    ↓   | ↓      |
| 421  | 4-1   | 4-1     |
| ↓  | ↓   | ↓     |
| 7    | 5   | 5    |

```
具体例
$ chmod 755 file
```


### 16. 【 chown 】 ファイルの所有者やグループを変更するコマンド
`ch`ange `own`erの略。
指定したファイルやディレクトリのユーザー所有権やグループ所有権を変更する
書式 $ `chown [オプション] ユーザー　[:グループ] ファイル`

よく使うオプション
```
# 所有者が変更された場合、その詳細を表示する
$ chown -c 
```







## プロセス・ジョブ管理コマンド

#### プロセス・ジョブとは
`プロセス`：Linux上で実行中の一つ一つのプログラムのこと。
・一つのコマンドを実行する度に新しいプロセスが一つ作られ、メモリ領域が確保される（同じコマンドを実行しても、プロセスは別のものが新たに作られる）
・プロセスごとに一意のプロセスID（PID）が割り当てられ、プロセスが終了するまで変化しない

`ジョブ`：まとめて実行されるプロセスの集まりで、シェルごとに管理される
ジョブを実行すると、フォアグラウンド、バックグラウンドどちらかで動作を開始

<table>
  <thead>
    <tr>
      <th>名前</th> <th>説明</th>
    </tr>
  </thead>
  <tr>
    <td> フォアグラウンド </td>　<td>シェルの画面内でコマンドを実行すること</td>
  </tr>
  <tr>
    <td> バックグラウンド </td>　<td>シェルの画面外でコマンドを実行すること</td>
  </tr>
</table>



### 17. 【 ps 】 実行中のプロセスを表示するコマンド
`p`rocess `s`tatusの略。
書式 $ `ps [オプション]`


よく使うオプション
```
# 全ユーザーのプロセスを、詳細情報を合わせて表示（ハイフン不要）
auxは、
a:　全てのユーザーのプロセス
u:　詳細情報を合わせて表示
x:　psコマンドを実行したユーザーの全てのプロセス
の３つのオプションが合体したもの
$ ps aux　| less
```
<table>
  <caption>ps auxコマンドによる出力内容</caption>
  <thead>
    <tr>
      <th>名前</th> <th>説明</th>
    </tr>
  </thead>
  <tr>
    <td> USER </td> <td>実行しているユーザー名</td>
  </tr>
  <tr>
    <td> PID </td> <td>プロセスID</td>
  </tr>
  <tr>
    <td> ％CPU </td> <td>CPU使用率</td>
  </tr>
  <tr>
    <td> ％MEM </td> <td>メモリ使用率</td>
  </tr>
  <tr>
    <td> VSZ </td> <td>仮想メモリのサイズ</td>
  </tr>
  <tr>
    <td> RSS </td> <td>実際の使用メモリサイズ</td>
  </tr>
  <tr>
    <td> TYY </td> <td>端末</td>
  </tr>
  <tr>
    <td> STAT </td> <td>プロセスの状態
R：実行可能状態または実行中
S：待ち状態（割り込み可能）
D：待ち状態（割り込み不可）
T：実行中断　
Z：ゾンビ状態</td>
  </tr>
  <tr>
    <td> START </td> <td>プロセス生成時刻</td>
  </tr>
  <tr>
    <td> TIME </td> <td>CPU実行時間</td>
  </tr>
  <tr>
    <td> COMMAND </td> <td>実行されているコマンド</td>
  </tr>
  
</table>


### 18. 【 kill 】 プロセスやジョブを終了させるコマンド
書式 $ `kill [オプション] %ジョブID`
書式 $ `kill [オプション]　プロセスID`


```
# 具体例
$ kill %1
$ kill 4965
```
:::note info
フォアグラウンドジョブはCtrl+cで
停止中やバックグラウンドジョブはkillコマンドで終了する
:::

【プロセス・ジョブまとめ】

:::note info
Linuxを管理する上では、
`・稼働しているプログラムが正常に動いているか`
`・CPU・メモリなどのリソースをどれだけ使っているか`
が重要
(CPUやメモリなどのリソースを大量消費すると、処理が重くなるなどシステム運用に支障をきたす)
⇨ それらを防ぐために、ps auxコマンド等でコマンドごとのCPUやメモリ稼働率を調べ、killコマンドで終了させる
:::

## さいごに
今回はLinux基礎コマンドについてまとめてみましたが、実際にコマンドを打って覚えていきたいですね！