各種Linuxコマンドとオプションの備忘録

# はじめに
Linuxのコマンドには様々な便利な物がありますが、全てを暗記していると言う方は少ないと思います。よく使うコマンドは自然と覚えていきますが、たまにしか使わないコマンドはいざと言う時「あれ、どうやるんだっけ」となる方も多いと思います。私もその一人です。また、よく使っているコマンドの中でも「こんなオプションあったんだ！」と言う物がたまにあります。今回は、独断と偏見でよく使いそうな物コマンドとそのオプションについてまとめてみました。

# File系

## `chgrp`, `chown`, `chmod`
### 使い方
`chgrp [option] {new_group} file1 [file2 file3 ... ]`
`chown [option] {new_owner} file1 [file2 file3 ... ]`
`chmod [option] {new_mode} file1 [file2 file3 ... ]`

### オプション
| option | 説明 |
| --- | --- |
| -R | 再帰的に適用 |
| -c | 変更が行われた場合のみ出力 |

## `cp`
### 使い方
`cp [option] {src} {dest}`

### オプション
| option | 説明 |
| --- | --- |
| -R | 再帰的にコピー |

## `install`
### 使い方
ファイルのコピーを行うのと同時にグループ、所有者、パーミッションの指定ができます。

`install [option] {src} {dest}`

### オプション
| option | 説明 |
| --- | --- |
| -g {group} | ファイルのグループを指定 |
| -o {owner} | ファイルの所有者を指定 |
| -p {mode} | ファイルのパーミッションを指定 |

## `ln`
### 使い方
ファイルのリンクを作成します。`-s`オプションでシンボリックリンクを作成するのが基本的な使い方になるかと思いますが、**リンク元のファイルやディレクトリを絶対パスで指定しないとシンボリックリンクを移動させた時にリンクが壊れます**。逆に言えば移動させることが無いなら相対パスでも大丈夫です。

`ln [option] {src} {link_name}`

### オプション
| option | 説明 |
| --- | --- |
| -s | ハードリンクでは無くシンボリックリンクを作成 |


## `ls`
### 使い方
`ls [option] [file/dir]`

### オプション
| option | 説明 |
| --- | --- |
| -1 | 出力をリストで表示 |
| -l | 出力をリストで詳細に表示 |
| -h | ファイルサイズを読みやすくする |
| -p | ディレクトリの末尾に`/`を付ける |
| -t | ファイルの更新日が新しい順にソート |
| -S | ファイルサイズの大きい順にソート |
| -v | 数字順にソート |
| -X | 拡張子のアルファベット順にソート |
| -r | 並び順を逆にする |
| -a | `.`と`..`を含めた隠しファイルを表示する |
| -A | `.`と`..`を除いた隠しファイルを表示する |

## `mkdir`, `rmdir`
### 使い方
`mkdir [option] {dir}`
`rmdir [option] {dir}`

### オプション
| option | 説明 |
| --- | --- |
| -p | 再帰的に親ディレクトリも作成/削除 |


## `mv`
### 使い方


`mv [option] {src} {to}`
`mv [option] {src1} [src2, src3 ...] {dir}`

### オプション
| option | 説明 |
| --- | --- |
| -f | 既存のファイルを上書きする |
| -n | 既存のファイルを上書きしない|

## `rm`
### 使い方
滅びの呪文`rm -rf /`

`mv [option] {file1} [file2 file3 ...]`

### オプション
| option | 説明 |
| --- | --- |
| -f | エラーメッセージを表示しない |
| -r | ディレクトリを再帰的に削除 |


# Text系
## `cat`
### 使い方
`cat [option] {file1} [file2 file3 ...]`

### オプション
| option | 説明 |
| --- | --- |
| -n | 行番号を表示する |
| -s | 連続した空行を1行にする |

## `cksum `
### 使い方
`cat {file1} [file2 file3 ...]`

## `head`, `tail`
### 使い方
先頭, 末尾の10行を表示する

`head [option] {file}`
`tail [option] {file}`

### オプション
| option | 説明 |
| --- | --- |
| -n | 表示する行数を変更する |
| -f (tailのみ)| ファイルに追記される度に表示する |

## `tr`
### 使い方
`words1`に含まれる文字を`words2`に置き換える。この時の変換は、`words1`の1つ目の文字を`words2`の１つ目に置き換える、と言う処理になる。

`tr [option] {words1} [words2]`

### オプション
| option | 説明 |
| --- | --- |
| -d | {words1}に含まれる文字を削除する |


# Shell系

## `basename`, `dirname`
### 使い方
`path`からディレクトリ名を取り除く。`suffix`が指定された時末尾も削除する.
`basename [option] {path} [suffix]`

`path`からディレクトリ名以外を取り除く。
`dirname [option] {path}`

### オプション
| option | 説明 |
| --- | --- |
| -z | 改行を出力しない |


## `date`
### 使い方
現在の日付を表示する。

`date [option]`

### オプション
| option | 説明 |
| --- | --- |
| +フォーマット | フォーマットを指定。 ex) `date +%Y%m%d -> 20200630` |

## `echo`
### 使い方
`echo [option] {text}`

### オプション
| option | 説明 |
| --- | --- |
| -n| 改行を出力しない |

## `env`
### 使い方
現在設定されている環境変数を出力。
`env`

一時的に環境変数を設定しつつ{command}を実行する。
`env [option] [ENV_NAME=ENV_VAL] {command}`

### オプション
| option | 説明 |
| --- | --- |
| -i| 既に設定されている環境変数を無視してcommandを実行する |



## `tee`
### 使い方
標準入力から与えられた内容をファイルと標準出力へ書き出す
`{command1} tee [option] {filename1} [filename2 filename3 ... ] [| {command2}]`

### オプション
| option | 説明 |
| --- | --- |
| -a | 指定したファイルが既に存在する場合、上書きでは無く追記にする |



# 終わりに
今回はLinuxコマンドの中でよく使う物とそのコマンドをまとめました。`mkdir`だけ再帰的のオプションが何故`-R`じゃ無くて`-p`なんだ！と思ったのがこの記事を書こうと思ったきっかけです。*p*は*parent directory*の*p*だそうです。
とても基本的なコマンドばかりになってしまいましたが、もっとマニアックなコマンドもこれからまとめて見たいと思います。