Linux初心者が覚えておくと便利なコマンド

# この文章について
コマンド初心者が覚えておくと便利なコマンドを紹介します。
(Linux/Debian系コマンド)

今回紹介するコマンドは基本的に初期インストールされています。

:::note warn
間違えているところがあったらご指摘ください!
:::

<details>
<summary>私の環境(参考程度に)</summary>

```os-version.sh
$ cat /etc/os-release

PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
```
```neofetch.sh
$ neofetch
       _,met$$$$$gg.          lemon73@*******-*******
    ,g$$$$$$$$$$$$$$$P.       -----------------------
  ,g$$P"     """Y$$.".        OS: Debian GNU/Linux 11 (bullseye) on Windows 10 x86_64
 ,$$P'              `$$$.     Kernel: 5.15.90.1-microsoft-standard-WSL2
',$$P       ,ggs.     `$$b:   Uptime: 3 mins
`d$$'     ,$P"'   .    $$$    Packages: 533 (dpkg)
 $$P      d$'     ,    $$P    Shell: bash 5.1.4
 $$:      $$.   -    ,d$$'    Terminal: Relay(9)
 $$;      Y$b._   _,d$P'      CPU: Intel i5-6400T (4) @ 2.207GHz
 Y$$.    `.`"Y$$$$P"'         Memory: 289MiB / 3848MiB
 `$$b      "-.__
  `Y$$
   `Y$$.
     `$$b.
       `Y$$b.
          `"Y$b._
              `"""
```
</details>

## ファイル操作系
#### ターミナルの見方
ターミナルを起動すると、次のような表示になります。
```terminal.sh
lemon73@*******-*******:/mnt/i/test$ 
```
これでは、
``` lemon73 ```がユーザ名、
``` *******-******* ```がパソコン名、
``` /mnt/i/test ```が場所となっています。
(私はWindowsでWSLを使っているため、``` /mnt/i/test ```はI:Drive内のtestというファイルにいるということになります。)

(以下の文章では``` lemon73@*******-*******:/mnt/i/test$  ```の部分を```$ ```に略します。)
<details>
<summary>今回のファイルの構成</summary>

```tree.sh
$ tree mnt/i/test
mnt/i/test (現在の位置)
├qiita.md
├qiita.txt
├qiita
│  └license
└.qiita.txt (隠しファイル)
```
</details>

### ls(現在の場所のファイルの表示)
現在の位置にあるファイルを表示できます。
##### 使用方法
- ``` ls ```
- ``` ls 場所 ```

##### 使用例
```ls.sh
$ ls
qiita.md qiita.txt qiita
```
Iドライブ内のtestのファイルの中に何が入っているかを見ることができます。

<details>
<summary>代表的な引数</summary>

- -a:隠しファイルの表示
```ls-a.sh
$ ls -a
. .. .qiita.txt qiita.md qiita.txt qiita
```
こちらでは、``` .qiita.txt ```が隠しファイルになっています。
- -l:情報の表示(権限など)
```ls-l.sh
$ ls -l
合計 0
drwxrwxrwx 1 lemon73 lemon73 512  7月  8 21:15 qiita
-rwxrwxrwx 1 lemon73 lemon73   0  7月  8 21:14 qiita.md
-rwxrwxrwx 1 lemon73 lemon73   0  7月  8 21:14 qiita.txt
```
</details>

<details>
<summary>その他使用例</summary>

lsの後に場所を書くことで、他の場所のファイル内を見ることもできます。
例1:``` qiita ```ファイル内を見るとき
```ls-qiita.sh
$ ls qiita
(または ls ./qiita)
license
```
例2:親ファイル内を見るとき
```ls-test.sh
$ ls ../
test read-me.txt
```
</details>
(類似コマンドとしては、treeコマンドがあります。)

### cd(場所移動)
現在位置の変更を行えます。
##### 使用方法
- ``` cd 場所 ```

##### 使用例
```cd.sh
/mnt/i/test$ ls
qiita.md qiita.txt qiita
/mnt/i/test$ cd qiita
/mnt/i/test/qiita$ 
```
testディレクトリ内にあるqiitaディレクトリに移動しています。

### cat(ファイルの表示)
ファイルをテキストエディタなどで開かずに、中に何が書かれているかを表示できます。
誤って書き換える心配がないので、システムファイルなどを閲覧する際に役に立ちます。
##### 使用方法
- ``` cat ファイル名 ```

##### 使用例
```cat.sh
$ ls
qiita.md qiita.txt qiita
$ cat qiita.md
# Qiita
Qiitaさいこー!!
```

:::note
にゃんにゃん
:::

<details>
<summary>便利な使用例</summary>
Linuxのバージョンを手軽に表示する方法

```linux-version.sh
$ cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
```

</details>

### cp(ファイルのコピー)
ファイルのコピーができます。
##### 使用方法
- ``` cp コピー元ファイル コピー後の名前 ```

##### 使用例
```cp.sh
$ ls
qiita.md qiita.txt qiita
$ cp ./qiita.md ./hogehoge.md
$ ls
hogehoge.md qiita.md qiita.txt qiita
```
同ディレクトリ内のqiita.mdからhogehoge.mdという名前のコピーを作成しています。

### mv(ファイルの移動)
ファイルの移動や名前変更が行えます。
##### 使用方法
- ``` mv 移動前ファイル 移動後の場所 ```

##### 使用例
```mv.sh
$ ls
qiita qiita.md qiita.txt
$ ls ./qiita
license

$ mv qiita.md ./qiita/

$ ls
qiita qiita.txt
$ ls ./qiita
qiita.md license
```
<details>
<summary>treeコマンド使用バージョン</summary>

```mv.sh
$ tree
.
├qiita
│ └license
├qiita.md
└qiita.txt
1 derectory. 3 files
$ mv qiita.md ./qiita/
$ tree
.
├qiita
│ ├qiita.md
│ └license
└qiita.txt
1 derectory. 3 files
```
</details>

### rm(ファイルの削除)
ファイルの削除ができます。
ファイルの削除には管理者権限が必要な場合が多いので、使えるならsudoで実行するのをお勧めします。
##### 使用方法
- ``` rm 削除するファイル名 ```

##### 使用例
```.sh
$ ls
qiita.md qiita.txt qiita
$ sudo rm ./qiita.md
$ ls
qiita.txt qiita
```

<details>
<summary>代表的な引数</summary>

```.sh
$ sudo rm ./qiita -r
$ ls
qiita.txt
```
``` -r ```でディレクトリと、その中のファイルを削除します。
</details>

<details>
<summary>その他の例</summary>

```.sh
$ ls
qiita.md qiita.txt qiita
$ sudo rm ./*
$ ls
(空)
```
``` ./* ```でディレクトリ内のファイルをすべて削除できます。
</details>

:::note alert
**危険**
絶対に実行してはいけません。
(パソコン内のファイルを全部削除するコマンド)

```all-remove.sh
$ sudo rm -r /*
```
```all-remove.sh
$ sudo rm -rf /
```
(参考: [sudo rm -rf / ](https://qiita.com/SHINE/items/01926ba6abd0c8988e1a))
:::

### vim(ファイルの編集)
コマンドライン上で使えるテキストエディターです。
vimの他にも、Emacsやnano、vimの後継のneo vimなどがあります。
おそらくssh接続するときはこれを使う羽目になるので、基本操作を覚えておくとよいでしょう。

##### 起動方法
- ``` sudo vim ファイル名```
(おそらくsudo権限がないと閲覧しかできません。)

##### 使用方法
<details>
<summary>編集モード</summary>

- ```a```: 挿入モードに入る

保存
- Shift + ```ZZ```: 上書き保存
- ```:q!```: 保存せずに終了

ショートカット
- ```yy```: 1行コピー(vimではヤンクと言います)
- ```p```: 下の行にペースト
- Shift + ```P```: 上の行にペースト
- ```dd```: 1行削除

カーソル移動
- ```h```: カーソルを左に移動
- ```j```: カーソルを下に移動
- ```k```: カーソルを上に移動
- ```l```: カーソルを右に移動
</details>
<details>
<summary>挿入モード</summary>

(挿入モードでは文字入力が可能です。)
- Esc: 編集モードに戻る
</details>

## おまけ
### curl(インターネット)
ネットワーク系のエンジニアとかがたまに使っているらしいです。

状態コード(404エラーなど)が出せるらしいです。
##### 使用方法
- ``` curl リンク ```
##### 使用例
```curl.sh
$ curl ja.wttr.in/Tokyo
天気予報： tokyo

                曇り
       .--.     +25(28) °C
    .-(    ).   ↗ 43 km/h
   (___.__)__)  10 km
                0.0 mm
…(省略)
```

### apt update/apt full-upgrade(更新)
アップデート/更新の時に使います。
##### 使用方法
- ``` sudo apt update -y ```
- ``` sudo apt full-upgrade -y ```

### exit(終了)
終了する際に使用します。
もし、vimなどが使用途中の場合は警告してくれます。
##### 使用方法
- ``` exit ```