Skip to content

Cheatsheet

Riku Takeuchi edited this page Nov 28, 2023 · 9 revisions

JavaScript

ユーティリティ

配列から重複した値を削除

function uniq(ary) {
  return [...new Set(ary)];
}

スリープ

await new Promise((resolve) => setTimeout(resolve, 5000));

例外処理

Errorクラスを継承

class SyntaxError extends Error {
}

クラス名でエラー種別の判定

err.constructor.name からクラス名を取得することが出来るが、バンドルしたら取得される値が変わってしまう。
そのため、下記のように記述する必要がある。

if (err instanceof AppError) {
  console.error('Application Error!');
}

Date

UTC文字列からローカルタイムゾーンに合わせてDateオブジェクトの作成

function createLocalDate(str) {
  const date = new Date();
  const [, year, month, day, hour, minute, second, milliseconds] = str.match(
    /(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2}).(\d{3})/
  );
  date.setUTCFullYear(Number(year));
  date.setUTCMonth(Number(month) - 1);
  date.setUTCDate(Number(day));
  date.setUTCHours(Number(hour));
  date.setUTCMinutes(Number(minute));
  date.setUTCSeconds(Number(second));
  date.setUTCMilliseconds(Number(milliseconds));
  return date;
}

History

URLパラメーターの取得

const url = new URL(window.location);
const val = url.searchParams.get('key');

URLパラメーターの全取得

const params = window.location.search.slice(1).split('&').reduce((acc, cur) => {
    const [key, value] = cur.split('=');
    return { ...acc, [key]: decodeURIComponent(value) };
}, {});

Shell

検索

特定のディレクトリからファイル名で検索

find ./target -name '*.txt'

更新日がちょうど10日のファイルを見つける

find . -mtime 10

ファイル

ファイルが作成されたら実行

inotifywait -e CREATE -mq /your/dir --format "%f" | while read LINE; do
  echo $LINE
done

BCDEdit

Hyper-V無効化

VirtualBox を起動させたいとき、以下のコマンドを実行し Windows の再起動を行う。

$ bcdedit /set hypervisorlaunchtype off

Hyper-V 有効化

Docker を起動させたいときは、以下のコマンドを実行し Windows の再起動を行う。

$ bcdedit /set hypervisorlaunchtype auto

ファイルが変更されたら実行

Mac

fswatch your/file | while read LINE; do
  echo $LINE
done

拡張子の変換

for f in *; do
mv $f $f.txt;
done

文字列

ランダムな文字列生成

$length=40
cat /dev/urandom | base64 | fold -w $length | head -n 1

末尾から切り取り

file=foo.mp4
echo ${file%.mp4} # foo

先頭から切り取り

file=foo.mp4
echo ${file##foo} # .mp4

置換

sed -i -e "s/before/after/g" file.txt

行末に追加

sed -i -e "$a additional" file.txt

追記

cat >> file.txt << EOB
Write something
EOB

lsで一覧したファイルを操作

for file in `ls`; do
    echo "${file}"
done

日本語(マルチバイト文字)を置換する

LANG=C sed 's/[\x80-\xFF]//g' PATH

# ひらがな
sed -e 's/[ぁ-ん]//g'
sed -e 's/[\x{3041}-\x{3096}]//g'

# カタカナ
sed -e 's/[ァ-ン]//g'
sed -e 's/[\x{30A1}-\x{30FA}]//g'

# 漢字
sed -e 's/[亜-熙]//g'
sed -e 's/[々〇?\x{3400}-\x{9FFF}\x{F900}-\x{FAFF}\x{20000}-\x{2FFFF}]//g'

# 記号
sed -e 's/[ -】]//g'
sed -e 's/[\x{3001}-\x{301B}]//g'

行を検索して置換

sed -e '/TARGET/ s/GET//g'

複数のファイル内の文字列をまとめて置換

# BSD
grep -l 'SEARCH' PATH | xargs sed -i '' -e 's/SEARCH/REPLACE/g’

# Linux
grep -l 'SEARCH' PATH | xargs sed -i -e 's/SEARCH/REPLACE/g’

検索対象を挿入

sed -e 's/(string)target/¥1/'

ネットワーク

TCP疎通確認

nc -w 1 -v -z example.com 80

サービスの状態確認

netstat -anp | grep :80

POSTリクエスト

curl -H "Content-Type: application/json" -X POST -d "{\\"key\\": \\"value\\"}" http://example.com

Webサイトを再帰的にダウンロード

wget -rkp -linf -H example.com

メディア

RTSPストリームの録画

ffmpeg -i rtsp://example.com -vcodec copy -acodec copy -f mp4 -movflags faststart output.mp4

RTSPストリームの分割録画

ffmpeg -i rtsp://example.com -vcodec copy -acodec copy -f segment -segment_time 1800 -reset_timestamps 1 -segment_format_options movflags=+faststart output-%03d.mp4

mp4からdurationの取得

ffprobe -i input.mp4 -show_entries format=duration -v quiet -of csv="p=0" | awk '{printf("%d\n",$1)}'

mp4からサムネイルの生成

動画尺の1%の位置で画像を抽出。

duration=`ffprobe -i input.mp4 -show_entries format=duration -v quiet -of csv="p=0" | awk '{printf("%d\n",$1)}'`
ffmpeg -i input.mp4 -frames:v 1 -ss $((duration/10)) -t $duration -r 1 -f image2 output.jpg

webmファイルをmp4に変換

ffmpeg -i input.webm -r 15 output.mp4

mp4を圧縮

ffmpeg -i exapmle_original.mp4 -crf 35 exapmle_compressed.mp4 

プロセス

CPU使用率

vmstat [更新時間(秒)]

タイムスタンプ付き

vmstat [更新時間(秒)] -t

一覧

ps

# 全一覧
ps -A
top

終了

kill [PID]

バックグラウンド実行

nohup [コマンド] &

Docker

Dockerfileをビルド

docker build -t <IMAGE_NAME>:<TAG> <PATH_TO_DOCKERFILE>

コンテナイメージのエクスポート

docker save <IMAGE_NAME> -o archive.tar

コンテナイメージのインポート

docker load -i archive.tar

コンテナイメージにタグを付ける

docker tag <IMAGE_NAME>:<TAG> <IMAGE_NAME>:<NEW_TAG>

コンテナ内からDockerのログに出力

Docker内のフォアグラウンドで動作しているプロセスの標準出力はDockerのログに出力される。
バックグラウンドで動作しているプロセスの場合はリダイレクトする必要がある。

echo Hello > /proc/1/fd/1

SIGTERMを送る

docker kill -s TERM <コンテナ名>

Kubernetes

Podを入れ替え

kubectl rollout restart deploy

Ansible

特定のタスクのみを実行

目的のタスクを実行後に Ctl-c で強制終了。

ansible-playbook playbook.yml --step --start-at-task="ex task"

openssl

アップロード

scp index.html user@domain.com:/home/user/htdocs/

ダウンロード

scp user@domain.com:/home/user/htdocs/index.html ./

AES暗号化

$ echo foo | openssl aes-128-cbc -e -base64
enter aes-128-cbc encryption password: 111
Verifying - enter aes-128-cbc encryption password: 111
U2FsdGVkX19QlLCxoc1INe3O+GnzhY4qqikSxTxujGM=

AES復号化

$ echo "U2FsdGVkX19QlLCxoc1INe3O+GnzhY4qqikSxTxujGM=" | openssl aes-128-cbc -d -base64
enter aes-128-cbc decryption password:
foo

Node.js

browser-sync

browser-sync start --server --files='./**'

npm

リリース。

$ npm version patch # patch or minor or major
$ git tag
$ git push origin tags/v0.0.2
$ npm publish

ユーティリティ

文字列をQRコード化

qrencode -t ansi 文字列

PHP

phpmig

最初の状態に戻す

phpmig rollback -t 0
Clone this wiki locally