ドラクエで覚えるターミナルコマンド

# はじめに
　今年入社したエンジニアがまとめたものになります。
間違っているところも多々あるかも知れませんが、ご容赦下さい。

# まずは予備知識
・ルートディレクトリ・・・ファイル階層の頂点

・カレントディレクトリ・・・自分が今いるディレクトのこと

・絶対パス・・・別名フルパスと呼ばれているもの**ルートディレクトリから目的地までの経路のこと**
　　　　

・相対パス・・・**カレントディレクトリ**から見て目的地を示すもの
　　
#　１.移動をしましょう（cd,pwd）
## 1.まずは地図を確認します。（ファイルパス構造を確認する）



<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416620/befaf8ca-cf2d-5699-e7ec-0c3be9987658.png width=300>
今、勇者は**始まりの町**にいて目的地は**竜王の城**です。

## 2.移動しましょう。
勇者を移動させるコマンドは**cd(chang directory)**です。

```
$ cd ２番目の町
```
これで２番目の町に移動ができます。
勇者は行き先がないと心配なので見えるようにします。
コマンドは**ls(list)**です。

```
$ ls
```
ターミナルでこれを実行すると
![スクリーンショット 2019-05-22 20.33.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416620/d826523a-daf4-419f-7303-b3a8d6985929.png)
こんな感じで行き先が出ます。
なので、また**cd**を繰り返して**竜王の城**まで行きましょう。
※これは相対パスでの移動になります。
絶対パスでcd「を行うと一発で目的地までいけます。
たまに、勇者はいま何処にいるのか分からなくなるので現在地を示しましょう。
これまでの現在地を示すコマンドは**pwd(print working directory)**です。

```
$ pwd
```
をターミナルで打つと
![スクリーンショット 2019-05-22 20.54.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416620/e864e4ea-1f8b-a6f7-03be-782035aa50da.png)
と画像のように見ることができます。

勇者は突然ホームシックになったり、前の階層に帰りたくなります。
帰りたくなったら帰りましょう。

```
$ cd
```
と打つとホームシックになった勇者を家（ルートディレクトリ）に帰すことができます。

```
$cd ..
```
また、こう打つと一階層前に戻ることができます。

つまりは**cd=ルーラ**とういことになります。

#  2.　目的地の場所が分からない場合（find,grep）

毎回毎回、弄りたいファイルの場所が分かるものではありません。そんな時はfind、grepを
使うことで見つけることができます。

```
$ find ファイル名
```
で一覧を取得できますが、ターミナル上にたくさん出てきて分かりずらいので
オプションを使って検索する場面が多いと思います。以下によく使うオプションを示しておきます。

```
$ find 検索先 -name \*ファイル名
```
これがよく使うものかなと思います。
検索先　＝検索対象

＊ ＝　ワイルドカード

ん？ワイルドカードってなんぞやってなると思うので、簡単に説明すると
**マーク以降の文字列で一致すればなんでもいいよ**ってことです。

例えば

```
$find work -name \*work
```
と打つと**workディレクトリの中にあるworkの文字のものを探す**
となるので、ファイル形式などは一切関係なく
**work.txt**
**work.pdf**
**work.png**
といった感じでworkで一致したものはなんでもでできます。

**findはファル検索に使う**ということになります。

grepはfindがファイル検索に使われるのに対し、**対象のファイルから特定の文字列を探したい時に使います。**

```
$ grep 文字列　ファイル名
```
と打つと対象のファイルから文字列を検索し、一覧で出してくれます。
また、ファイルだけでなくディレクトりごと検索かけることもでき

```
$ grep 文字列　ディレクト名/*
```
でだすことはできますが、とてもたくさんの結果が帰ってくるため基本は
**findでファイルを見つけてからそのファイルを対象にgrepを使う**
のほうがいいと思います。

#3.　ファイルのコピー（cp）
```
$ cp ファイル名　コピー名
```
と打つとファイルをコピーすることができます。
ただこれは、同じディレクトリ内でしかこの書き方では通用しません。
別のディレクトリのファイルをコピーしたい時は、絶対パスで指定する必要があります。

```
$ cp 絶対パス　ファイル名　コピー名
```
と打つとできます。

また、ディレクトリごとコピーしたい場合もある思うのでそちらも記載しておきます

```
$ cp -r ディレクトリ名　コピー名
```
でできます。

#4.ログ確認

```
$ tail ファイル名
```
と打つと、ファイルの最終行から数行表示することができます。
tailは**最終行から10行**表示してくれます。
よく使うオプションも記載しておきます。

```
$ tail -f ファイル名
```
これを使うとファイルの追記を監視することができ、追記があるとその行を表示してくれます。
PHPなどはエラーするとページが停止してしまうので、これを使うとエラー箇所が簡単に分かります。

# 5. ファイルのリネーム
ファイルの名前を間違えてしまったので変えたい時に使うコマンドです。

```
$ mv 変更したいファイル名　新しいファイル名　
```
と打つことでファイル名を変更することができます。ファイルの名前の変更の際に注意点があり、新しいファイル名が
すでに存在する名前に変更しようとすると、mvコマンドの**ファイル移動が働いてしまいファイルが移動してしまう**
のでそこには注意する必要があります。

#6. その他のコマンド
その他によくみるコマンドを簡単な説明と共に乗せておきます

・　$cat ファイル名　->　ファイルの中身をみることができる
・　＄touch　名前　-> ファイルの新規作成、ファイルのタイムスタンプの変更
・　$mkdir  名前　-> ディレクトリの新規作成
・　$source ファイル名　-> ファイルに記載されているものを実行する。特にシェルの設定を即座に反映さる時に使用する
・　history -> これまで打ってきたコマンドを表示する。
・　chown 所有者名 ファイル名またはディレクトリ名 ->ファイルやディレクトリの所有者を変更するもの。（管理者権限がないと操作できない場合もある）
$ chmod -> アクセス権限を変更するもの

# 7. まとめ
　ターミナルコマンドはまだまだ知らないものがあるのでそれらを扱えるように積極的にターミナルコマンドを使って行きたい。個人的にはよく使うコマンドを覚えて置いて、それ以外はその都度調べていけばいいかなと思っております。