改めてLinuxコマンドを理解する【cd,pwd,ls編】

## はじめに
ITスクールRareTECHでCS（Customer Support）を担当している池村です！
好きな技術はシェル周り全般で、Go、Python、Javaはある程度書けますが、フロントは苦手です。

今回はLinuxコマンドの初歩の初歩であるcdコマンドとpwdコマンド、そしてlsコマンドの三つを解説していきたいと思います。

※私はMacユーザーですので、Macのターミナルを利用したスクショを添付しています。
※こちらの記事は完全に超初心者向けに執筆しています。


## CUIとGUIについて
コマンドの説明の前に、CUIとGUIの違いを理解する必要があります。要はPCに指示を出す時の手法の違いです。今回の記事でご紹介するコマンドは基本的にCUIで使うものであり、今まで普通にPCを使ってきた人にとっては馴染みがないでしょう。

まずはGUIですが、これは「Graphical User Interface（グラフィカルユーザーインターフェース）」の略です。PCを普段使う人がよくみる画面ですね。マウスによるダブルクリックや戻るボタンなど、**要はグラフィカルにPCに指示を出せる手法全般**を言います。

![GUIの例](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/e22c0038-50ac-eadd-e99c-e1844699c5af.png)

次にCUIですが、これは「Character User Interface（キャラクターユーザーインターフェース）」の略です。エンジニアの方がよく使用する画面です。要はコマンドなど、**文字入力によってPCと対話的に指示を出せる手法全般**を言います。別名としてCLI「Command Line Interface(コマンドラインインターフェース）」とも言います。
![CUIの例](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/7e127048-8a10-f3c4-ffd5-e6226fe539d8.png)


## cdコマンドとpwdコマンドとlsコマンド

#### ディレクトリという言葉を押さえよう
初学者はまずディレクトリという言葉に慣れる必要があります。要はフォルダと同じようなものです。ただ、概念的にGUIではフォルダ、CUIではディレクトリと言います。エンジニアを目指す人はディレクトリという名前に慣れていきましょう。

#### pwdコマンド
Print Working Directory（プリントワーキングディレクトリ）の略です。こちらのコマンドは、**今自分のいる場所を教えてくれるコマンド**です。
頭に？が浮かぶと思いますが、このコマンドと次に紹介するlsコマンドとcdコマンドはセットで解説します。

#### lsコマンド
List Segments（リストセグメンツ）なのかただのList（リスト）なのか曖昧ですが、有識者曰く多分後者の略。こちらのコマンドは、今いるディレクトリの中にあるディレクトリやファイルなどを一覧で表示してくれるコマンドです。

#### cdコマンド
Change Directory（チェンジディレクトリ）の略です。ディレクトリの移動をします。

#### ホームディレクトリ
まずLinuxでもMacでも（Windowsだとしても）、最初に訪れる場所はホームディレクトリという場所です。例えば、Macでターミナルを開きます。
![ターミナルを開く①](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/333d62d9-b3d0-b8d5-c89d-6204e43789b6.png)
私のターミナルは見た目をいじっているので、必ずしも同じような見た目のものは出てきませんのでご注意ください。
![ターミナルを開く②](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/c4f40446-4fce-e64d-4305-c2a6c06abccd.png)

この開いた時点でいる場所がホームディレクトリです。
私は以下の画像のようなイメージを持っています。CUIを開いた時点で、ホームディレクトリという部屋の中に降り立ったイメージです。周りに扉がありますが、今は気にしないでOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/952df048-2bfc-f8db-e4b2-f0c8165e450e.png)

ではまずはpwdコマンドを打ってみましょう。pwdと打ってEnterキーです。
```
pwd
```
実行結果
![pwdの実行結果](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/9eac4964-eab8-7707-8d4b-d837037e2d6f.png)

```
/Users/ren
```

これが私のPCのホームディレクトリを指し示しています。
この『/Users/ren』は絶対パスと相対パスの概念理解をする必要があるので、記事後半で説明します。

次にlsコマンドを打ってみましょう。lsと打ってEnterキーです。
```
ls
```

![lsの実行結果](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/7b213d00-9a90-bdb5-ff9a-82bd2afa6f08.png)

lsコマンドを打つと、そのディレクトリの中にあるディレクトリやファイルの一覧が表示されます。私のホームディレクトリには19個のディレクトリがあるようですね。

では実際にディレクトリの移動をしてみます。
cdコマンドを使いましょう。
```
cd 移動したいディレクトリ名
```

今回の私の環境ではDownloadsのディレクトリに移動してみます。
```
cd Downloads
```

![cdの実行結果](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/8affbeec-3254-6de7-6c0d-9aefa6fb952b.png)

ここまでの基本的な流れを振り返ります。
1. pwdコマンドで、今いるディレクトリの場所を確認する
1. lsコマンドで今いるディレクトリの中にあるディレクトリやファイルを確認する
1. cdコマンドで好きなディレクトリに移動する

#### CUIとGUIはどう違うのか？
私は先ほどダウンロードのディレクトリに移動しました。
これはGUIでダウンロードのフォルダに移動しているのと一緒です。
![ダウンロードフォルダ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/eaeba2ba-6e3f-6c8b-ed76-b180c64fc915.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/14af7bb4-f959-20b0-2e2e-b37b2d3cd1df.png)

CUIとGUIを見比べてみると、同じファイルとディレクトリがありますよね？
GUIで言うフォルダをダブルクリックすることや戻るボタンを押すことは、CUIでいうところのcdコマンドを叩いて移動していることと一緒です。

ちなみにcdでディレクトリに移動するイメージを先ほどの白い部屋で表すと以下のようになります。![ディレクトリの移動のイメージ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/f5b8fb54-c2d7-fe89-363a-095c723954c2.png)

ディレクトリの移動は扉を開けて次の部屋に入るイメージですね。部屋に入れるし、戻ることもできる。
まずはこんなイメージを頭に浮かべて操作していきましょう。


## 絶対パスと相対パス
先ほどの『/Users/ren』について解説していきます。
そのためには絶対パスと相対パスを理解する必要があることは、先ほど少し記載しています。

#### Linuxのファイルシステムについて
Linuxでは/（ルート）を一番上として、そこから枝葉のようにディレクトリが分かれています。
私のホームディレクトリを再度確認してみます。
```
/Users/ren
```
これは、/（ルート）ディレクトリの中にあるUsersというディレクトリの中のrenというディレクトリの中にいることを示しています。なので、renというディレクトリにはさらに19個のディレクトリがあるようですね。

#### 絶対パス
ここで出てくる概念が絶対パスです。
/（ルート）から今いるディレクトリや、/（ルート）から特定のディレクトリまでの道筋を絶対パスと言います。
なのでpwdコマンドで表示されるのは/（ルート）から書かれているので絶対パスですね。

ホームディレクトリの中のTrainingディレクトリに移動して、そこでpwdコマンドを叩いてみます。
![絶対パス](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/ba0119b1-1e22-1de4-2cb4-a2efb95da143.png)

移動をしてpwdコマンドを叩いてみました。
```
/Users/ren/Training
```

Trainingというディレクトリにいることが絶対パスで表されていますね。

では次にcdコマンドで絶対パスを使用してみます。今回はTrainingディレクトリにいる状態から、ホームディレクトリ配下のDownloadsディレクトリに移動してみます。
```
cd /Users/ren/Downloads
```
結果は画像の通りです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/fb30bbaf-534b-b42b-b9fa-907cfccfa655.png)

絶対パスを使用して移動する以外にもう一つ方法があります。それが次に紹介する相対パスです。

#### 相対パス
相対パスは、**今いるディレクトリから見て**、目的のディレクトリやファイルまでの道筋を表す書き方です。まず、Linuxで今いるディレクトリや、一つ前のディレクトリをどう表現していくのか見ていきましょう。

```
cd .
```

まず、Linuxにおける『.』（ドット）は、今いるディレクトリを表しています。
なので上記のコマンドは今いるディレクトリに移動する、なんの意味もないコマンドですね。

```
cd ..
```

この場合は一つ前のディレクトリを表しています。
なので、このコマンドを叩くと、一つ前、画像のような移動になります。
![一つ前に戻る](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/56afaed8-7bd9-415b-03d4-f8bab141ea3a.png)

では再度Downloadsのディレクトリに戻って、相対パスでTrainingディレクトリに移動してみます。
```
cd ../Training
```
この書き方で移動が可能です。これが相対パスでの移動方法です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/bffa3561-dc27-347b-8c12-461e33591276.png)

絶対パスと相対パスは移動以外でも色々使いますが、それは今後の投稿する記事で紹介する予定です。まず初学者はcdでの移動に慣れていきましょう。

## おわりに
今回はcd、pwd、lsコマンドの初歩の初歩を解説しました。
MacとWindowsではシェルの勝手が違うのですが、Linuxコマンドをほぼそのまま使えるMacの方がエンジニアとして学ぶ技術総量が少し減るのでおすすめです。WindowsでLinuxコマンドを使いたい方は、WSLというツールがあるので調査してみると良いと思います。

今回はコマンドのオプションについてフル無視だったので、次の記事ではオプションと、おすすめの設定やツールをご紹介いたします。
次の記事はこちら👇

https://qiita.com/ikemura-ren/items/c139204eaf66540cd4af?1

まとめに戻りたい場合はこちら👇

https://qiita.com/ikemura-ren/items/3e7b6ec1b0cd9b3928d6