LPIC 101の内容から、業務で使いそうなコマンド

本記事は、勉強したことのアウトプット（メモ）です。
LPIC101の勉強中のため、試験内容から実際の業務でよく使ったコマンドやこれから使いたいコマンドをまとめました。

#### 現状
* web系エンジニアやっています。
* Linuxの知識が薄いなと思い、勉強を開始。
* VirtualBoxにCentOS7の仮想環境を作り、実際に触りながら勉強。
* LPIC101を1回受験し、不合格。
    * 完全に勉強不足でした。。
* 合格に向けて、再び勉強を開始。

## 使用参考書、サイト
* [Linux教科書 LPICレベル1 Version5.0対応](https://www.amazon.co.jp/Linux%E6%95%99%E7%A7%91%E6%9B%B8-LPIC%E3%83%AC%E3%83%99%E3%83%AB1-Version5-0%E5%AF%BE%E5%BF%9C-%E4%B8%AD%E5%B3%B6-%E8%83%BD%E5%92%8C/dp/4798160490/ref=asc_df_4798160490/?tag=jpgo-22&linkCode=df0&hvadid=295678107984&hvpos=&hvnetw=g&hvrand=10026356874543379694&hvpone=&hvptwo=&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=1009292&hvtargid=pla-649269108462&psc=1&th=1&psc=1)
* [ping-t](https://ping-t.com/)


## コマンド
### history
コマンド履歴を表示します。
``` linux:bash
$ history
    1 ls
    2 cd ~
    3 cd ../
    4 cat test
```
##### 関連コマンド
| コマンド | 内容 |
|:-:|:-:|
| ↑（Ctrl + P）  | １つ前のコマンドを表示  |
| ↓（Ctrl + N）  | 1つ次のコマンドを表示  |
| !文字列  | 実行したコマンドの中で、指定した文字列から始まるコマンドを実行する  |
| !?文字列  | 実行したコマンドの中で、指定した文字列を含むコマンドを実行する  |
| !!  | 直前に実行したコマンドを再実行する  |
| !履歴番号  | 履歴番号のコマンドを実行する  |

コマンド履歴の確認はよく使うと思います。
「↑」「↓」の方が、直近のコマンドをすぐ使えるので便利かもしれません。

### ls
指定したディレクトリやカレントディレクトリ内のファイルやサブディレクトリを表示します。
* ディレクトリを指定した場合：そのディレクトリ内のファイル表示
* ディレクトリを指定していない場合：カレントディレクトリ内のファイルとサブディレクトリを表示

##### オプション
| オプション | 説明 |
|:-:|:-:|
| -a  | 全て表示する |
| -A  | 「.」から始まるファイルも表示するが、「.（カレントディレクトリ）」「..（親ディレクトリ）」は表示しない  |
| -d  | ディレクトリ自身の情報を表示する  |
| -F  | ファイルの種類も表示する　（ディレクトリ：/ 実行ファイル：* シンボリックリンク：@　が末尾につく）|
| -i  | iノード番号を表示する  |
| -l  | ファイルの詳細情報を表示する  |
| -t  | 日付順に表示する  |
| -h  | 単位付きで表示する  |

上記以外のオプションもあります。また、複数組み合わせて使用することもできます。
```linux:bash
$ ls -la
total 0
drwxr-xr-x   4 lpic  test   128  9 13 22:33 .
drwxr-xr-x+ 61 lpic  test  1952  9 13 22:31 ..
-rw-r--r--   1 lpic  test     0  9 13 22:33 sample.txt
-rw-r--r--   1 lpic  test     0  9 13 22:32 test.txt
```
-lは、ファイルの詳細情報を確認できるので、よく使用すると思います。
アクセス権（パーミッション）も確認できます。

### tail
ファイルの末尾部分を表示します。
#### オプション
| オプション | 説明 |
|:-:|:-:|
| -n 行数  | 末尾から指定された行数分だけ表示する  |
| -c バイト数  | 末尾から指定されたバイト数だけ表示する  |
| -f  | ファイルの末尾に追加された行を表示し続ける  |
| -v  | ファイル名を常に表示する  |
```linux:bash
$ tail -f test.txt
test
test1
test2
test3
test4
test5
test6
```
-f は動作確認やテスト工程で使用すると便利です。
ログ出力の確認時に使用することが多いかもしれません。

### ln
リンクを作成することができます。

- オプションなし：ハードリンク
- -s ：シンボリックリンク
##### オプション
| オプション | 説明 |
|:-:|:-:|
| -s  | シンボリックリンクの作成  |

シンボリックリンクの作成は、　`ln -s リンク元（実体） リンクファイル`　の書式です。
```linux:bash
$ ln -s ../samplelink.txt symboliclink 
$ ls -l
total 8
-rw-r--r--  1 kaharatakuya  staff   0  9 13 22:33 sample.txt
lrwxr-xr-x  1 kaharatakuya  staff  17  9 13 22:41 symboliclink -> ../samplelink.txt
-rw-r--r--  1 kaharatakuya  staff  41  9 13 22:36 test.txt
```

私が経験した現場では、開発でシンボリックリンクを使用していたため、よく使用していました。

### vi
テキストファイルを編集することができます。
コマンドモード、入力モードの2つの動作モードを切り替えながら編集することができます。
##### 入力モード
| コマンド | 説明 |
|:-:|:-:|
| i  | カーソルの前にテキストを入れる  |
| a  | カーソルの後にテキストを入れる  |
| A  | 行末にカーソルを移動し、その直後にテキストを入力する  |
| o  | 現在のカーソル行の次の行に行を挿入する |
| O  | 現在のカーソル行の前の行に行を挿入する  |

入力モードの状態でEscキーを押下すると、コマンドモードに切り替わります。

##### viのカーソル操作
| コマンド | 説明 |
|:-:|:-:|
| O  | 行の先頭へ移動する  |
| $  | 行の末尾へ移動する  |
| H  | 画面の一番上の行頭へ移動する  |
| L  | 画面の一番下の行頭へ移動する  |
| gg  | ファイルの先頭行へ移動する  |
| G  | ファイルの最終行へ移動する  |
| nG  | ファイルのn行目に移動する  |
| :n  | ファイルのn行目に移動する  |

viコマンドでファイルを編集するための便利なコマンドもあります。

##### viの編集コマンド
| コマンド | 説明 |
|:-:|:-:|
| x  | カーソル位置の文字を削除する（Deleteと同様）  |
| X  | カーソル位置の手前の文字を削除する（Backspaceと同様）  |
| dd  | カレント行を削除する  |
| dw  | カーソル位置から次の単語までを削除する|
| yy  | カレント行をバッファにコピーする  |
| p  | カレント行の下にバッファの内容を貼り付ける|
| P  | カレント行の上にバッファの内容を貼り付ける  |

コピー&ペースト（yy, p or P）は、よく使うかもしれません。
viの終了、ファイルの保存のコマンドもあります。

##### viの終了、ファイル保存
| コマンド | 説明 |
|:-:|:-:|
| :q  | 保存せずに終了する（編集した場合、保存するか確認あり）  |
| :q!  | 保存せずに終了する  |
| :wq  | 保存して終了する  |
|  :w | ファイルを上書きする  |

ファイルの保存（:wq）、閉じる（:q）は、viコマンドで参照、編集した場合、必ず使用します。
最後にviの検索コマンドです。

##### viの検索コマンド
| コマンド | 説明 |
|:-:|:-:|
| /パターン  | 後方検索  |
| ?パターン  | 前方検索  |
| n  | 次を検索する  |
| N  | 次を検索する（逆方向）  |

編集したい場所を探したい場合に便利です。

### chmod
アクセス権の変更で使用します。

##### オプション
| オプション | 説明 |
|:-:|:-:|
| -R  | 指定したディレクトリ以下にある全ファイルのアクセス権を変更する  |

##### 対象
| 対象 | 説明 |
|:-:|:-:|
| u  | 所有者  |
| g  | グループ  |
| o  | その他ユーザ  |
| a  | 全てのユーザ  |

##### 許可の種別
| 許可の種別 | 説明 |
|:-:|:-:|
| r  | 読み取り許可  |
| w  | 書き込み許可  |
| x  | 実行許可  |
| s  | SUID, SGID  |
| t  | スティッキービット  |

アクセス権を変更する場合、2つの方法があります。
- 上記の対象、許可の種別を用いた記号による変更
- 数値を用いた変更

```linux:bash
$ chmod g-w test.txt

$ chmod 664 test.txt
```
各ファイルのアクセス権限は、`ls -l`で確認することができます。

## 最後に
本記事の続き、②も作成します。（自分用のメモですが、、）
上記記載コマンドやコマンドのオプション以外にも、たくさんありますので、勉強して追記していこうと思います。

## 参考資料
- https://eng-entrance.com/linux_command_ls
- https://eng-entrance.com/linux-command-tail
- https://eng-entrance.com/linux-command-vi
- [Linux教科書 LPICレベル1 Version5.0対応](https://www.amazon.co.jp/Linux%E6%95%99%E7%A7%91%E6%9B%B8-LPIC%E3%83%AC%E3%83%99%E3%83%AB1-Version5-0%E5%AF%BE%E5%BF%9C-%E4%B8%AD%E5%B3%B6-%E8%83%BD%E5%92%8C/dp/4798160490/ref=asc_df_4798160490/?tag=jpgo-22&linkCode=df0&hvadid=295678107984&hvpos=&hvnetw=g&hvrand=10026356874543379694&hvpone=&hvptwo=&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=1009292&hvtargid=pla-649269108462&psc=1&th=1&psc=1)