shell commands, one-liner etc.
よく使うコマンドやシェル芸などを書き遺すページ。
随時更新。
Linux 共通
tcpdump の使い方
pcap ファイルに出力。
sudo tcpdump -G 60 -W 1 -n -p -s 10000 -vvv -w "$(uname -n)_%Y%m%dT%H%M%S.pcap" port 3306
tcpdump
-G {{数字}}
: {{数字}}秒間実行する-W {{数字}}
: {{数字}}回ローテートする-n
: IPアドレスやポートをそのまま表示する-p
: プロミスキャスモード を有効にしない-s
: キャプチャするサイズを指定する ( MTUより大きくすれば OK )
tshark の使い方
ファイルから読み込み。
sudo tshark -Y 'tcp.port==443' -r example.pcap
ターミナルに流しながら。 tail -f
的に。
sudo tshark -i all -n -p -s 10000 -Y 'tcp.port==443'
普通のdiffコマンドに無理やり色を付ける
difff() {(R=$(printf '\e[31m');G=$(printf '\e[32m');B=$(printf '\e[36m');W=$(printf '\e[1m');N=$(printf '\e[0m');diff -u "$@"|sed $(uname -s|grep -q '^Darwin'&&printf -- -E||printf -- -r) "s/^(@@.+@@|@@.+@@)$/$B\1$N/g;s/^(\+.*)$/$G\1$N/g;s/^(\-.*)$/$R\1$N/g;s/^[^\+\-]*((\+{3}|-{3}) [^ ].*)/$W\1/g;")}
telnet コマンド が入っていない環境下で telnet を使いたい時
代替に curl
を使う。 -v
オプション必須。
$ curl -v telnet://127.0.0.1:3306/
* Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to 127.0.0.1 (127.0.0.1) port 3306 (#0)
J
* RCVD IAC EC
curl
が入っていないときは我慢する。
証明書の期限を確認する
openssl s_client -connect djeeeno.blogspot.com:443 < /dev/null 2> /dev/null | openssl x509 -noout -dates
空ディレクトリを探す
カレントディレクトリ配下の空ディレクトリを探す。
find . -type d -empty
バイナリファイルを探す
もう少し正確に言うと、カレントディレクトリ配下の非テキストファイルを探す。
find . -type d -name '.git' -prune -o -type f -print | xargs file | grep -Ev 'text(,|$)'
.DS_Store を消す
いつもの。
find ./ -name '.DS_Store' -type f -delete
Git
リポジトリのルートディレクトリをフルパスで取得する
git rev-parse --show-toplevel
git コマンドで使用する ssh 秘密鍵を変更する
export GIT_SSH_COMMAND="ssh -i ~/.ssh/djeeno.pem -F /dev/null"
Make
make help
を自己文書化する (ref.)
.PHONY: help
help: ## display this documents
@grep -E '^[0-9a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
Golang のプロジェクトでよく書く
SHELL := $(shell command -v bash)
COMMAND_NAME := myapp
MAIN_PATH := ./cmd/$(COMMAND_NAME)
BUILD_PATH := ./_build
.PHONY: help
help: ## display this documents
@grep -E '^[0-9a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
.PHONY: fmt
fmt: ## Execute `go fmt`
# fmt
go fmt ./...
.PHONY: setup-tools
setup-tools: ## setup tools
# stringer コマンドが無ければインストールする
command -v stringer >/dev/null || (cd ~ && go install golang.org/x/tools/cmd/stringer) # go.mod に追加されるのを防ぐため $HOME へ cd している
.PHONY: generate
generate: ## command `go generate`
# generate
go generate -v ./...
.PHONY: run
run: ## Execute `go run` with $(ARGS)
##
# You may have to run \`go generate\` manually.
##
# run
go run $(MAIN_PATH) $(ARGS)
.PHONY: test
test: generate ## Execute `go test`
go test -cover ./...
Ubuntu (Debian系)
apt-get / deb でインストールしたパッケージ一覧を取得する
dpkg -l *mysql*
もしくは、 dpkg -l
で全部出して grep
で絞る。
dpkg -l | grep -i mysql
apt-get / deb でインストールしたファイルの一覧を取得する
dpkg -L mysql-client-core-5.7
手元の deb パッケージが含むファイルの一覧を確認する
dpkg --contents mysql-client-core-5.7_5.7.25-0ubuntu0.18.04.2_amd64.deb
ベンチマーク
HTTP ベンチマークツール wrk2
ref. https://github.com/giltene/wrk2
インストール
sudo sh -c 'apt update && apt -y install git make gcc libssl-dev zlib1g-dev && git clone --depth=1 https://github.com/giltene/wrk2.git /usr/local/src/wrk2 && cd /usr/local/src/wrk2 && make && ln -sf /usr/local/src/wrk2/wrk /usr/bin/wrk'
使い方
$ wrk -t1 -c1 -d30s -R2 http://127.0.0.1:80/
wrk
-t, --threads {{数字}}
: 何スレッド使うか-c, --connections {{数字}}
: 何コネクション張るか-d, --duration {{時間}}
: 例えば「-d 30s
」だと 30 秒間負荷をかける-R, --rate {{数字}}
: 1秒間に何リクエスト送るか
AWS
EC2のいい感じのリストを取得する
ec2-list() { aws ec2 describe-instances --query 'Reservations[].Instances[?contains(State.Name, `running`)].{A:LaunchTime,B:InstanceId,C:PrivateIpAddress,D:PublicIpAddress,E:Tags[?Key==`Name`]|[0].Value}' --output text "$@" | sort; }
$ ec2-list
2019-03-29T12:33:23.000Z i-0123456789abcdef3 172.31.0.13 13.13.13.13 web
2019-03-29T12:33:24.000Z i-0123456789abcdef4 172.31.0.14 13.13.13.14 web
2019-03-29T12:33:25.000Z i-0123456789abcdef5 172.31.0.15 13.13.13.15 web
左から「起動時刻」「インスタンスID」「プライベートIPアドレス」「グローバルIPアドレス」「Nameタグ」。
なお、↑だと Name タグが無いインスタンスが表示できないので、そういうときは↓を使う。
ec2-list-without-name() { aws ec2 describe-instances --query 'Reservations[].Instances[?contains(State.Name, `running`)].{A:LaunchTime,B:InstanceId,C:PrivateIpAddress,D:PublicIpAddress}' --output text "$@" | sort; }シェル芸のページです。
---
<br>
## よく使うワンライナー
<br>
### バイナリファイルを探す
もう少し正確に言うと、カレントディレクトリ配下の非テキストファイルを探す。
```bash
find . -type d -name '.git' -prune -o -type f -print | xargs file | grep -Ev 'text(,|$)'
空ディレクトリを探す
カレントディレクトリ配下の空ディレクトリを探す。
find
優秀。
find . -type d -empty
自作物
laws
awscli っぽいやつ。 現状 S3 しか対応できていない…。
ほぼほぼ POSIX Shell で動作する。
conoha-cli
ConoHa の CLI っぽいやつ。
ほぼほぼ POSIX Shell で動作する。
openstackclient で良くない?という意見は受け付けていない。