最低限これだけあれば何とかなる！?業務でよく使うコマンドたち

業務でよく使う基本のコマンドです。
初心者向けです。
最低限、ミニマムで覚えられるように複雑なものは載せていません！

紹介するコマンドたちは`--help`とつけると
どんなオプションがあるか表示されるので、`--help`してみてください:doughnut:

## tail -f

「ログ出して確認してみて！」
って最初この言葉を言われるのが怖かった...:scream:
なぜならパパっと出せなかったからです...

必要な情報は「ログファイルがどこにあるか」なので、
ここかなーと思うところを探して見つからなければ、まわりの人に「ログファイルがどこにあるか」聞いてください。
まずは、プロジェクト配下にlogsディレクトリがないか等見てみてください。

プログラムが動いている環境にアクセスして
`tail -f ログファイルの場所`。
`tail -f application/logs/20170202.log`みたいな感じです。

tailコマンドはそのファイルの最後の部分を表示するコマンドです。
オプションの-fは、ファイルの内容が増えた場合、新しい末尾を追加表示するオプションです。
だから、出すログファイルが合っていれば、アクセスするたびログが流れていくと思います。
表示を止める時はcontrol+cです。

他のオプションは[こちら](http://webkaru.net/linux/tail-command/)。
## grep -r

「○○の機能修正して！」
「はい、わかりました！」
→○○のソースってどこにあるんだ…:scream:

そんなときにgrepの出番です。
プロジェクトの中で検索ができます。

例えば「アルバム管理の機能修正して」なら
`grep -r "アルバム管理"`とか`grep -r "アルバム"`とか`grep -r "album"`とか…
最後の`grep -r "album"`は結果がたくさん出てきてしまうかもしれませんが
ソースのコメントに「アルバム管理」など書いてあればヒットします。

検索結果が表示されるので、これっぽいなというファイルを開いてみてください。
ちなみにオプションの-rは「再帰的に検索する」というオプションで
これをつけることで、そのディレクトリ以下のすべてのファイルから検索をしてくれます。

grepの他のオプションは[こちら](http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230786/?rt=nocnt)。

## find 
こちらもgrep同様検索ができます。
grepと違うのは、ファイルの種類を指定できたりと、細かなオプションが付けられること。
`find . -type f -name "*.php"`
とすると.phpのファイルをすべて表示してくれます。
*はワイルドカードなので、任意の文字列を入れていただいても使えます！

## locate
こちらも検索ができるもの。
grepやfindよりオプションが少なく、シンプルで処理が早いです。
ただ、あらかじめ作成したデータベースを使って検索するため（だから処理が早い）
データベースの登録が必要です。データベースの作成は`updatedb `コマンドでできます。

## pwd

今どのディレクトリにいるか見ることができます。

```
$ pwd
/c/work/project
```
みたいな感じです。

## cd

ディレクトリの移動に使います。
例えばworkに移動したい時。

```
$ pwd
/c/work/project
```
今projectディレクトリにいるとして…

##### 相対パスを使う場合
```
$ cd ../
```
今と比較してひとつ上へ。
`../`はひとつ上の階層を指します。

##### 絶対パスを使う場合
```
$ cd /c/work 
```
一番上の階層からフルで書きます。

## mkdir
ディレクトリが作れます。

## touch
ファイルがつくれます。

「project配下にsampleディレクトリ作って、その中にsample.phpファイルを作って」
みたいに言われた時にこうします。

```
$ cd /c/work/project
$ pwd
/c/work/project
$ mkdir sample
```
sampleディレクトリが作成されます。
`cd sample`でサンプルディレクトリに移動して
`touch sample.php`でファイルが作成されます。

## mv

↑で作ったようなファイルを移動させるコマンドです。
例えば/c/work/project/sample/sample.phpを
/c/work/project/配下に移動したい場合は以下のようにします。

`$ mv /c/work/project/sample/sample.php /c/work/project/sample.php`

## cp
ファイルやディレクトリをコピーするコマンドです。
使い方はmvと同じですが、こちらはコピーなので、移動元にもファイルが残ります。

## rm
ファイルやディレクトリを削除するコマンドです。
ディレクトリとその配下のものすべてを削除したい場合には-rオプションをつけて再帰的に削除します。
また-fオプションをつけると「本当に削除しますか？」と聞かれなくなるので、削除したいフォルダが配下にいくつもファイル・フォルダを持っている場合には
`rm -rf`とします。
このオプションはcpも共通です。

## ls

ファイルやディレクトリの情報を表示するコマンドです。
ディレクトリ配下に何のファイルがあるか確認できます。
例えば先ほどtouchコマンドで作ったsample.phpファイルがちゃんとできているか確認したい時。

```
$ pwd 
/c/work/project/sample
$ ls
sample.php
```

## chmod
権限（パーミッション）を変更するコマンドです。
ファイルを編集したり実行したり読み込もうとして「アクセスが許可されていません」系のエラーが出た時などに使います。

##### 使い方
①まずは`ll` または`ls -l`を使って権限を確認します。
`ls`の`-l`オプションはlongのlで、--format=longをつけても同じ結果が出ます。
ファイルの詳細も同時に表示するオプションです。
`ll` はls -lのエイリアスです。(※１)

```
$ ls -l
-r--r--r--  1 user group   115 4月 1 00:00 hoge.php
drwxr-xr-x  6 user group  4520 4月 1 00:00 piyo.php
```

この-rw-r--r--の部分が今回変更したい権限（パーミッション）です。
②パーミッションを変えます。

```
chmod 644 hoge.php
```

パーミッションの読み方についてはこちら。
http://qiita.com/masashi-t-h/items/5f4c4fa768642aad9e06

#### ※１ エイリアスについて
:star:エイリアスとは？
「別名」という意味で、その
名の通り、長いコマンドなどを任意の文字列で登録することができます。
最初の頃「長いしよく使うからエイリアス登録しちゃえば？」と言われたはいいものの
結局登録するのにすごく時間がかかって…ということがありました:scream:


:star:エイリアスの登録の方法
①ターミナルで`vi ~/.bashrc`をして、bashrcを開きます。
②エイリアスを書く。`alias pj='mysql -h project-db -u root -p project' `
→pjと打ってEnterを押すとmysql -h project-db -u root -p projectが実行されるようになります。
③`:wq`でvimを終了。
④`vi ~/.bash_profile`でbash_profileを開きます。
⑤起動時にbashrcを読み込むよう設定するため、一番下に`source ~/.bashrc`と書きます。
⑥ターミナルを再起動するか、再読み込みコマンド`source ~/.bash_profile`を実行します。

詳しくは[こちら](http://qiita.com/yutat93/items/b5bb9c0366f21bcbea62)。

## php -a

phpが入っていることが前提になってしまいますが
「md5で変換したらどうなるか」「日付をこの形式で出したらどうなるか」などを試してみるときに便利です。
`echo`をつけないと表示されないので注意。

```
$ php -a
Interactive shell
$ php > echo md5("password");
5f4dcc3b5aa765d61d8327deb882cf99
$ php > echo date("Y-m-d H:i:s");
2017-02-17 12:44:14
```

## echo
↑でも出てきたecho。
画面に文字列や数値、変数を表示するコマンドです。

## vim

ファイルを編集する時に使います。
`vim ファイル名`でファイルを開いて編集することができます。
ちなみに`vim 作成したいファイル名`でファイルを作成することもできます。

:star: iかaを押してinsertモードにすること
:star: :qで終了、:wqで上書き保存
:star: /で検索
が最低限、編集する時に必要だと思いました。
もっと便利なのは[こちら](http://qiita.com/zwirky/items/9932d7b3623da12982b0)へ。

## cat

ファイルの中身を見たいだけ（編集はしない)の時はこちら。
中身をいじってしまう心配がないので安心して使えます。
`cat` ファイル名

## diff
differenceのdiff。
その名の通り、違いを出力するコマンドです。
「AファイルとBファイルのdiffとって！」と言われたらこれです。
AファイルとBファイルに差分がないか見る場合には`diff Aファイル Bファイル`を実行します。
何も結果が帰って・こなければ完全一致、何か帰ってきたらその行が差分です。
オプション -s を付けると完全一致の場合も報告してくれるそうです！

## history
コマンドの履歴を出すことができます。
ちなみに↑ボタンでもコマンドの履歴を辿ることができます。
```
➜  ~ history 5
    1  ll
    2  cd work/play
    3  pwd
    4  cd ../
    5  git status
```

historyの後に数字をつけると過去のその件数分の履歴が表示されます。
`!番号`でそのコマンドを再実行することも可能です。
例えばもう一度pwdをしたい場合には`!3`で実行できます。