---
# System prepended metadata

title: 4章【CLIのコマンドを学ぼう】

---

# 4章【CLIのコマンドを学ぼう】
[（前章）3章【CLIの使い方を学ぼう】](/o1hqARw2S0S-mQLGBA9vrQ)
[（次章）5章【CLIを使って操作してみよう】](/enhg8EK5Ra6KXNYKj-md5w)

---

## 学習の目標
本章では、CLIの操作に必須となる「コマンド」について学習します。
<br>

## カリキュラム内の表記について
カリキュラムでは、ターミナルやGit Bashでの実行部分を以下のように表記します。
`ターミナル / Git Bash`
```
$ ls
# カレントディレクトリの内容が表示される
```

実際の実行結果は以下のようになります。

![](https://i.imgur.com/pLa01lN.png)

こちらについて、以下2点の注意があります。

### (1) ＄
`$`は、ターミナルやGit Bashでの入力を表しています。実際に入力する必要はありません。
`$`ではなく`%`の方もいると思いますが、これは「シェル」の種類によるものです。
シェルとは受け付けたコマンドを実際に処理してくれるものです。
OSのバージョンによってデフォルトのシェルの種類が違う場合がありますが、
入力するコマンドは基本的には同じなので、今は気にせず進めてください。
また、カリキュラムのコマンドの表記は`$`で統一されています。
上の例では「ls」だけを入力します。

### (2) ＃
`#`の左には、コマンドや実行結果についての説明を付けています。
上の例では、「ls」を実行した際に、「# カレントディレクトリの内容が表示される」という文章が表示される訳ではありません。
また、左に`#`がついていない場合は、その内容が表示されることを意味します。
<br>


## コマンドの基本形
CLIでコマンドを実行するには、以下のように入力します。
なお、オプションや引数は省略できることがあります。
※以下は例です。実際に実行する必要はありません。
`ターミナル / Git Bash`
```
$ rm -f memo.txt
# rm：コマンド名
# -f：オプション
# memo.txt：引数
```

### オプション
「オプション（option）」とは、コマンドの後ろに付けることで、
実行するコマンドの機能をカスタマイズするものです。
オプションは基本的に以下の2通りの書き方がされます。
- 「-〇」（ハイフンの後にアルファベットが入ります。）
- 「--特定の英単語」（ハイフン2つの後に特定の英単語が入ります。）

なお、ハイフンが付かないオプションもあります。
また、2つ以上のオプションを同時に使用する場合は、以下のようにスペースで空けて入力します。
`ターミナル / Git Bash`
```
$ ls -l -a
# ls：コマンド名
# -l：オプション1
# -a：オプション2
```

加えて、ハイフン1つのオプションの場合は連結して入力することもできます。
以下の2つのコマンドは同じ意味です。
`ターミナル / Git Bash`
```
$ ls -l -a
$ ls -la
```

よく使われるオプションについては、後ほど説明します。


### 引数
「引数（ひきすう）」とは、コマンドに渡す値のことです。
主にファイル名やディレクトリ名、それらのパスを入力します。
コマンドによって、必要な引数の数が変わります。
引数が2つ以上必要な場合は、以下のようにスペースで空けて入力します。
`ターミナル / Git Bash`
```
$ mv memo.txt sample.txt
# mv：コマンド名
# memo.txt：引数1
# sample.txt：引数2
```
<br>


## よく使うコマンド
ここからは、実際によく使われるコマンドを紹介していきます。

### pwd
自分が現在いるディレクトリのパス、つまりカレントディレクトリのパスを表示します。
`ターミナル / Git Bash`
```
$ pwd
# カレントディレクトリのパスが表示される
```


### ls
ディレクトリの内容を表示します。
引数を付けずに「ls」のみで実行すると、カレントディレクトリの内容が表示されます。
`ターミナル / Git Bash`
```
$ ls
# カレントディレクトリの内容が表示される
```

また、後ろに引数としてパスを入力すると、
指定したパスにあるディレクトリの内容を表示できます。
`ターミナル / Git Bash`
```
$ ls Desktop/work
# Desktop/work：ディレクトリのパス
# 指定したディレクトリの内容が表示される
```


### cd
ディレクトリを移動します。
引数を付けずに「cd」のみで実行すると、ホームディレクトリに移動します。
移動後はpwdコマンドでカレントディレクトリを確認すると良いでしょう。
`ターミナル / Git Bash`
```
$ cd
# ホームディレクトリに移動する
```

また、後ろに引数としてパスを入力すると、指定したパスに移動します。
`ターミナル / Git Bash`
```
$ cd Desktop/work
# Desktop/work：ディレクトリのパス
# 指定したディレクトリに移動する
```


<span id="rm"></span>
### rm
ファイルを削除します。
「remove」の略です。
このコマンドは引数として、ファイル名が必須になります。
`ターミナル / Git Bash`
```
$ rm memo.txt
# memo.txt：ファイル名
# 指定したファイルが削除される
```

指定したファイルやディレクトリが存在しない場合は、「No such file or directory」というエラーを返します。
「そのようなファイルやディレクトリは存在しません。」という意味になります。
`ターミナル / Git Bash`
```
$ rm 存在しないファイルやディレクトリ名
rm: failed to remove ‘存在しないファイルやディレクトリ名’: No such file or directory
```

この文章が表示された場合は、カレントディレクトリが正しいか、スペルミスが無いか等を確認しましょう。

また、rmコマンドはそのままではディレクトリの削除は行えません。
削除しようとすると以下のようなエラーになります。
`ターミナル / Git Bash`
```
$ rm ディレクトリ名
rm: cannot remove ‘ディレクトリ名’: Is a directory
```

「これはディレクトリなので削除できません」という意味のエラーが表示されます。
この場合、ディレクトリも対象にする「-r」オプションか、
強制的に実行する「-f」オプションを付けると削除できるようになります。
`ターミナル / Git Bash`
```
$ rm -f ディレクトリ名
$ rm -r ディレクトリ名
```

なお、引数なしの「rm」のみで実行すると、以下のようなエラーになります。
`ターミナル / Git Bash`
```
$ rm
rm: missing operand
Try 'rm --help' for more information.
```

「オペランド（コマンドの命令対象になるデータのこと）が欠落しています。
詳しい情報を確認するには『rm --help』を実行してください」
という意味になります。
「--help」オプションをつけると、コマンドの使用方法が表示されます。
`ターミナル / Git Bash`
```
$ rm --help
# コマンドの使用方法が表示されます。
```

表示内容が英語でかつ量が多いためびっくりされると思いますが、
必要な箇所だけ翻訳をかけると理解しやすくなります。

**このように、「Try 'コマンド名 --help' for more information.」と表示された場合は、
入力漏れやスペルミスによってコマンドの使い方を誤っていますので、よく確認しましょう。**


### touch
新規ファイルを作成します。
このコマンドは引数として、ファイル名が必須になります。
`ターミナル / Git Bash`
```
$ touch memo.txt
# memo.txt：ファイル名
# 指定したファイル名の新規ファイルが作成される
```

### mkdir
新規ディレクトリを作成します。
「make directory」の略です。
このコマンドは引数として、ディレクトリ名が必須になります。
`ターミナル / Git Bash`
```
$ mkdir test
# test：ディレクトリ名
# 指定したディレクトリ名の新規ディレクトリが作成される
```

### rmdir
ディレクトリを削除します。
「remove directory」の略です。
mkdirと同じく、このコマンドも引数としてディレクトリ名が必須になります。
`ターミナル / Git Bash`
```
$ rmdir test
# test：ディレクトリ名
# 指定したディレクトリが削除される
```

先ほどのrmコマンドとは反対に、rmdirコマンドはファイルの削除は行えません。
注意しましょう。


### cp
ファイルやディレクトリを、別のディレクトリにコピーします。
「copy」の略です。
このコマンドは①コピーさせるファイルやディレクトリ名、②コピー先のパス、の2つの引数が必須になります。
以下では①、②と表記しています。
`ターミナル / Git Bash`
```
$ cp memo.txt test
# memo.txt：①
# test：②
# ①で指定したファイルやディレクトリのコピーが②に作成される
```

引数が1つだけだと②が無いと判定され、以下のようなエラーになります。
`ターミナル / Git Bash`
```
$ cp memo.txt
cp: missing destination file operand after ‘memo.txt’
Try 'cp --help' for more information.
```


### mv
「move」の略です。
このコマンドには2つの用途があります。

#### (1) 移動
ファイルやディレクトリを、別のディレクトリに移動します。
cpコマンドと同様に、このコマンドは①移動させるファイルやディレクトリ名、②移動先のディレクトリのパス、の2つの引数が必須になります。
以下では①、②と表記しています。
`ターミナル / Git Bash`
```
$ mv memo.txt test
# memo.txt：①
# test：②
# ①で指定したファイルやディレクトリが②で指定したパス直下に移動される
```

ただし、**②が存在しないパスの場合は次の(2)名前変更になります。**


#### (2) 名前変更
ファイルやディレクトリを、別の名前に変更します。
こちらの機能では、①名前を変更したいファイルやディレクトリ名、②変更後のファイルやディレクトリ名、の2つの引数が必須になります。
`ターミナル / Git Bash`
```
$ mv memo.txt sample.txt
# memo.txt：①
# sample.txt：②
# ①で指定したファイルやディレクトリ名が②に変更される
```
ただし、**②が既に存在しているディレクトリのパスの場合は(1)移動になります。**

なお、②に「既に存在しているファイルのパス」を指定する場合には注意が必要です。
まず、①でファイル名を入力した場合、「名前は②、中身は①」のファイルができます。
②の内容を①で上書きする、という処理になります。
`ターミナル / Git Bash`
```
$ mv ファイル1 ファイル2
# ファイル1は無くなる
# ファイル2の内容がファイル1のものに上書きされる
```


次に、①でディレクトリ名を入力した場合、以下のようなエラーになります。
`ターミナル / Git Bash`
```
$ mv ディレクトリ ファイル
mv: cannot overwrite non-directory 'ファイル' with directory 'ディレクトリ'
```

「ディレクトリではない『ファイル』を『ディレクトリ』で上書きできません」という意味になります。
（overwriteは「上書き」という意味です。）


### history
コマンドの実行履歴を表示します。
`ターミナル / Git Bash`
```
$ history
# コマンドの実行履歴が表示される
```

### exit
CLIを終了します。
`ターミナル / Git Bash`
```
$ exit
# CLIが終了する
```
Windowsの場合、自動的にGitBashのウィンドウが閉じますが、
Macの場合は以下のように[プロセスが完了しました]で止まります。
左上の赤いボタンをクリックし、ウィンドウを閉じましょう。

![](https://i.imgur.com/0vYUEG2.png)


<br>


## よく使われるオプション
利用可能なオプションはコマンドそれぞれで異なりますが、
ある程度共通して用いられるものもあります。
ここではその一例を紹介します。

### -a / --all
隠しファイルも対象にします。
`ターミナル / Git Bash`
```
# 例
$ ls -a
```

### -f / --force
強制的にコマンドを実行します。

**！注意！**
実行しても問題がないことをきちんと確認してから使用しましょう。
例えば以下コマンドを実行すると、<b style="color: #f00;">現在のディレクトリの中身が全て問答無用で削除されてしまいます。</b>
`ターミナル / Git Bash`
```
$ rm -rf *
# 現在のディレクトリの中身が強制削除される
```

### --help
コマンドの使用方法（マニュアル）を表示します。
`ターミナル / Git Bash`
```
$ rm --help
# rmコマンドのマニュアルが表示される
```


### -i
確認ステップを追加します。
このオプションを付けて実行すると、以下のような確認メッセージが表示され、処理が止まります。
`ターミナル / Git Bash`
```
$ rm -i memo.txt
rm: remove regular file ‘memo.txt’?
```
この状態で「yes」または「y」を入力し、Enterを押すと削除されます。
それ以外の文字を入力すると処理がキャンセルされ、削除されません。

### -r
ディレクトリも対象にします。
このオプションを付けずに実行すると、以下のようなエラーが表示されることがあります。
`ターミナル / Git Bash`
```
$ rm -r ディレクトリ名
```

### -R
ディレクトリに対し再帰的に実行する。

#### 例
例えば以下のようなファイル構成を考え、作業ディレクトリはtestとします。
（※拡張子は省略していますが、x,yはここではディレクトリではないとします。）
```
test
- dir1
  - x1
  - x2
  - x3
- dir2
  - y1
  - y2
```

まず、以下のように何もオプションを付けずに実行すると、「dir1 dir2」のみ表示されます。
`ターミナル / Git Bash`
```
$ ls
dir1 dir2
```

次に、「-R」オプションを付けて実行すると以下のようになります。
`ターミナル / Git Bash`
```
$ ls -R
.:
dir1 dir2

./dir1:
x1 x2 x3

./dir2:
y1 y2
```
dir1, dir2に対してもlsコマンドが実行されたような結果になります。
lsコマンドは「ディレクトリの中身を一つ一つ表示する」コマンドになりますが、
「-R」オプションを付けることで、中身にディレクトリが含まれていたら、それに対しても処理を行い、そのまた中身にディレクトリが含まれていたら...といった動きになります。
マトリョーシカと同じイメージになります。
これが「再帰的」が表す意味です。


### -v / --version
バージョンを確認する。

`ターミナル / Git Bash`
```
$ ls --version
# lsコマンドのバージョン情報が表示される
```

<br>


## 覚えておきたい機能
コマンド、オプションとは別に、覚えておきたい機能を紹介します。

### Tabキーによる入力補完
ファイル名やディレクトリ名を入力する途中でTabキーを押すと、
候補を自動的に入力してくれます。
例えばカレントディレクトリ内で「test」というディレクトリがあった場合、
「te」や「t」を入力後にTabキーを押すことで補完されます。
![](https://i.imgur.com/m6c4nWv.png)
![](https://i.imgur.com/ZzqlLre.png)

また、候補が複数ある場合、Tabキーを2,3回連打することで、候補の一覧が表示されます。

![](https://i.imgur.com/Wy1GBCV.png)

### ↑キー／↓キー
コマンドの実行履歴を1つ上／下に移動します。

lsやcdコマンドなどの入力数が少ないコマンドは↑キーではなく直接入力する方が早いですが、
今後学習する上で、文字数が長いコマンドを複数回利用することもあるため、
↑キー／↓キーを活用していきましょう。

<br>



## 本章のまとめ
コマンドを利用していく上で最低限、必要な知識とコマンドを学習しました。
コマンドの種類はたくさん存在していて、それぞれのコマンドのオプションも合わせると膨大な量になります。
ですが、全てのコマンドとオプションを覚える必要はなく、必要な時に適切なコマンドを調べて使えるようになれば充分です。

次章では実際に手を動かしていきます。
本章の内容を参照しながら進めていきましょう。

[前の章へ](/o1hqARw2S0S-mQLGBA9vrQ) | [一覧](/bvG7awAKQPWGcQ8TRyCI4w) | [次の章へ](/enhg8EK5Ra6KXNYKj-md5w)