コマンドチートシート

#はじめに
自分用にDocker, Rails,　基本のLinuxコマンドなど全部まとめてます。
雑多にメモを残してるだけなので、わかりづらいかもです。


#めちゃめちゃ便利なサイト見つけた

https://tunepolo.github.io/til/heroku/basic_command/

↑Heroku, Docker, Git, CircleCIなど、主要コマンドとかほとんど載ってる気がします。
便利。

#基本

| 1 | 2 |
|:-:|:-:|
| マシンスペックの確認  | % sw_vers`  |
| CPU 物理コア数を確認  |  $ sysctl -n hw.physicalcpu_max |
|  CPU 論理コア数を確認 | sysctl -n hw.logicalcpu_max  |
| 物理メモリの総量を確認  |  sysctl hw.memsize |



#Docker

######[Docker公式リファレンスはこちら](https://docs.docker.jp/compose/faq.html)
復習用に用語を軽くまとめておきます
・Docker image: コンテナの元になるやつ
・Dockerfile: Docker imageを作るための設計書
・docker-compose.ymlとは？:サービスなど定義する YAML ファイルのことを「Compose ファイル」と呼ぶ。これを使わないと、コマンドを叩く回数が増えてとても面倒臭い事になる。

###dockerfileのコマンドについて

FROM : 使用するイメージとバージョンを設定
RUN : コマンドの実行
WORKDIR : 作業ディレクトリを設定
COPY :　ローカルのファイルをコンテナへコピー
ENTRYPOINT : 一番最初に実行するコマンドを設定
EXPOSE : コンテナがリッスンするport番号を設定
CMD :　イメージ内部のソフトウェア実行

※CMD
DockerFile実行時にデフォルトで実行したいコマンドを記載する。デフォルトなのでDockerFile実行時の引数をもって上書き可能。

※ENTRYPOINT
DockerFile実行時に必ず実行したいコマンドを記載する。docker runするときに --entrypoint で上書き可能。

###docker-compose.ymlのファイル解説([参考記事](https://bityl.co/6EZK))

```docker-compose.yml

version: "3.8"  # この「Compose ファイルの書式のバージョン」
services:       # 「サービス」を定義する項目
  web:            # "web" という名前で「サービス」を定義
    image: adminer  # "adminer" の「イメージ」を使用
    ports:          # ホストの「ポート番号」とコンテナーの「ポート番号」を対応付けを定義します
      - 8080:8080     # ホストの「ポート番号」 8080 とコンテナーの「ポート番号」 8080 を対応付けます
  db:             # "db" という名前で「サービス」を定義
    image: mysql    # "mysql" の「イメージ」を使用
    environment:    # コンテナーに「環境変数」を設定します
      # ↓ "MYSQL_ROOT_PASSWORD" という「環境変数」に "example" という値を設定します
      MYSQL_ROOT_PASSWORD: example
```
| 用途 | command |
|:-:|:-:|
| Dockerにログインする | docker login |
| 起動  |  docker-compose up |
| 停止  |  docker-compose down |
|  DB作成 | docker-compose run web rails db:create  |
| DB更新  |  docker-compose run web rails db:migrate |
|  コンテナ再起動 | docker-compose restart  |
| 既存コンテナに入る | $docker exec {コンテナ名}|
| railsコンテナ内のbashに  | docker-compose exec web bash  |
|  vueコンテナ内のbashに | docker-compose exec vue bash  |
|  サーバー停止 |  docker-compose run web rm tmp/pids/server.pid |
|  サーバー起動 | docker-compose run web rails s  |
| 全コンテナ停止  |  docker stop $(docker ps -q) |
|  全コンテナ削除 |  docker rm $(docker ps -q -a) |
|  全イメージ削除 |  docker rmi $(docker images -q) |
| 全ボリューム削除  |  docker volume rm $(docker volume ls -qf dangling=true) |
|  滅びの呪文 |  docker-compose down –rmi all –volumes |
	
######立ち上がってるDockerコンテナの確認
activeコンテナのみ表示`$ docker ps` 
activeじゃ無いのも表示`$ docker ps -a`

ここで表示されるSTATUSを確認すると、Exitedか(コンテナを出てるかどうか)が確認できる

######Docker, docker-compose.ymlのバージョン確認
`$ docker version`
`$ docker-compose version`

######手元にあるdocker imagesの確認
`$ docker images`

######[Dockerhub](https://hub.docker.com/u/library/)にあるimagesをローカルにpullしてくる
`$docker pull {IMAGE名:TAG名}`
例： `$ docker pull hello-world:latest`

######docker imageからコンテナを新規作成
`$ docker run`
↑オプション何も付けずに実行するとコンテナを作成=>exitしちゃうからコンテナの中には入れない
runを利用する時は、テストの実行/ボリューム・コンテナに対するデータの追加・削除といった管理タスク

基本の型
`$ docker run -it {IMAGE名:TAG名} {コマンド(runした後の実行コマンド)}`
`-it`=コンテナ内でTerminal上に出力などを表示や入力できるようにするオプション

コンテナの名前つきでコンテナ立ち上げ。特に指定しないとdockerが勝手に名前をつける。
`$ docker run --name {コンテナ名} -it {IMAGE名:TAG名} bash`

######docker-composeでコンテナを立ち上げる
`$ docker-compose up -d`
コンテナを停止する
`$ docker-compose stop`

######既に作成済みのコンテナの再起動
`docker-compose start `


#サーバーなど

######指定のポート番号が何に使われてるか確認(8000のところを任意の番号に変更)
`$ lsof -i:8000`


#Git

| 1 | 2 |
|:-:|:-:|
|  gitでバージョン確認 |  git --version |
| 最終コミット後の変更ファイル・記述を確認 |git diff|
| ブランチを新規作成&そのブランチに移動|git checkout -b branchname|
| ブランチを削除  | git branch -d [ブランチ名]  | 
|リモートブランチ一覧を表示する|git branch -r|
| 強制push  | $ git push -f origin develop  |
| 履歴を残しつつ取り消す  |  git revert コミットID|
|  任意のpushまで巻き戻す |  git reset |
|  pushの一覧を確認 |  git log --oneline |
| ローカルのaddを取り消す  | git reset HEAD .  |
|  ローカル上の変更を取り消す | git checkout .  |
|  ローカル上で新規作成したファイルを取り消す | git clean -df .  |
|プルする| git pull commitID|
|ログを見る| git log|
|直前の○個だけログを見る| git log -数字|
|ログで各コミットの変更点も表示する| git log -p|

・[2.3 Git の基本 - コミット履歴の閲覧
](https://bityl.co/6Gv3)

####git resetのオプションについて

| 1 | 2 |
|:-:|:-:|
|  取り消すのはcommit  | $ git reset --soft コミットID  |
| 取り消すのはcommitとaddとソース  |  $ git reset --hard コミットID |
|  取り消すのはcommitとadd |  $ git reset --mixed コミットID |
|直前のコミットを消す| コミットIDのとこを`HEAD^`に |
|git reset --hardを取り消したい。| resetする前まで--hardで戻ればok|

###間違えて作業進めちゃったけど後からブランチを切りたい！って時
未コミットの場合
※未コミットなら`$ git checkout -b new_branch_name`だけでokだけど、時々エラーが出るらしいので、エラーが出た時の対処法

```terminal.
//コミットされていない変更内容を一時退避する
$ git stash
$ git checkout <切り替えたいブランチ名>
//直前に一時退避した変更内容を取り出す
$ git stash pop
```

###作業したけど作業する前の状態まで戻したい！時
```terminal.
//ローカル上の変更を取り消す
 $ git checkout . 
```
・参照[【Git】ブランチを切り替え忘れて作業してしまった時の対処法](http://vatscy.github.io/blog/2014/03/30/git-branch-stash/)

###リモートで消されたブランチを消したい時

```
//以下どちらかを実行する

//fetchかpullに --pruneオプションをつける
$ git fetch/pull --prune
$ git remote prune origin
```

・参照：[リモートで消されたブランチが手元で残ってしまう件を解消する](https://qiita.com/yuichielectric/items/84cd61915a1236f19221)

###直前のpushを取り消したい時
ローカルでrevertを使って取り消して、それをリモートへ反映する。

```terminal.
//ログを確認してcommit IDを取得
$ git log
//コミットメッセージの修正はしないので--no-editオプションをつけてrevertする
$ git revert commitID --no-edit
$ git push
```

・[Gitコマンド早見表](https://qiita.com/kohga/items/dccf135b0af395f69144)
・[Gitでいろいろ取り消したい](https://qiita.com/matsugaknight/items/c0526812e89249b93239#%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%81%AE%E5%8F%96%E3%82%8A%E6%B6%88%E3%81%97)
・[gitでのヤバイ！を取り消す方法](https://qiita.com/ritukiii/items/74ee3274c3f218511a0c)

###gitが変でpushできなくなった時に初期化して最初から全部やり直す方法

https://qiita.com/Oyuki123/items/cf370896f3557cb4e6b2

```
$rm -rf .git
$git init
Initialized empty Git repository in 〜/.git/ 
$git log 一応きちんと完全初期化できているか確認)
fatal: your current branch 'master' does not have any commits yet
$git add .
$git commit -m "First commit"
$git remote add origin https://github.com/〜
$git push -u origin master
```