【初心者向け】Linuxコマンドについて簡単に理解しよう【レベル別】

# はじめに
Linux初心者の方にコマンドの使い方を理解して使ってもらうための記事です。よく使うコマンドから順に解説していきます！記事を読むのと同時に実際に端末エミュレータ（Linuxターミナル）に入力して動きを確かめることをおすすめします！

以下の環境でLinuxを使うことをおすすめします
| OS | ターミナル |
|:-:|:-:|
| Ubuntu22.04  | 端末（ターミナル）  |
Windows10以降 | WSL2のターミナル |

# ディレクトリ構造について
コマンド操作をする前に、Linuxにおけるファイル管理について簡単に説明します。
Windowsのエクスプローラーというアプリを開いたらファイルがずらっとならんでいますが、あの中でpdfやWordファイルのような`~~.pdf`、`~~.docx`というように、`.`が含まれるデータを**ファイル**と言います。そのファイルを複数まとめて含んでいるものを **フォルダ（ディレクトリ）** と言います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3573929/7698186c-1c48-a795-c543-e3bd63588372.png)

ターミナルで打ち込むコマンドとは、**ディレクトリやファイル、その他Linuxの設定に対して何か操作を加える**ことです。

ディレクトリは階層構造になっていて、一番上を**ルートディレクトリ**と言い、記号で`/`と書きます。WindowsではCドライブの中にルートディレクトリがあります。

:::note info
WindowsとLinuxのディレクトリ構成の違いは、Windowsはディスクごとにディレクトリが始まるのに対し、Linuxは必ずルートディレクトリが一つになっているということです。複数ディスクがあればマウントする（ディレクトリ構造のどこかにディスクを新たなディレクトリとしてくっつける）手法をとってます。
:::

ユーザーが使うファイルの入っているディレクトリを**ホームディレクトリ**と言い、記号で`~`と書きます。ホームディレクトリはルートディレクトリの直下にあって、`/home`とも書きます。

ホームディレクトリ以下にユーザーの扱うファイルが連なっていきますが、そのファイルの繋がりを**パス**と言います。パスは２種類あって、

- ルートディレクトリから表していくことを**絶対パス**
- カレントディレクトリから順に辿って表すことを**相対パス**

と言います。

現在いるディレクトリを**カレントディレクトリ**と言い、記号で`.`と書きます。また、カレントディレクトリのすぐ上の階層のディレクトリ（**親ディレクトリ**）を`..`と書きます。

現在ホームディレクトリ直下のhogeというディレクトリ（記号で書くと`~/hoge`）にいると仮定してターミナルで書くと、
```bash
絶対パス：/home/user/hoge/hoge.txt
相対パス：./hoge.txt
```
となります。

:::note
ディレクトリ構造についてはコマンド操作をしていけば自然と理解できます！今は無理に理解しなくても構いません！
:::
# ターミナルの開き方
筆者は**Ubuntu**でターミナルを使うので、`Ctrl` + `Alt` + `T`と３つのボタンを同時に押します。

![Screenshot from 2024-02-21 20-02-21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3573929/da13488f-81e6-0d09-166e-b721314d3c00.png)

この画面が**ターミナル**です。ターミナルの一番上のところに緑色の文字が見えますね。ここには筆者の場合
```bash
ubuntu＠user:~ $
```
と書いてあります。これは
```bash
ユーザー名＠コンピューター名:ディレクトリ名 $
```
という意味であり、筆者の場合 <font color=green>ubuntu</font> というユーザー名が <font color=green>user</font> という PC の <font color=blue>~</font>（ホームディレクトリ）上で作業しているということを示しています。
　この入力欄左に常に表示されるこの文字列を **プロンプトストリング（Prompt String）** と呼びます。

## Linuxのコマンドの処理について
 この`$`の右を **コマンドライン** といい、実際にコマンドを入力する場所になります。ではこのコマンドラインでLinuxをどのように操作するのかというと、OSの中の**Linuxカーネル**というところがコマンドを処理します。コマンドを入力するターミナルを、OSの構成としては**シェル**といいます。シェルはユーザとLinuxとの間のインターフェースの役割があります。

では、いよいよコマンドの紹介に移ります！
# レベル１
まずは基本的なファイル操作を覚えましょう。このレベルが初心者の第一歩です、
## cdコマンド
**チェンジディレクトリ（<font color='red'>C</font>hange <font color='red'>D</font>irectiry）** の略で、<font color=red>現在あなたの操作しているディレクトリから他のディレクトリに移動する時に使用する</font>コマンドです。
### 方法
`cd`+`スペース`+`行きたいディレクトリ名`

![Screenshot from 2024-02-21 20-03-40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3573929/42cf1fd4-39df-f08c-92a7-914140067674.png)

青いところがそのディレクトリになっているでしょうか？

:::note
**cdコマンドの Tips**
- `cd` だけ入力すると **ホームディレクトリ `~`** に戻ることができます。
    以下の例はホームディレクトリ上にある `/foo/bar` ディレクトリからホームディレクトリ `~` に戻ります。
    ```bash
    :~/foo/bar $ cd
    :~ $
    ```
- `cd -` を実行すると一つ前のカレントディレクトリへ戻ることができます。
    以下の例は `~/foo/bar` ディレクトリから `~/fuga/hoge` ディレクトリに移動した後にもう一度 `~/foo/bar` ディレクトリに戻ります。
    ```bash
    :~/foo/bar $ cd ~/fuga/hoge
    :~/fuga/hoge $ cd -
    :~/foo/bar $ 
:::

## lsコマンド
**<font color=red>l</font>ist <font color=red>s</font>egments**の略で、<font color=red>カレントディレクトリの直下にあるファイルを表示する</font>コマンドです。
　実行すると以下のようにカレントディレクトリ上にあるファイルやディレクトリを一覧表示します。
### 方法

![Screenshot from 2024-02-21 20-04-56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3573929/cd1858ef-bac6-d3ab-daec-ae1dd836f4b0.png)

<font color=blue>青いところ</font>がディレクトリ
白いところがファイル
<font color=green>緑のところが</font>実行ファイル

という分類があります。

:::note info
他にも、コマンドの後ろに`-`を付けてオプションを足すことができて、
- `ls -a` ：隠しファイルを確認
- `ls -l` ：権限を確認

などの機能があります。
:::

## pwdコマンド
<font color=red>カレントディレクトリの絶対パスを表示する</font>コマンドです。
### 方法
```bash
$ pwd
/home/ubuntu/python_learn/test
```

# レベル２
レベル２では、レベル１で覚えたコマンドに加えて使うコマンドを紹介します。
## rmコマンド
**remove**の略で、<font color=red>指定したファイル及びディレクトリを完全に消す</font>コマンドです。通常の削除とは違い、このコマンドによって削除されたファイルは2度と修復できません。
### 方法
```
rm -rf turtle.py
```
`-rf`を付けることで、ディレクトリも含めて（`-r`）、強制的に（`-f`）、削除できます。
## mkdir コマンド
**<font color=red>m</font>a<font color=red>k</font>e <font color=red>dir</font>ectory**の略で、<font color=red>カレントディレクトリ直下にディレクトリを作る</font>コマンドです。
### 方法
試しに`test`という名前のディレクトリを作ってみましょう！
![Screenshot from 2024-02-21 20-06-50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3573929/9a409444-1182-55ac-7385-470aa0912c89.png)

`ls`コマンドで`test`の名前があることを確認しましょう！

:::note
`mkdir -p`で連結させてディレクトリを作ることができます。
:::

## mvコマンド
**<font color=red>m</font>o<font color=red>v</font>e**の略で、<font color=red>カレントディレクトリ直下にあるファイルをそのパスの先に移動させる</font>コマンドです。

### 方法
```bash
$ mv hello_button.py test/
$ cd test/
$ ls
hello_button.py
```

これも`ls`コマンドで確認しましょう！

## cpコマンド
**<font color=red>c</font>o<font color=red>p</font>y**の略で、<font color=red>カレントディレクトリ直下にあるファイルをそのパスの先に複製する</font>コマンドです。

### 方法
```bash
$ cp hello_button.py test/
$ cd test/
$ ls
hello_button.py
```
:::note
ディレクトリごとコピーしたい時は、`cp -r` を使います。
:::

:::note warn
演習問題１：
ターミナルを開いて、自分のLinuxにあるディレクトリをlsで覗いたり、mvで移動させたり、mkdirでディレクトリを作って見よう。
:::

# レベル３
ここからは、初心者を脱して、Linuxに慣れた人の使うコマンドになります。
## catコマンド
<font color=red>ファイルの中身を表示する</font>コマンドです。
### 方法
```bash
cat [ファイル名]
```

## lessコマンド
**<font color=red>Le</font>aner C<font color=red>SS</font>** 略で、<font color=red>ファイルの中身を1つのターミナルに表示する</font>コマンドです。ファイルの中身が長い場合はスクロールすることができます。
### 方法
```bash
less [ファイル名]
```
`k`キーで上に、`j`キーで下に行きます。`q`キーで終了します。
## findコマンド
<font color=red>`<検索開始ディレクトリ>`を起点にして、`<検索条件>`を満たすファイルのありかを探す</font>コマンドです。
### 方法
日本語にすると以下です。
```
find <検索開始ディレクトリ> <検索条件> <アクション>
```
では、**カレントディレクトリにあるfile-1.txtを探してパスを表示したい**となったら
```
find . -name file-1.txt -print
```
とします。`-print`の引数は付けなくてもいいです。

# レベル４
少しレベルアップして、ユーザ権限を理解しよう。これができるとどのファイルも編集できるようになります！
## sudoについて
レベル１はいわゆる初心者が必ずマスターするべきコマンドでした。初心者は管理者権限を知らなくても以上のコマンドは打ち込めたのですが、少し慣れてくると管理者権限が必要になるコマンドが増えてきますので、一応の意味は知っておきましょう！

sudoとは、**super user do**の略で、スーパーユーザというのが管理者という意味です。なので管理者権限で実行するべきコマンドの前に必ずこれを書きます。

:::note alert
私は普段このコマンドを**すどう**と呼んでいますが、**正式にはスドゥーと呼びます。**
:::

## chmodコマンド
**change mode**の略で、<font color=red>そのファイルの権限を変更する</font>コマンドです。これは管理者権限が必要なのでsudoを付けます

一般的にはシェルスクリプトなどに実行権限を付与することが多いので、`+x`のオプションを付けます。
### 方法
```bash
$ sudo chmod +x entry_exec.sh
```
するとこのようにファイルが緑色になります。
![Screenshot from 2024-02-21 15-20-57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3573929/ef6e3c46-faa9-3a51-0d5d-54363f7c6649.png)

`ls -l`コマンドを打ち込むと、
```bash
-rwxrwxr-x  1 ubuntu ubuntu   1378 12月 10 11:24 entry_exec.sh*
```

このように、左にある`-rwxrwxr-x`のように、すべてのユーザに`x`の文字（実行権限）が付いてることがわかります。

また、上記のユーザ権限の一覧に、`w`の文字が無いと書き込み禁止ファイルになりますので、sudoを使って管理者権限でファイルを変更することになります。

## シャットダウン、再起動
sudoを学んだら、シャットダウン、再起動もコマンドラインから指定できるので、紹介します。
### シャットダウン
```
sudo shutdown now
```

### 再起動
```
sudo reboot now
```
となります。コマンドラインからできると電源ボタンにカーソル合わせなくて良くて楽です！

# おわりに
よく使うコマンドを整理して紹介しました〜。解説してほしいコマンドとかあれば教えてください！

# 参考文献
[1] 新しいLinuxの教科書