Tag: Cheatsheet

cheatsheet/snacks.nvim

Snacks.nvim

rafi/vim-config を LazyVim の現行寄りに使う前提の snacks.nvim チートシート。 <leader>Space<localleader>;。 起動キーは 2026-05-29 時点の手元環境で maparg() を見て確認したもの。

ファイラは lazyvim.plugins.extras.editor.snacks_explorer を有効にした Snacks Explorer を使う。 個人プラグイン側で Snacks Explorer を無効化する override は置かない。

起動

効果キー
picker 一覧Space ;
ファイル検索(root dir)Space Space, Space ff
ファイル検索(cwd)Space fF
git 管理ファイル検索Space fg
カーソル下の語でファイル検索Space gf
最近開いたファイルSpace fr
最近開いたファイル(cwd)Space fR
grep(root dir)Space /, Space sg
grep(cwd)Space sG
カーソル下/選択範囲を grep(root dir)Space sw
カーソル下/選択範囲を grep(cwd)Space sW
buffer 行検索Space sb
search and replaceSpace sr
picker resumeSpace sR
zoxide;z
spelling suggestion;u
notification historySpace n
scratch buffer toggleSpace .
scratch buffer 選択Space S
Snacks Explorer(root dir);e, Space e, Space fe
Snacks Explorer(cwd);E, Space E, Space fE
現在ファイルを Explorer で reveal(root dir);a
現在ファイルを Explorer で reveal(cwd);A

Picker

効果キー
決定して開くEnter
window を選んで開くShift Enter
キャンセルEsc, q
help?
入力窓とリストの focus 切り替え/
次/前へ移動Ctrl j, Ctrl k, Ctrl n, Ctrl p, j, k
下/上へスクロールCtrl d, Ctrl u
preview を下/上へスクロールCtrl f, Ctrl b
preview を右/左へスクロールCtrl l, Ctrl h
複数選択して次/前へTab, Shift Tab
全選択Ctrl a, *
quickfix へ送るCtrl q, e
location list へ送るE
split / vsplit / tab で開くCtrl s, Ctrl v, Ctrl t
split / vsplit / tab で開く(rafi 追加)sv, sg, st
hidden files toggleAlt h, .
ignored files toggleAlt i, ,
preview toggleAlt p
follow mode toggleAlt f
live grep toggleCtrl g
regex toggleAlt r
最大化 toggleAlt m
picker window cycleAlt w
flash jumpss
insert mode から抜けるjj
選択して前/次へ進むK, J

filesgrep source は hidden files を見る設定になっている。 そのため通常は dotfile も候補に出る。 ignored files は , または Alt i で切り替える。

Read more...

journalctl


title: cheat sheet journalctl date: “2021-07-25T22:12:03.284Z” description: “cheat sheet journalctl” categories:

  • cheatsheet tags:
  • cheatsheet
  • journalctl

効果コマンド
逆順表示journalctl -r
特定ユニットjournalctl -u rsyslog.service
時間指定journalctl –since today
現在のブートセッションのみjournalctl -b
tail -f のようにフォローjournalctl -f
ページ(errとかinfoとか)ごとjournalctl -p err

デーモンのリストを出し検索

systemctl list-units --type=service

rootless containerd のログを置い続ける

journalctl -f --user-unit containerd.service -p warning
Read more...

w3m

w3mでタブで開く

効果ショートカット
現在のページをコピーして新しいタブを作成大文字のT
リンクを新しいタブで開くCtrl+T
現在のタブを閉じるCtrl+Q
タブ間の移動{と}
タブ選択のメニューを表示Esc+小文字のt
Read more...

cheatsheet/yazi

オプション

説明コマンド
5行上K
5行下J
選択space
ヴィジュアルモードv
ヴィジュアルモードで選択範囲をunsetV
全部選択Ctrl + a
選択を反転(reverce)Ctrl + r
選択をキャンセルEsc
ファイル開くo
ファイル選択する時にインタラクティブにするO
ファイルの情報を見るTab
Yank( Copy )y
Cutx
ペーストp
ゴミ箱へd
瞬間的に削除D
ファイル作成a
ファイル名変更r
隠しファイルを表示.

ファイル検索

説明コマンド
次のファイルを検索/
前のファイルを検索?
次の検索結果へ移動n
前の検索結果へ移動N
fdを使って検索s
ripgrepを使って検索S

ソート

説明コマンド
, -> m編集時刻
, -> M編集時刻(逆)
, -> b作成時刻
, -> B作成時刻(逆)
, -> e拡張子
, -> E拡張子(逆)
, -> aアルファベット順
, -> Aアルファベット順(逆)
, -> sサイズ
, -> Sサイズ(逆)

参考 Quick Start | Yazi

Read more...

kubectl cheatsheet

オプション効果
kubectl get nodesノードの一覧表示
kubectl get podsポッドの一覧表示
kubectl get pods --namespace=<namespace_name>特定のネームスペースのリソースを表示
kubectl get namespacesネームスペース一覧
kubectl get jobsジョブの確認
kubectl get jobsジョブの確認
kubectl get svc -o wideサービスの一覧表示(ロードバランサーも見れる)
kubectl get deployments -n <namespace>デプロイメントの一覧表示
kubectl rollout restart <deployment> -n defaultデプロイメントの再起動
kubectl logs <pod_name>ログの確認とデバッグ
kubectl logs jobs/example-jobログ
kubectl scale deployment <deployment> --replicas=0 -n <namespace>デプロイメントのスケール
kubectl exec -it <pod_name> -- <command>ポッド内でコマンドを実行するには
kubectl apply -f <filename.yaml>リソースの作成
kubectl delete -f <filename.yaml>リソースの削除
Read more...

nerdctl cheatsheet

–address /run/k3s/containerd/containerd.sock –namespace k8s.io

サンプル

sudo nerdctl –address /run/k3s/containerd/containerd.sock –namespace k8s.io build -t cli-tool-docker:latest /mnt/nfs/home/exampleuser/workspace/git/github.com/exampleuser/cli-tool-docker/

exec

nerdctl/docs/command-reference.md at main · containerd/nerdctl

–init でコンテナ内でinit経由で起動できる

nerdctl はコンテナ内で独自の init プロセスを自動的に起動します。 この init プロセスは PID 1 として動作し、ユーザーが指定したコマンドはその子プロセスとして実行されます。 これにより、コンテナ内のプロセス管理が改善され、特にゾンビプロセスの問題が効果的に解決されます。

参考

Read more...

cheatsheet/equery

よく使うオプション

オプションショートオプション用途
belongsbファイルを提供したパッケージを検索equery belongs -e /bin/chgrp
dependsdそのパッケージが必要な全てのパッケージequery depends pygtk
depgraphgそのパッケージに必要な全てのパッケージequery depgraph distcc
usesuUSE フラグを表示equery uses syslib/glibc
keywordsyアーキテクチャごとの対応状況を確認できるequery keywords lv
listlインストール可能なバージョンを確認するequery list -po vim

インストール

emerge --ask app-portage/gentoolkit

参考

オフィシャル オフィシャル

Read more...

cheatsheet/aws/medialive

チャンネル操作

効果コマンド
チャンネルのリストaws medialive list-channels –region ap-southeast-1 | jq -r ‘.Channels[].Id’)
止めるaws medialive stop-channel –channel-id チャンネル ID
削除aws medialive delete-channel –channel-id チャンネル ID
作成aws medialive create-channel –cli-input-json file://channel_sample.json | jq ‘.Channel.Id’
開始aws medialive start-channel –channel-id チャンネル ID
インプットを作成するaws medialive create-input –cli-input-json “$CREATEINPUT” –region ap-southeast-1
インプット id を調べるaws medialive list-inputs –region ap-southeast-1 | jq -r ‘.Inputs[].Id’
インプット id から詳細を得るaws medialive describe-input –input-id インプット ID –region ap-southeast-1
インプット用のスケルトンを得る( 上記の json より、Destinations の雛形が良い )aws medialive create-input –generate-cli-skeleton

セキュリティグループの雛形を得る

aws medialive create-input-security-group --generate-cli-skeleton
{
    "WhitelistRules": [
        {
            "Cidr": ""
        }
    ]
}

こんな感じにしたい

Read more...

cheatsheet/ufw

効果コマンド
状態sudo ufw status
有効/無効sudo ufw <enable/disable>
開放sudo ufw allow 80
ルールのリストsudo ufw status numbered
ルールの削除sudo ufw delete <ルールID>
Read more...

cheatsheet/ffmpeg

オプション

効果コマンド備考
RTMP 送信ffmpeg -re -i hoge.mp4 -vcodec h264 -ar 44100 -f flv “rtmp://エンドポイント”
ts ファイルを結合ffmpeg -f concat -safe 0 -i live_1080p.txt -vsync 1 -c copy ../live_1080p.mp4
シャープネスを強く-vf “unsharp=3:3:0.3”0.3〜0.5
CPU スレッドを有効に使う-threads 9
アスペクト比を維持した状態でサイズ変更-vf scale=1280:-1参考
音質を良くする-b:a 192k -aac_coder twoloop参考
フレーム補間-vf “minterpolate=60”参考
Intel QSV でエンコード-c:v h264_videotoolbox -b:v 2m参考
Linux でエンコード-vcodec h264_vaapi
ビデオビットレート-b:v 2m
品質-crf 280(ロスレス) 51(最低)

QSV でエンコードする場合、 -b:v で十分なビットレートを指定する必要がある。

Read more...

cheatsheet/pactl

コマンド効果
pactl list cards shortカード一覧
pactl list modulesロードしている PluseAudio 一覧
pactl list sinks現在の sink(出力先)一覧
pacmd list現在の設定一覧
pacmd list-sinks | grep -e ’name:’ -e ‘index:’デフォルトの出力先
pulseaudio –dump-conf設定ファイルの読み込み /etc/pulse/daemon.conf から読み込んでいる
Read more...

cheatsheet/wp

Wordpress 用の CLI

よく使うもの。 /home/kusanagi/ドメイン/DocumentRoot/ 配下に移動してから使う

コマンド効果
wc plugin list helpヘルプ
wp plugin list –format=csvプラグインのリストを CSV で
Read more...

ECRのパブリックレポジトリをCLIから作成する

2021/09/10 時点だと --region us-east-1 が必要だった。でないと

Could not connect to the endpoint URL: "https://api.ecr-public.ap-northeast-1.amazonaws.com/"

というエラーがでる。AWS 管理コンソール上は東京リージョンで存在を確認できる。

作成

AWS 管理コンソールでの作り方は パブリックリポジトリの作成

aws ecr-public create-repository --repository-name hogehoge --region us-east-1
削除
aws ecr-public delete-repository --repository-name hogehoge --region us-east-1
push までの流れ
  1. push する前にログインする( public とはいえ push にはログインが必要
  2. ビルドする
  3. タグづけをする
  4. push
aws ecr-public get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin public.ecr.aws/hoge
docker build -t test-20210910-1 .
docker tag test-20210910-1:latest public.ecr.aws/hoge/test-20210910-1:latest
docker push public.ecr.aws/hoge/test-20210910-1:latest

push の手順は各リポジトリにある。

Read more...

cheatsheet/git

オプション

説明コマンド
mainブランチとの差分をマージgit fetch origin && git merge origin/main
現在の変更をスタッシュに保存git stash
スタッシュされた変更のリストを表示git stash list
最後にスタッシュした変更を再適用git stash apply
スタッシュした変更を削除git stash drop
git addしたステージングしたファイルのリストを解除git reset
ローカルにcommitしたが編集状態に戻したいgit reset –mixed HEAD^
最後にコミットした状態に戻す(編集内容は消える)git reset –hard HEAD
編集内容を消すgit restore [ファイル名]
直近のログ、1個を確認git -p -1
直前のコミットとその前のコミットとの間の差分を見たいgit diff HEAD~1 HEAD

.gitignore

git reset --hard は未コミットの編集内容を破棄するため、実行前に git status で対象を確認する。

効果
*.log全てのログファイルを無視
tmp/tmpディレクトリを無視

外部レポジトリへのプルリクがマージされた後、自分のレポジトリを最新の状態にする

Upstreamリポジトリを追加(最初に1回だけ)

git remote add upstream [元のリポジトリのURL]

最新の状態をフェッチ

Read more...

cheatsheet/rg

オプション

説明コマンド
隠しディレクトリも検索–hidden
正規表現としない-F, –fixed-strings
単語とみなす。 /\b(?:foo)\b/-w, –word-regexp
大小文字を区別しない。 /foo/i-i, –ignore-case
大小文字を区別する。 /foo/-s, –case-sensitive
小文字なら /foo/i で大文字が含まれるなら /Foo/-S, –smart-case
1行分マッチさせる。 foo は /^foo$/-x, –line-regexp
複数行にまたがれる。 a\nb には a\nb でマッチする-U, –multiline
-U と合わせて指定すると a\nb に a.b でマッチする–multiline-dotall
Read more...

cheatsheet/tcpdump

よく使うパターン

tcpdump -n -i eth0 -X net 198.51.100.185 -s 0 -w ファイル名

port 指定の場合、net オプションと port オプションを同時に指定するのできなかった

tcpdump -n -i eth0 -X port 11211 -s 0 -w ファイル名
  • tcpdump は標準出力をリダイレクトする形でも保存できるが、後で Wireshark で見ることを考えると -w で保存したほうが良い、でないと wireshark から「このファイルは壊れています」というエラーがでる

意図としては

  • -X 16 進数
  • -s 0 パケットを(途中で切らないで)全部取得する

コマンドラインオプション

オプション効果
-aネットワークとブロードキャストアドレスを DNS 名に変換する。
-nアドレスやポート番号を名前に変換しないで表示。
-dコンパイルされたパケットマッチングコードを人間が読める形式で標準出力にダンプし、終了する。
-iキャプチャするインターフェースを指定。
-vvもっと詳細な出力。NFS 応答パケットにおける付加フィールドなどを表示する。
-vvvさらに詳細な出力。 例えば、telnet SB … SE オプションは全て表示される。 -X オプションも指定されると、telnet オプションは 16 進表示でも表示される。
-sキャプチャするサイズを指定。 大きいパケットを見るとき
-w生データをそのままファイルに書き込む。-r オプションで開く。WireShark や Ethereal で開くこともできる
-X16 進と ASCII 文字で表示を行う。

大きいパケットを見るとき -s オプションをつける

tcpdump コマンドの使いかたをまとめてみた

Read more...

cheatsheet/tig

普段の作業

s で status に移動

[ Changes not staged for commit: ]にあるファイルをエンターで選択 反映したいコミットの上で u で選択。あるいは 1 で 1 行だけ選択、

q を押して status に戻り、 C (shift + c, 大文字) でコミットする

概要

キービュー名説明
mmainデフォルトのビュー。いわゆる git tree
sstatusu で git add。 c でコミットメッセージ
rrefsbranch, tag 一覧
lloggit log
ttreeディレクトリツリー
ggrepgit grep
bblamegit blame
hhelptig のキーバインド一覧
ddiff差分 diffを見たい

チェックアウト

r(リポジトリ一覧) -> ブランチに上下移動 -> c

Read more...

cheatsheet/ip

MediaPackage を CLI から操作

チャンネル名にユニークな文字列が必要、また、この文字列は MediaPackage でチャンネルを作る際に Destination で設定する必要がある チャンネルは aws cli のオプションで作成できる。 配信に必要なチャンネルは( MediaLive 側で 2 つの Destination を指定する必要があるので )2 つ設定する 2 つのチャンネルのパスワードは EC2 パラメータストアにすぐ保存する( MediaLive の仕様でパスワードは EC2 パラメータストアを参照する)

export DATE=$(date +%Y%m%d%H%M)

export MPACK_C_A=$( aws mediapackage create-channel  --region ap-southeast-1  --id "${DATE}-a" )
export MPACK_C_A_URL=$(echo "$MPACK_C_A"| jq -r '.HlsIngest.IngestEndpoints[0].Url')
export MPACK_C_A_USER=$(echo "$MPACK_C_A"| jq -r '.HlsIngest.IngestEndpoints[0].Username')
aws ssm put-parameter --region ap-southeast-1 --name "/medialive/${MPACK_C_A_USER}" --value "$(echo "$MPACK_C_A"| jq -r '.HlsIngest.IngestEndpoints[0].Password')" --type SecureString

export MPACK_C_B=$( aws mediapackage create-channel  --region ap-southeast-1  --id "${DATE}-b" )
export MPACK_C_B_URL=$(echo "$MPACK_C_B"| jq -r '.HlsIngest.IngestEndpoints[0].Url')
export MPACK_C_B_USER=$(echo "$MPACK_C_B"| jq -r '.HlsIngest.IngestEndpoints[0].Username')
aws ssm put-parameter --region ap-southeast-1 --name "/medialive/${MPACK_C_B_USER}" --value "$(echo "$MPACK_C_B"| jq -r '.HlsIngest.IngestEndpoints[0].Password')" --type SecureString

MediaPackageでエンドポイントを作成する

ひとつWebUIからエンドポイントを作成して雛形にする(スケルトンは設定項目が多すぎ) 一応、スケルトンは

Read more...

cheatsheet/ip

サンプル効果
ip route showルーティングを表示
ip addrIP アドレス表示
ip link set dev アダプタ名(wlan0, enp0s3 など) {up | down}wifi アダプタの up/down
ip addr add 203.0.113.100/32 dev eth0静的 IP アドレスの付与
ip addr del 203.0.113.100/32 dev eth0IP アドレスの削除
ip address flush dev eth0IP アドレスを全て削除
ip -6 routeIPv6 のルートを表示
ip route add default via 203.0.113.1デフォルトゲートウェイ追加
ip route add 203.0.113.0/24 dev eth0ルート追加
ip neighbor showarp テーブル表示

参考

標準テキスト CentOS7 p487, p501

Read more...

cheatsheet/nmcli

効果コマンド
デバイスの一般的な確認(wifiなど)nmcli general status
デバイス名と状態nmcli dev status
wifi の状態nmcli radio wifi
アクセスポイント探すnmcli dev wifi list
wifi 接続nmcli d wifi connect <ssid> password <pass> ifname <interface_name>
wifi 切断nmcli d wifi disconnect ifname <interface_name>
自動接続の on/offnmcli connection mod <connection_name> connection.autoconnect <yes/no>
wifi の on/offnmcli radio wifi <on/off>
wifi アクセスポイントの再スキャンnmcli dev wifi rescan
利用可能なコネクションのリストnmcli con
アクティブなコネクションnmcli con show –active
接続nmcli con add type ethernet con-name <name> ifname <iface_name>
イーサネット接続を有効にnmcli con up <name>
ブリッジの追加nmcli con add type bridge con-name br0 ifname br0
ブリッジの情報nmcli con show br0 | grep -e ipv4.method -e ipv4.addresses -e ipv4.gateway
IP アドレス設定nmcli connection mod eth2 ipv4.method manual ipv4.addresses “192.0.2.2/24”
IP アドレスとゲートウェイの設定nmcli con mod br0 ipv4.method manual ipv4.address 192.0.2.0/16 ipv4.gateway 192.0.2.1
物理デバイス追加nmcli con add type bridge-slave con-name bridge-slave-snp0s9 ifname enp0s9 master br0

nmcli のオプション

Read more...

cheatsheet/ss

ss -lptu
オプション効果
-lリッスン状態
-pプロセス名
-tTCPソケットのみ
-uUDPソケットのみ
-nポート番号のサービス名を解決しない

参考

標準テキスト CentOS7 p493 に詳しい

Read more...

cheatsheet/docker

やりたいことコマンド備考
Github Container Registry にログイン`echo $CR_PATdocker login ghcr.io -u exampleuser –password-stdin`環境変数 $CR_PAT にパーソナルアクセストークンが入っているものとする 参考
イメージのリストアップ`docker imagestac`
タグ付けdocker tag イメージID ghcr.io/exampleuser/genpi64-distcc-docker:latest
pushdocker push ghcr.io/exampleuser/genpi64-distcc-docker:latesthttps://github.com/[GithubのID]?tab=packages で docker レポジトリにアクセス可能
ポート開いて実行docker run -p 3632:3632 ghcr.io/exampleuser/genpi64-distcc-docker:latest
Read more...

cheatsheet/docker-slim

オプション効果
–state-pathdocker-slim の状態が保持されるパス、docker-slim コマンドが書き込めるパスにする
–target元のイメージ
–tagスリムになったイメージのタグ
–http-probeデフォルトは enable、ただ distcc の場合、HTTP ポートではないので false にしている
–execdocker-slim が動的にアプリケーションの振る舞いを解析する際に実行するシェルスクリプト

time docker build  . -t genpi64-distcc-large:latest
docker-slim --state-path ~/tmp/docker-slim build --target genpi64-distcc-large:latest --tag ghcr.io/exampleuser/genpi64-distcc-docker:latest --http-probe=false --exec "/need.bash"
docker push ghcr.io/exampleuser/genpi64-distcc-docker:latest

参考

オフィシャル

Read more...

cheatsheet/emerge

忘れがちなオプション

ロングオプションショートオプション効果
–pretend-p引きづられてインストールされるパッケージが見たい
–update-uアップデート
–deep-D/var/lib/portage/world 以外の依存関係も調査
–newuse-Nセキュリティアップデートなど明示的にインストールしていないパッケージも含む
–with-bdeps=yビルド時依存のパッケージも含む
–changed-use-UUSE フラグが変わった事を伝えるが–newuse とは違いユーザーが有効にしない事を示すフラグがある場合、再インストールしない
–unmerge-C削除
–depclean -p-p で使われなくなった依存関係を確認
–depclean使われなくなった依存関係を削除( -p で確認してから )
–infoPortage によって使われる変数
–quiet-qディスプレィ出力を抑制
–verbose-v冗長モード。各パッケージの USE フラグを表示

よく見かけるオプション -uDN は –update –deep –newuse と同じ。

参考 Portage が文句を言ってきたときは

バージョンを指定してインストール

emerge =dev-lang/go-1.16.7

slot、スロットを指定してインストール

eix gcc で調べる

emerge --sync && eix-update &&& eix gcc

下記の状況はver12がインストールされている。これにver11も追加したい。

Read more...

cheatsheet/systemctl

オプション効果
systemctl daemon-reload設定再読込
systemctl restart daemon-nameデーモン再起動
systemctl status daemon-name -lステータス確認
systemctl enable daemon-name自動起動するように設定
systemctl disable daemon-name自動起動をoff
systemctl is-enabled daemon-name自動起動か?
systemctl list-units –type serviceユニット一覧、サービスのみ
systemctl list-dependencies –reverse network-online.target影響を受けるユニット一覧
systemctl list-dependencies network-online.target依存関係があるユニット一覧
systemctl is-system-runningシステムの状態を返す。running, degraded, maintenance など
systemctl list-units –state=failed失敗しているサービスやユニットをリストアップ
systemctl cat daemon-name設定ファイルを見る
systemctl edit daemon-name設定ファイルを編集

ログを見る場合はjournalctlで確認する。

Read more...

AWS CLIのチートシート

CloudWatch logs を CLIで調査( fish )

クエリ投げる

set queryId (aws logs start-query --log-group-name NginxAccessLog \
                                   --start-time (date +%s --date "1 week ago") \
                                   --end-time (date +%s) \
                                   --query-string 'fields @timestamp, @message | filter @message NOT LIKE /ua:ELB-HealthChecker/ | sort @timestamp desc | limit 20'\
                                 | jq -r '.queryId' )

ステータス確認

aws logs describe-queries | jq '.queries[] | select(.queryId=="$queryId")'

取得

aws logs get-query-results --query-id $queryId  | jq '.results[][] | select(.field == "@message") | .value'

ポリシー作成 https://qiita.com/maimai-swap/items/895b79229f6769aa4a41

aws iam create-policy --policy-name ポリシー名 --profile プロファイル --policy-document file://developerpolicy.json --description "this is ...."

CLIのアップデート

pip install awscli

Read more...

badblocks関連

いろいろやってみたが

仕事だと怖くて不良セクタのHDDは使えないのですが、個人だともったいないので色々調べた記録。

badblockでのチェックを試みたが1ヶ月以上かっても終わらない

HDDに[ 1 ]を書き込んで[ 0 ]を書き込んでsmartctlでの結果を比較するような形の方が良いだろう

HDDの復旧は、最近のHDDでは『書き込めなかったら、予備セクタを割り当てる』という振る舞いをするので

とにかくddで全領域書き込んでみれば良い、ということかも。もちろん新しいHDDを買うのがベスト。

badblock -w だと、もう少しましな文字列を書き込むので、より良い、という点は残るかも

あとbadblockを使う時は badblockのセクタ番号を取得するためだが、smartctlでも値を取得できる。 複数セクタがダメになっている、とかでなければ、smartctlの値の方が正確かも。 badblockの値を使うことにネガティブな意見が多い http://unix.stackexchange.com/questions/92076/how-can-i-check-for-bad-blocks-on-an-lvm-physical-volume ファイルシステムのツールか、HDDが不良セクタを使おうとしたら予備領域割り当てるし、smart機能を使った方がよい、という意見

私の考え

  • 結局の所、HDDのbadblockを調べて,ddでゼロを書き込むしかない。ような? というか、その方が確実のような気がする。

手軽にやれそうなのでext4でフォーマットしてfsckでテストしてみた

mkfs.ext4 は対象パーティションの既存データを消す。実行前に lsblk などでデバイス名を確認する。

mkfs.ext4 /dev/sdb1
nohup fsck -p -t -y -f -c /dev/sdb1 &

英語のページだがext2, ext3, raiserfs, LVMでの方法が乗っている

http://linoxide.com/linux-how-to/how-to-fix-repair-bad-blocks-in-linux/

検査の手順

# cd /
# badblocks -s -o badblocks.hda4 /dev/hda4

このオプションならば非破壊。

-s は経過表示 -o ファイル名 は、不良セクタがあったときのブロック番号のファイル化です。(登録時に使う)

なお、すでに不良セクタが登録されている場合は

# badblocks -s -i badblocks.hda4 -o badblocks2.hda4 /dev/hda4

とすることで登録済みの領域をスキップ。

作成される badblocks2.hda4 は、新規の不良セクタ分のみです。既存のは出力されません。

Read more...

cheatsheet/jq

ダブルコーテーションを除く

-r

AWS CloudFrontのAPIアクセスログからAPIキーをベースにアクセス状況をしらべた

jq ‘Records[]‘などで、外側の余計な配列なりハッシュなりを剥がす

❯ cat cloudtrail_root_log.json  | jq -r '.Records[]|select(.userIdentity.accessKeyId == "himitunaisho")'  > cloudtrail_root_only.json

EC2のspotfleetインスタンスのIPアドレスを調べる。結果は台数ごとに出力されるので、1行だけ取り出すようにhead -n を使う

aws ec2 describe-instances --profile test --filters "Name=tag-key,Values=Name" "Name=tag-value,Values=spotfleet-20171027"  | jq -r '.Reservations[].Instances[] | select(.State.Name == "running") | .PrivateIpAddress'

Pretty print the json

jq “.” < filename.json

Access the value at key “foo”

jq ‘.foo’

Access first list item

jq ‘.[0]’

Slice & Dice

jq ‘.[2:4]’ jq ‘.[:3]’ jq ‘.[-2:]’

参考

ここがわかり易かった => jq コマンドが強力すぎてヤバい件 CUBE SUGAR STORAGE

Read more...

cheatsheet/logger

logger -ip local4.notice 'WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 8 children, there are 98 idle, and 104 total children'

標準出力と標準エラー出力をloggerコマンドで別々にsysylogに出力する

logger_i="/usr/bin/logger -ip local0.info"
logger_e="/usr/bin/logger -ip local0.error"
{
    ...
    command1
    command2
    ...
} 1> >(${logger_i}) 2> >(${logger_e})
Read more...

softether

  • sudo vpncmd /HELP
  • sudo vpncmd <ip address>:<port> /SERVER
オプション効果
HubListハブ一覧
Hub VpnHub1ハブの設定
StatusGetステータス
SessionListセッション一覧 セッション名は “SID-” の後に、「ユーザー名」を示す文字列が入り、その後に連番で数字が入ります。
SessionGet? SessionList で得られたセッションの詳細が得られるかも
SecureNatHostGetセキュア NAT の情報を取得
DhcpGetDHCP 情報の取得
BridgeListブリッジ情報
check動作チェック

ブリッジ関連の操作

リスト sudo vpncmd <ip address>:<port> /SERVER /PASSWORD:<password> /adminhub:<ハブ名> /cmd BridgeList

OS 側で一緒によく使う

コマンド効果
ip tapTAP デバイス確認
ip addr show tap_tap1IP アドレス確認
nmcli conインターフェース 接続 確認
nmcli devTAP デバイス状況確認

vpncmdのリファレンス

cheat sheet tmux

現在のショートカット

キーバインドコマンド
?ショートカットキーのリストを表示
c新しいウィンドウを作成
n次のウィンドウへ移動
SPACE次のウィンドウへ移動
p前のウィンドウへ移動
BS前のウィンドウへ移動
o次のペインへ移動
wウィンドウの選択メニューを表示
dセッションのデタッチ
:コマンドプロンプトの開始
'ウィンドーに名前をつける
[コピーモードの開始
]バッファ内容のペースト
qペインのインジケータを表示
%ウィンドウを左右のペインに分割
{ペインの入れ替え
}ペインの入れ替え(逆順)
lペインの左右分割位置を左へ移動
hペインの左右分割位置を右へ移動
xペインの破棄

コマンドプロンプトでの使い方

効果オプション
すでに開いたセッションにアタッチするtmux attach
ウィンドウの一覧を取得するtmux list-windows (C-b w)
新しいウィンドウを作るtmux new-window (C-b n)
クライアントをデタッチするtmux detach-client (C-b d)
キーバインドの一覧を表示するtmux list-keys (C-b ?)
次のウィンドウを表示するtmux next-window (C-b n)
前のウィンドウを表示するtmux previous-window (C-b p)
ウィンドウを強制的に閉じるtmux kill-window (C-b k)
最後のセッションを削除するtmux kill-session
セッション名FOOを指定してセッションを削除するtmux kill-session -t FOO
すべてのセッションを削除するtmux kill-server

参考

Read more...

cheat sheet vim

rafi/vim-config

rafi/vim-config: Lean mean Neovim machine, carefully crafted with Use with latest Neovim.

Snacks Explorer(ファイラ)

2026年時点では rafi/vim-config / LazyVim の現行寄りに合わせて、ファイラは Neo-tree ではなく Snacks Explorer を使う。 ローカルでは lazyvim.jsonlazyvim.plugins.extras.editor.snacks_explorer を明示し、個人プラグイン側の Snacks Explorer 無効化 override は削除する。

効果キー
Snacks Explorerを開く(root dir);e / Space e / Space fe
Snacks Explorerを開く(cwd);E / Space E / Space fE
現在のファイルをファイラで表示;a
現在のファイルをファイラで表示(cwd);A
ファイルを開くl / Enter
新しいタブで開くst
上のディレクトリに移動Backspace
ファイル/ディレクトリ作成a
ツリーを閉じるh
grepgr
ファイル検索gf
水平分割で開くsv
垂直分割で開くsg
プレビューのオンオフK
リネームr
削除d
ファイル移動m
コピーc
ペーストp
パスをヤンクy
システムアプリで開くo
更新u

Lazygit

効果キー
gitのルートで開くSpace , tg
カレントディレクトリで開くSpace , tg

キーバインド

効果省略記法
文字コードを確認:set fileencoding
保存する文字コードを変更:set fileencoding=utf-8
前ひらいたバッファに戻る<C-^> ( 数字の6のやつ )
検索で行きすぎたら戻る;
変更してきた箇所に戻るg;
変更してきた箇所に進むg,
次のワードの頭にw
次のワードの最後にe
行頭にいきなり追加I
上書きモードR
ワード前のスペース有りヤンクyaw
スペース無しヤンクyiw
文字を検索して上書きct<key>
ワード削除diw
引数をまるっと削除di(
functionの記述をまるっと削除di{
カーソル上の単語を消すdiw
カーソル上の単語を消して挿入モードdiw
“"(ダブルコーテーション)で囲まれた文字列を消すdi”
新規ファイルを開く(横分割):new
新規ファイルを開く(縦分割):vnew
新規ファイルを開く(タブ):tabnew
次のタブに切替gt
前のタブに切替gT
これは % がカレントディレクトリ、 :h が親ディレクトリの意味:e %:h<Tab>
ウィンドウを入れ替える。<C-w>x
縦に最大化<C-w>_
横に最大化<C-w>パイプ
ウィンドウの大きさを揃える<C-w>=
ウィンドウの幅を増やす<C-w>>
ウィンドウの幅を減らす<C-w><
ウィンドウの高さを増やす<C-w>+
ウィンドウの高さを減らす<C-w>-
縦に最大化<C-w>_
横に最大化<C-w>パイプ
アクティブなウインドウを左に移動<C-w>h
アクティブなウインドウを下に移動<C-w>j
アクティブなウインドウを上に移動<C-w>k
アクティブなウインドウを右に移動<C-w>l
アクティブなウインドウそのものを左に移動<C-w>H
アクティブなウインドウそのものを下に移動<C-w>J
アクティブなウインドウそのものを上に移動<C-w>K
アクティブなウインドウそのものを右に移動<C-w>L
アクティブなウインドウを次に移動<C-w>w
バッファリストのファイル名をリスト表示:buffers
バッファリストの指定したバッファを開く:buffer:b
バッファリストの次のバッファを開く:bnext:bn
バッファリストの前のバッファを開く:bprevious:bp
バッファリストのすべてのバッファをウィンドウを開く:ball:ba
バッファリストにバッファを追加:badd:bad
バッファリストからバッファを削除:bdelete:bd
バッファリストの最初のバッファを開く:bfirst:bf
バッファリストの最後のバッファを開く:blast:bl
バッファリストの次の変更済みバッファを開く:bmodified:bm
バッファを閉じる:bd
新規タブ:tabedit
{count}で指定した番号のタブへ移動:tabnext:tabn {count}gt
次のタブへ移動:tabnext:tabn gt
前のタブへ移動:tabprevious:tabp gT
現在、以外のタブを全て閉じる:tabo
開いてるファイルを削除:call delete(expand(’%’))
数値をインクリメント、デクリメントするC-a, C-x (ノーマルモード)
前に変更した場所へカーソルを移動するg; (ノーマルモード)
パラグラフ削除dap (ノーマルモード)
プラグイン、モジュール 一覧:scriptnames
deinプラグインのアップデート:call dein#update()
deinでエラーが起きtが時:call dein#clear_state()
Snacks Explorerを開く:lua Snacks.explorer()
ファイルの再読込:e
ファイルを書き込んでexitする:x
ショートカット一覧:map

LSP( neovim rafi/vim-config の設定 20240630時点)のキーバインド

rafi/vim-config: Lean mean Neovim machine, carefully crafted with Use with latest Neovim.

Read more...

cheatsheet/docker-compose

便利な

Docker Compose V2 では docker compose を使う。古い環境では docker-compose の場合があるが、新規手順では docker compose を優先する。

オプション効果
imagesイメージ一覧
logsログ
port web 3000ポート表示
buildYAML に「build:」があれば、そのイメージをまとめてビルド
pullYAML に「image:」があれば、そのイメージをまとめてプル
up -dpull して build してからデーモンとして まとめて起動
up -d hogehoge と依存するデーモン だけ を起動
stopまとめて終了
rmまとめて削除

キャッシュ使わないでビルド

docker compose build --no-cache

既存のコンテナを作り直す

docker compose up --force-recreate minecraft-touhou

参照

docker-compose コマンドまとめ - Qiita

docker-compose を使うと複数コンテナの管理が便利に - Qiita

Docker Compose - docker-compose.yml リファレンス - Qiita

Read more...

cheatsheet/SecretManager

SecretManager の AWS-CLI からの利用方法

ECS でのオートスケール検証に関連して、機密情報を SecretManager にいれる作業を行った。

取得

aws secretsmanager get-secret-value \
  --secret-id "/example/config/env20/api/apps/config.json" |\
  jq -r '.SecretString' | jq .

更新

aws secretsmanager put-secret-value \
  --secret-id test \
  --secret-string "{\"password\":\"version7\"}" \
  --version-stages (date +%Y%m%d) AWSCURRENT

limit について

https://docs.aws.amazon.com/ja_jp/secretsmanager/latest/userguide/reference_limits.html

IAM ロールについて

https://docs.aws.amazon.com/ja_jp/secretsmanager/latest/userguide/reference_iam-permissions.html

Read more...

cheatsheet/aws/elasticache

aws-cliでキャッシュを作成する

aws elasticache create-cache-cluster \
          --cache-cluster-id 'test-20170925' \
          --engine 'redis' \
          --engine-version '3.2.4' \
          --cache-parameter-group-name 'default.redis3.2' \
          --cache-node-type 'cache.t2.micro' \
          --num-cache-nodes 1 \
          --security-group-ids 'sg-111111' \
          --cache-subnet-group-name cachesubnet

キャッシュを削除

aws elasticache delete-cache-cluster --cache-cluster-id test-20170925
Read more...

cheatsheet/aws/cloudwatch

ログストリームをまたいで検索

下記を参照 [新機能]CloudWatch Logs がアップデート、ログストリームをまたいで検索できるように! | Developers.IO

更に時間を指定する場合、–start-time と –end-time をつけると絞り込みができる。

この時刻は UTC で Unix date をミリ秒で表現する必要がある( 1000 倍する )

04/19 16:30 の場合 ( unix date 出して、UTC との時差、9 時間を引いて、ミリ秒にしている echo $(( ($(date -d “2017-04-19 16:30” +%s) - 60 60 9) * 1000 )) => 1492554600000

04/19 17:30 の場合 echo $(( ($(date -d “2017-04-19 17:30” +%s) - 60 60 9) * 1000 )) => 1492558200000

検索例) aws logs filter-log-events –region ap-northeast-1 –log-group-name sns/ap-northeast-1/11111111111111/app/APNS/ExampleProduction –max-items 300000 –start-time 1492554600000 –end-time 1492558200000

Read more...

cheatsheet/aws/rds

パラメーターグループ

作る
aws rds create-db-cluster-parameter-group \
  --db-cluster-parameter-group-name hoge-canvas-postgresql10 \
  --db-parameter-group-family aurora-postgresql10 \
  --description "for wal_level must be set to logical"

参考 aws rds create-db-cluster-parameter-group help

編集
aws rds modify-db-cluster-parameter-group \
  --db-cluster-parameter-group-name hoge-canvas-postgresql10 \
  --parameters "ParameterName=rds.logical_replication,ParameterValue=1,ApplyMethod=pending-reboot"

設定するパラメーターによっては即時反映 ApplyMethod=immediate が使えず

An error occurred (InvalidParameterCombination) when calling the ModifyDBClusterParameterGroup operation: cannot use immediate apply method for static parameter

というエラーが出る。この場合、 ApplyMethod=pending-reboot を使う必要がある。 staticかどうか?はWebUIの『タイプの適用』の箇所を見るとわかる。

反映
aws rds modify-db-cluster \
  --apply-immediately \
  --db-cluster-identifier hoge \
  --db-cluster-parameter-group-name hoge-canvas-postgresql10

パラメータグループ作成

  • パラメータグループ名: test-aurora
  • 説明: utf8mb4
  • ファミリー: aurora5.6 を指定して、とりあえず設定自体を作る
$ aws rds create-db-parameter-group \
  --db-parameter-group-name test-aurora \
  --description utf8mb4 \
  --db-parameter-group-family aurora5.6 \

構築

aws rds create-db-cluster \
  --engine aurora-postgresql \
  --engine-mode serverless \
  --engine-version 10.12 \
  --copy-tags-to-snapshot \
  --enable-http-endpoint \
  --db-subnet-group-name prod \
  --vpc-security-group-ids sg-1111111111111111 \
  --db-cluster-identifier sample-cluster \
  --master-username postgres \
  --master-user-password himituno

既存のパラメータグループから情報をコピーする

aws rds describe-db-parameters –db-parameter-group-name test-aurora > rds-test-aurora.json

Read more...

cheatsheet/aws/runcommand

SSMエージェントがインストール済みのサーバに対して、あるコマンド、スクリプトを実行できる仕組みを構築した。

エージェントが入っているインスタンス一覧

aws ssm describe-instance-information --output text --query "InstanceInformationList[*]"

コマンド実行

aws ssm send-command --document-name "AWS-RunShellScript" --instance-ids i-1111111111111 --parameters '{"commands":["/etc/init.d/gitpull start"],"executionTimeout":["300"]}'

複数サーバにコマンドを実行する

aws ssm send-command --document-name "AWS-RunShellScript" --instance-ids $(aws ssm describe-instance-information --output text --query "InstanceInformationList[*]" |grep -E 'i-.*' | awk '{print $2}' ) --parameters '{"commands":["/etc/init.d/gitpull start"],"executionTimeout":["300"]}'

githubへの接続が上手く行かなかったら、アップデートもresetもしない

git remote show origin > /dev/null 2>&1
Read more...

dd

50GBの空のファイルを作る

dd if=/dev/zero bs=1M count=52400 |pv -L 25m > k001.img

dd は指定先を誤るとディスクやファイルを破壊する。of= にブロックデバイスを指定する場合は、事前に lsblk などで対象を確認する。

壊れた

# dd if=/dev/sdb of=/dev/sdc bs=512 conv=noerror,sync
を実行しドライブをコピーします。
※数時間かかります。
※convでエラーをスキップするように指定します。
※bs=512
は512バイトずつコピーしますよ、という意味です。
エラーがある部分をスキップする際もこの単位でスキップします。
この値が大きいとコピー速度が速くなりますが壊れている部分があると道連れになる範囲も大きくなります。
この値を小さくするとエラー時に道連れになる範囲は最小で済みますがコピー速度が遅くなります。

UNIXの部屋 コマンド検索:dd (*BSD/Linux)

dd if=/dev/ad0 | gzip -c > ad0backup.dump.gz
⇒ 圧縮しつつバックアップ

ディスククリア

dd if=/dev/zero of=/mnt bs=1024 count=xxxxってな感じかな。
Read more...