よく忘れるコマンドとかメモ

いつも忘れるのでメモ

## パイプでつないだコマンドの戻り値
コマンドの実行結果を`ture`,`false`,`error`で受け取りたい時

```bash
$ ll | grep sample > /dev/null 2>&1; echo $?
```
結果があれば0なければ1が返る

エラーの場合には`2`が返る

```bash
$ ll aaaa > /dev/null 2>&1; echo $?
2
```

戻り値`0`,`1`,`2`の意味

```bash
$ ls --help

# *snip*

Exit status:
 0  if OK,
 1  if minor problems (e.g., cannot access subdirectory),
 2  if serious trouble (e.g., cannot access command-line argument).

# *snip*
```

参考：http://www.mazn.net/blog/2011/09/09/532.html

## ポートスキャン

```
$ nmap -p 22 192.168.33.10 -P0

Starting Nmap 6.40 ( http://nmap.org ) at 2017-08-03 04:35 UTC
Nmap scan report for 192.168.33.10
Host is up (0.00076s latency).
PORT   STATE SERVICE
22/tcp open  ssh

Nmap done: 1 IP address (1 host up) scanned in 0.04 seconds
```

| STATE | desc |
| --- | --- |
| open | 開いている |
| closed | 閉じている |
| filtered | わからない |

## firewalld設定

```
$ sudo firewall-cmd --permanent --zone=public --add-service=http 
$ sudo firewall-cmd --permanent --zone=public --add-service=https
$ sudo firewall-cmd --permanent --zone=public --add-port=8000/tcp 
$ sudo firewall-cmd --reload
```

## ssh秘密鍵の変換
### puttyをインストール

```
$ brew install putty
```

### pem -> ppk

```
$ puttygen sample.pem -O private -o sample.ppk
```

### ppk -> id_rsa

```
$ puttygen sample.ppk -O private-openssh -o id_rsa
```

## ssh-keygen

```
$ ssh-keygen -f ./id_rsa -t rsa -C 'example@com' -N ''
$ ssh-keygen -f ./id_rsa -t rsa -b 4096 -C 'example@com' -N ''
```

## ssh-add

```
$ eval `ssh-agent`
$ ssh-add ~/.ssh/id_rsa
$ ssh-add -l
```

## 公開鍵を紛失した時
秘密鍵から公開鍵を生成する

```
$ ssh-keygen -y -f id_rsa > id_rsa.pub
```

## ~/.ssh/configの書き方

```
Host 任意の接続名
    HostName ホスト名
    User ユーザー名
    Port ポート番号
    IdentityFile 秘密鍵のPATH(~/.ssh/hoge.key)
    # sshd サーバと応答確認する間隔
    ServerAliveInterval 60
```

```
$ chmod 600 ~/.ssh/config
```

参考：[ssh 接続をタイムアウトしないようにする](https://gist.github.com/koudaiii/dc6ea63fa0258c39987d#%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88%E5%81%B4%E3%81%AE%E8%A8%AD%E5%AE%9A)

### 踏み台を経由する必要があっても、1回のsshコマンドで対象サーバーに接続する

```bash:~/.ssh/config
# ホスト間認証の方式を設定する。sierraでデフォルトで無効にされているDSA鍵を有効にする
HostKeyAlgorithms +ssh-dss
# 秘密鍵を読み込むタイミングでエージェントに自動的に鍵を登録させる
# 毎度ssh-addコマンドを叩く必要がなくなる
AddKeysToAgent yes
# エージェント転送を有効にする
Host *
ForwardAgent yes

# 踏み台サーバーの情報
Host gateway
    HostName [踏み台サーバーのホスト名 or IPADDR]
    User sample_user

# 接続するサーバーの情報
Host sample_server
    HostName [接続先サーバーのホスト名 or IPADDR]
    User sample_user
    Port 22
    IdentityFile ~/.ssh/id_rsa
    ServerAliveInterval 60
    ProxyCommand ssh gateway nc %h %p
```

## シェルスクリプトで実行中のスクリプトの絶対パスを取得する

```bash
SCRIPT_DIR=$(cd $(dirname $0); pwd)
echo $SCRIPT_DIR
```

参考：[[bash] 実行スクリプトの絶対パスの取得](https://qiita.com/koara-local/items/2d67c0964188bba39e29)


## psコマンドでプロセスIDのみ抽出する

```
$ ps -e | grep 'php' | awk '{print $1}'
```

出力結果の改行も除去する場合

```
$ ps -e | grep 'php' | awk '{print $1}' | tr '\n' ' '
```

## 一括置換
カレントディレクトリ以下の、拡張子がphpのファイル内にある、`namespace app\modules\sample`を`namespace application\modules\sample`に全て書き換える場合

```
$ grep -lr 'namespace app\\modules\\sample' ./*.php \
  | xargs sed -i -e 's/namespace app\\modules\\sample/namespace application\\modules\\sample/g'
```

## git submodule

```ini:.gitmodules
[submodule "sample-repo"]
  path = sample-repo
  url = repositoryのアドレス
  ignore = dirty
```

追加

```
$ git submodule add repositoryのアドレス ./submodules/sample-repo
```


init

```
$ git submodule init
```

update

```
$ git submodule update
```

pull

```
$ git submodule foreach git pull origin master
```

## 言語別文字列エスケープ方法
### php -  preg_quote

```php
preg_quote('\()[].*')
```

### python - re

```python
import re
result = re.escape('\()[].*')
```

http://www.php2python.com/wiki/function.preg-quote/

## Google ChromeでJSONを整形する
consoleで以下を実行

```js
resp = '<JSONデータ>';
console.log(JSON.stringify(resp,null," "));
```

## Chromeでfullscreen caprue(Mac)
F12でインスペクター開いて、command+shift+P
検索windowで「Capture full size screenshot」を選択

![Screen Shot 2020-12-16 at 13.04.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105936/d70eccfa-b59b-e5ae-9050-76c5d47b7671.png)


## ERROR 1840 (HY000) at line 34: @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED is empty.

```sql
mysql> reset master;
```

## openssl

```
$ openssl genrsa -out private.key 2048
$ openssl rsa -in private.key -pubout -out public.key
```