`cd`というコマンドを使ってみましょう。
## 頻繁に使うコマンド cd
前回見たように $PATH に入ってるディレクトリはディレクトリ名を省略して実行できるんでしたね。また、コマンドには文字を渡して実行できることも学びました。
```bash
$ cd /usr/bin
```
`cd` はChange Directory の略で引数に与えたディレクトリに現在のワーキングディレクトリを変更するコマンドです。要はディレクトリを移動するコマンドです。エクスプローラーでフォルダをダブルクリックするのと同じと思って貰えれば OK です。
何も表示されないので本当に移動できたのかわかりませんね。`pwd`で確認してみましょう。
```sh
$ pwd
```
![Image from Gyazo](https://i.gyazo.com/e81f19adbd03bfbf6bfd09b6fa7bb60e.png)
`/usr/bin`と表示されました。これまでは`/mnt/c/Users/komag`だったのが`/usr/bin`に移動してます。ではここで`ls`してみましょう
```bash
$ ls
```
![Image from Gyazo](https://i.gyazo.com/dcaee89b9a588db9f58fdbe946ccb403.png)
沢山出ました。ls コマンドは何も文字を渡さない場合は現在いるディレクトリ(カレントワーキングディレクトリといいます)のファイル一覧を表示します。今は/binの中のファイル一覧が表示されているわけです。
<div class="tips">
<h3>豆知識</h3>
<p>cdが成功したのに何も表示されないのでアレ?と思ってしまいますね。「黒い画面」では成功した場合は何も表示せず、失敗した場合には色々表示するのが普通です。</p>
<p>「黒い画面」では沢山のコマンドを組み合わせて使うので、一つ一つのコマンドがいちいち成功するたびに何かを表示していたら画面が文字で埋まって本当に知りたい情報が分からなくなってしまいます。</p>
<p>コマンドを絶対にそう作らなければならないという訳ではわりませんが、「問題が無ければ黙っていろ」そういう文化があります。</p>
</div>
## パソコン内の探索
cd と ls さえあればパソコンの中にどんなファイルがあるのか見て回ることができます。`/usr/bin`や `/usr/bin`以外にも適当なディレクトリに cd して ls してみてください。cd や ls することでパソコンが壊れることは無いので安心してください。
## 相対パス指定
「黒い画面」では「今いる場所(カレントワーキングディレクトリ)からみて一つ上のディレクトリ」や「今いる場所からみてfoo/barというディレクトリ」といった相対的な指定が出来ます。
..(ドット二つ)が一つ上のディレクトリ、.(ドット一つ)が今いるディレクトリ、foo/barは今いる場所から見てfoo/barというディレクトリ(先頭が/から始まるかどうかで決まります)という意味です。
これはhtmlやcssでも画像などを指定する時使うので分かると思います。../images/logo.png とか書きますよね?
これは実際にフォルダとして見ることが出来ます。`/usr/bin`に移動して、`ls`に`-a`を引数として渡して実行してみてください。
```bash
$ cd /usr/bin
$ ls -a
```
![Image from Gyazo](https://i.gyazo.com/d2190770b28153455fe67ea8e4592ac0.png)
ls に渡した-aという引数はオプションといって、コマンドにデフォルトとはちょっと違う動作をして欲しい時に渡します。
ls の -a は .(ドット)から始まる名前のファイルやディレクトリを表示するオプションです。つまり、デフォルトでは.hogeや.fugaというファイルを作っても見えないのです。.も..もドットから始まるファイルには違いないのでオプション無しでlsした場合は表示されません。
ホームディレクトリでls -aしてみてください。いつもFinderから見ていたフォルダに得体のしれないドットから始まる謎のファイルがいくつもあるはずです。これらドットから始まるファイルを「隠しファイル」または「ドットファイル」と言います。ホームディレクトリにあるコイツらは後々正体を小一時間ばかり問い詰めることにしましょう。
一個上のディレクトリ(..)も単なるディレクトリであるということが分かりました。ということは二つ上のディレクトリに移動したい場合は下記のようにできるということです。
```bash
$ cd ../..
```
三つ上のディレクトリに移動したい場合はこうです。
```bash
$ cd ../../..
```
komagataのホームディレクトリからmachidaのホームディレクトリにあるDocumentsディレクトリに移動する場合はこうです。
```bash
$ cd ../machida/Documents
```
軽く頭が混乱してきますね。今自分がどこのディレクトリにいるかはpwdで確認できますが、常に自分の頭の中で意識しておく必要があります。
<aside class="tips">
<h3>Linuxのディレクトリ構造</h3>
<p>パソコン内が探索出来るようになったのでLinuxのディレクトリ構成の概要を見てみましょう。(Ub主要なものだけ説明します)</p>
<pre class=" language-bash"><code class=" language-bash">/ - 一番上のディレクトリ
bin/ - 一般ユーザー向けのコマンド置き場
etc/ - 設定ファイル置き場(etcetraの略)
home/ - ユーザーのファイル置き場
komagata/ - ユーザーkomagataのファイル置き場
machida/ - ユーザーmachidaのファイル置き場
mnt/ - 他のデバイスをマウント(接続)する場所
opt/ - 追加のソフトのインストール場所(optionの略)
root/ - rootユーザーのファイル置き場
sbin/ - システム管理向けのコマンド置き場
srv/ - サイト固有のデータ置き場
tmp/ - 一時ファイル置き場(temporary filesの略)
usr/ - アプリ置き場
var/ - 変化するファイル置き場。ログなど。</pre></code>
<p>一番上の階層(/)のことをルートディレクトリと言います。rootとは木の根っこのことです。/を頂点として複数のディレクトリやファイルがぶら下がっている構造が木を逆さまに見たときに似ているからです。同じように、こういう階層構造全体の事を木という意味のツリー(tree)と言います。</p>
<p><img src="http://farm6.static.flickr.com/5128/5259850854_5e9122ef56.jpg" width="500" height="282" alt="unix-tree" /></p>
</aside>
cd で移動して ls で一覧するという流れがつかめたでしょうか。Part.03 はこのへんで失礼します。
## まとめ
- cdでディレクトリを移動できる
- 相対パスというものがある
- 普段は見えないドットファイルというものがある
- 自分の現在位置を確認しながらパソコン内を探索してみよう
[「本当は怖くない黒い画面」入門(Windows \+ WSL2編) Part.4](https://bootcamp.fjord.jp/articles/23)へ続く。
ブログ