Linux 基本コマンド

## ファイル/ディレクトリ参照 ls
```
ls [オプション] [ファイル]
```
| オプション | |
| :--: | :-- |
| -a | 隠しファイルも含め全て出力 |
| -l | 長 (Long) 形式で出力 |
| -t | 最終更新時間 (Time) によって、ソートをして出力 |
| -r | 逆順 (Reverse) にソートをして出力 |

```terminal:ubuntu
reiji@utm-ubuntu:~$ ls -a
.   .bash_history  .bashrc  .config  Documents  .local  Pictures  Public  .sudo_as_admin_successful  Videos
..  .bash_logout   .cache   Desktop  Downloads  Music   .profile  .ssh    Templates
reiji@utm-ubuntu:~$ ls -l
total 32
drwxr-xr-x 2 reiji reiji 4096 Mar  9 07:54 Desktop
drwxr-xr-x 2 reiji reiji 4096 Mar  9 07:54 Documents
drwxr-xr-x 2 reiji reiji 4096 Mar  9 07:54 Downloads
drwxr-xr-x 2 reiji reiji 4096 Mar  9 07:54 Music
drwxr-xr-x 2 reiji reiji 4096 Mar  9 07:54 Pictures
drwxr-xr-x 2 reiji reiji 4096 Mar  9 07:54 Public
drwxr-xr-x 2 reiji reiji 4096 Mar  9 07:54 Templates
drwxr-xr-x 2 reiji reiji 4096 Mar  9 07:54 Videos
reiji@utm-ubuntu:~$ ls -t
Desktop  Documents  Downloads  Music  Pictures  Public  Templates  Videos
reiji@utm-ubuntu:~$ ls -r
Videos  Templates  Public  Pictures  Music  Downloads  Documents  Desktop
reiji@utm-ubuntu:~$ 
```

## コピー cp
```
cp [オプション] コピー元 コピー先
```
| オプション | |
| :--: | :-- |
| -i | 処理を行なうときに確認をします。誤って上書きコピーすることを防ぐために利用されます。 |
| -r | ディレクトリをコピーします。cp コマンドは基本的にファイルをコピーする機能のみですが、-r オプションを付けていると、ディレクトリの中にある全てのファイル・ディレクトリに対してコピーを行なうことができます。 |
| -p | 元ファイルの情報を保存します。ファイルには所有者・属性・更新日時など、ファイルに関するさまざまな情報があります。cp コマンドでコピーをすると、新しいファイルはそれらが全て新しい内容になってコピーされます。新しい内容を作成せず、古い情報を保持したままコピーを作成したい場合、この-p オプションを付けます。 |

## 移動・ファイル名変更 mv
```
mv 移動元ファイル 移動先ファイル
```
| オプション | |
| :--: | :-- |
| -i | 処理を行なうときに確認をします。ファイルを上書きするときなど、-i オプションを付けていると、コンピュータが確認のための問い合わせをしてきます。誤って上書きされることを防ぐために利用されます。|
| -f | 強制的に処理を実行します。一部の処理では、mv コマンドが確認の問い合わせをします。その確認を無視し、強制的に処理を実行するためのオプションが-f です。 |

## ファイル新規作成 touch
```
touch ファイル名
```
| オプション | |
| :--: | :-- |
| -c | ファイルが存在しない場合、ファイルが存在しなくても新規ファイル作成はされません。 |

## ファイルの削除 rm
```
rm ファイル名
```
| オプション | |
| :--: | :-- |
| -i | 処理を行なうときの確認です。対象ファイルを本当に削除してよいか、確認のための問い合わせをします。誤って削除することを防ぐために利用されます。 |
| -f | 強制的に処理を実行します。ファイルによっては、削除に確認を求められる場合がありますが、-f オプションはその確認を無視して、強制的に処理を継続します。 |

## 現在地 pwd
```
pwd
```

## 移動 cd
```
cd [ディレクトリ名]
```

## ディレクトリ作成 mkdir
```
mkdir ディレクトリ名
```
| オプション | |
| :--: | :-- |
| -p | 階層的にディレクトリを作成できる |
```terminal:ubuntu
reiji@utm-ubuntu:~/practice$ ls
food  fruits
reiji@utm-ubuntu:~/practice$ mkdir country/japan
mkdir: cannot create directory ‘country/japan’: No such file or directory
reiji@utm-ubuntu:~/practice$ mkdir -p country/japan
reiji@utm-ubuntu:~/practice$ ls country
japan
reiji@utm-ubuntu:~/practice$ 
```

## ディレクトリ削除 rmdir
```
rmdir ディレクトリ名
```
| オプション | |
| :--: | :-- |
| -p | 指定した階層までのディレクトリを一括で削除します。オプションを付けないで rmdir コマンドを実行した場合は、最下層のディレクトリのみ削除します。ただしいずれの場合も、対象とするディレクトリ内は空でなければなりません。 |
```
rm -r ディレクトリ名
```
| オプション | |
| :--: | :-- |
| -r | ディレクトリが空でなくても強制的に削除する |

## ファイルの中身を表示 cat
```
cat ファイル名
```
| オプション | |
| :--: | :-- |
| -n | 行番号を付加して表示します。 |

## ページャを使った表示 more less
```
more ファイル名
```
| 項目 | |
| :--: | :-- |
| スペース | 次のページに進む |
| b | 前の一画面に戻る |
| f | 次の一画面に進む |
| /文字列 | 検索。n キーで検索結果をジャンプします |
| q | ページャコマンドを終了 |
```
less ファイル名
```
| 項目 | |
| :--: | :-- |
| スペース | 次のページに進む |
| b | 前の一画面に戻る |
| f | 次の一画面に進む |
| ↑ | 前の行に進む |
| ↓ | 次の行に進む |
| /文字列 | 検索。n キーで検索結果をジャンプします |
| q | ページャコマンドを終了 |

## ファイルの検索　find
```
find パス -name ファイル名
```
```terminal:ubuntu
reiji@utm-ubuntu:~/practice/other$ find ~ -name apple
/home/reiji/practice/fruits/apple
```

## PATH環境変数に含まれるコマンドを表示
```
which コマンド名
```
```terminal:ubuntu
/home/reiji/practice/fruits/apple
reiji@utm-ubuntu:~/practice/other$ which cat
/usr/bin/cat
reiji@utm-ubuntu:~/practice/other$ which sudo
/usr/bin/sudo
```

## 使えるオプションを表示
```
コマンド --help
```

## マニュアルを表示
```
man コマンド名
```

## grep検索
```
grep [オプション] 検索条件 [指定ファイル]
```
| オプション | |
| :--: | :-- |
| -e | 文字列を検索パターンとして扱う。 |
| -i | 検索パターンと入力ファイルの双方で、英大文字と小文字の区別を行わない。 |
| -v | 検索パターンとマッチしなかった行を選択する。 |

## ソート
```
sort [オプション] ファイル名
```
| オプション | |
| :--: | :-- |
| -r | 逆順でソートする。 |
| -k n | n 列目のデータをソートする。 |
| -n | 数値としてソートする。 |
```terminal:ubuntu
reiji@utm-ubuntu:~/practice/other$ cat score
yoshinori kawazu 85
keiichi oka 70
toru minemura 100
reiji@utm-ubuntu:~/practice/other$ sort -r score
yoshinori kawazu 85
toru minemura 100
keiichi oka 70
reiji@utm-ubuntu:~/practice/other$ sort -k 2 score
yoshinori kawazu 85
toru minemura 100
keiichi oka 70
reiji@utm-ubuntu:~/practice/other$ sort -n -k 3 score
keiichi oka 70
yoshinori kawazu 85
toru minemura 100
```

## 連続した重複行の消去
```
uniq ファイル名
```
```terminal:ubuntu
reiji@utm-ubuntu:~/practice/other$ cat uniq-sample
AAA
BBB
AAA
CCC
CCC
DDD
reiji@utm-ubuntu:~/practice/other$ uniq uniq-sample
AAA
BBB
AAA //AAAは２つあるが連続していないため、消去されない
CCC
DDD
```

## 置換 tr
```
tr 文字列 1 文字列 2
```

## 比較　diff
```
diff [オプション] ファイル 1 ファイル 2
```
| オプション | |
| :--: | :-- |
| -c | context diff 形式で差分を出力します。 |
| -u | unified diff 形式で差分を出力します。 |
```terminal:ubuntu
reiji@utm-ubuntu:~/practice/other$ cat file1
test text
reiji@utm-ubuntu:~/practice/other$ cat file2
test text
new line
reiji@utm-ubuntu:~/practice/other$ diff file1 file2
1a2
> new line //異なる部分を出力
reiji@utm-ubuntu:~/practice/other$ echo "minus" >> file1
reiji@utm-ubuntu:~/practice/other$ diff -u file1 file2
--- file1	2024-03-12 22:58:29.200642380 +0000
+++ file2	2024-03-12 22:54:41.041533846 +0000
@@ -1,2 +1,2 @@
 test text
-minus //　マイナスはfile2にない行
+new line // プラスはfile2にしかない行

```

## 【vi】ファイルを開く
```
vi ファイル名

※閉じる ESC→:q
※保存する ESC→:w
※保存して閉じる ESC→:wq
※強制終了 ESC→:q!
```
| コマンドモード | |
| :--: | :-- |
| :q | 閉じる |
| :w | 保存する |
| :wq | 保存して閉じる |
| :q! | 強制終了する |
| i | インサートモードに切り替える |
| a | インサートモードに切り替える |
| fn+BackSpace | カーソルの右側を削除する |
| h | 左へカーソル移動 |
| j | 下へカーソル移動 |
| k | 上へカーソル移動 |
| l | 右へカーソル移動 |
| 0 | カレント行の文頭へカーソル移動 |
| $ | カレント行の文末へカーソル移動 |
| Ctrl + f | 次のページへ移動 |
| Ctrl + b | 前のページへ移動 |
| :行数 | 指定した行へ移動 |
| gg | 文頭へ移動 |
| x | 1文字削除 |
| dd | 1行削除 |
| yy | 1行コピー |
| nyy | n行コピー |
| p | カーソルの文字の次または次の行にペースト |
| P | カーソルの文字の前または前の行にペースト |
| u | カット、ペーストを一回取り消し（アンドゥ） |
| /検索文字列 | 文字列の検索 |
| n | 下方向へ再検索 |
| N | 上方向へ再検索 |
| :対象の行 s/検索文字列/置換文字列/オプション | 文字列を置換する |


| インサイトモード | |
| :--: | :-- |
| ESC | コマンドモードに切り替える |

## 文字列を出力する
```
echo [オプション] 文字列
```
| オプション | |
| :--: | :-- |
| -n | 改行を抑制します。通常の出力は改行されますが、このオプションがあると改行されません。 |
```terminal:ubuntu
reiji@utm-ubuntu:~/practice/shellscript$ apple=リンゴ
reiji@utm-ubuntu:~/practice/shellscript$ echo apple
apple
reiji@utm-ubuntu:~/practice/shellscript$ echo $apple
リンゴ
```