自分用の技術メモ一覧

  • 気が向いた時に気が向いた内容を更新
  • 個人的な主観、感想を含みます

bash

ディスクサイズの確認コマンド

du -sh

cron実行する際に必要なbashオプション

cron実行時の環境変数とログインシェルの環境変数が異なる。cronジョブにprintenvをしてあげると、異なる事がわかる。よって、bash実行時にログイン時の環境変数を読み込むように設定を行う。

#!/bin/bash -l

loginのオプションでも良い

#!/bin/bash --login

git

ブランチ間のdiff

git difftool branchA branchB

コミット間の差分(ファイル名のみ)

git diff --stat shaA shaB

コミット間の差分(全ファイルに対して.gitconfigに設定した方法で差分が見れる)

git difftool -y shaA shaB

コミット間の差分(各ファイル)

git difftool -y shaA shaB -- <FILE NAME>

nodejs

非同期処理

非同期関数を同期関数のように扱う

var async_test = function() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      console.log("2")
      resolve()
    }, 3000)
  })
}

console.log("1")
async_test()
  .then(() => {
    console.log("3")
  })
  .then(() => {
    console.log("4")
  })
  .then()

node path

  • npm i -g したモジュールを読み込む => NODEようのパスを設定する必要あり
  • 非同期関数を同期関数のように扱う
export NODE_PATH=`npm root -g`

spread operator

  • 配列を展開するようなイメージ
var a = [1,2,3]
var b = [4,5,6]
var c = [...a, ...b]

console.log(c)
// [ 1, 2, 3, 4, 5, 6 ]

map, filter, reduce

var array = [1,2,3,4,5,6,7,8]

console.log(array.map((a) => a * a))          // [ 1,  4,  9, 16, 25, 36, 49, 64]
console.log(array.filter((a) => a % 2 == 0))  // [ 2, 4, 6, 8 ]
console.log(array.reduce((a, b) => a + b))    // 36

openssl

証明書の内容を確認

openssl x509 -text -noout -in <FILE NAME>

秘密鍵の内容を確認

openssl rsa -text -noout -in <FILE NAME>

CSRの内容を確認

openssl req -text -noout -in <FILE NAME>

クライアントからの証明書の調査

openssl s_client -connect xxxx.com:443

php

cloudfront => EC2(wordpress)でhttps通信を許可する際の注意事項

注意点は以下

  • client => CloudFront => EC2(wordpress)
  • client => CloudFront は443で証明書はCFTにおく
  • CloudFront => EC2は80で接続
  • wordpressがインストールされているEC2はubuntu

[問題] httpでは問題ないのに、httpsで接続すると、レイアウトが崩れる

[原因] ブラウザのsource-viewrをみると、cssやjsを取得するプロトコルがhttpsではなく、httpとなっている

[解決] wp-config.phpに以下の項目を追記

if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
  $_SERVER['HTTPS'] = 'on';
}
if (isset( $_SERVER['HTTP_CLOUDFRONT_FORWARDED_PROTO']) && $_SERVER['HTTP_CLOUDFRONT_FORWARDED_PROTO'] === 'https') {
  $_SERVER['HTTPS'] ='on';
}

sed

lsを利用してファイル名を一括して変更する

  • これだと追記しかできない
ls | grep XXXX | xargs -I{} cp {} {}.bk

renameで一括更新

  • 通常の変換
rename xxxx yyyy *.md
  • sed形式で変換
rename 's/xxxx/yyyy/g' *.md

ファイルの中にXXXが含まれるファイル名の再帰検索

  • grep + rlを利用
grep XXX -rl .
  • l : ファイル名の検索
  • r : 再帰検索

ファイルの中にXXXが含まれるファイル名の再帰検索し、すべてYYYに置換

  • grep + rl + pipe + sed を利用
grep XXX -rl . | xargs sed -i.bk -e 's/XXX/YYY/g'

ファイル名にXXXが含まれるファイル名の再帰検索し、すべてYYYに置換

  • ファイル名の置換
find ./ -type f | sed 'p;s/aaa/bbb/' | xargs -n2 mv
  • sed のp;は置換した結果を標準出力に出力するオプション
  • 以下のように変換前と変換後のファイル名が二つセットで出力される
./clib/uconst/uconst_aws.js
./clib/uuuuuu/uuuuuu_aws.js
./clib/uconst/utime.js
./clib/uuuuuu/utime.js
  • xargsのn2オプションは二つセットで引数を取るというオプション。以下のようなセットの引数がmvに渡される。結果的に置換後のファイル名にmvされる。
./clib/uconst/uconst_aws.js
./clib/uuuuuu/uuuuuu_aws.js

sedで大文字小文字を区別しない

  • iオプションをつける
sed -i.bk -e "s/ABC/abc/ig"
  • これだとmacではうまくいかない(iオプションが無効化される)
sed -i '' -i.bk -e "s/ABC/abc/g"

0埋めの先頭の0のみを削除する

echo 001309 | sed 's/0*\([0-9]*[0-9]$\)/\1/g'  # 1309

tmux

コマンドの一覧

  • tmuxに入っている段階で接続を切断(デタッチ)
<Prefix-Key> + d
  • sessionへのアタッチ
tmux a -t <Session>
  • sessionの削除
tmux kill-session -t <Session>

xargs

lsを利用してファイル名を一括して変更する

  • これだと追記しかできない
ls | grep XXXX | xargs -I{} cp {} {}.bk

vim

コマンド一覧

  • xまで削除(xは含まない)
dtx
  • xまで削除(xを含む)
dfx

大文字小文字変換

  • 単語単位で大文字に変換
gUiw
  • 単語単位で小文字に変換
guiw
  • 文字単位で大文字小文字変換
<visual mode> + U or u

Markdown

  • Markdownではリンクを開く際、別タブにする事が出来ない。JSなど使えばいけそうだが、Markdownの簡易性を損なう。その場合、htmlのaタグを書くしかない。

vim script

  • 先頭にインデントを追加すると空行にまでインデントがつき、段落間での移動の際、その部分を飛ばしてしまう。
  • 空行で、空白やタブしかないものはそれらを削除し、段落間でのジャンプを可能にする。
  • sed置換の際、置換後の改行コードは\xDとし、制御コードを入力する必要がある。この辺は環境に寄り添う。制御文字Ctrl V + Ctrl Mがvim 上で打てない。。
  • ビジュアルモードでのコマンドを用意する。
  • .vimrcの追加
" remove first white spaces
function! Rfw()
 execute ":%s/^[\\t  ]*\\n/\xD/g"
 " execute ":r! pwd"
endfunction

:command! Rfw call Rfw()
nmap <C-y> :Rfw<CR>

vim 折りたたみ

折りたたみコマンド。忘れるのでメモ。

" https://maku77.github.io/vim/advanced/folding.html
" 折りたたみと展開(カーソル位置の要素に対して)
"   zc  -- 折りたたみ (Close one fold under the cursor)
"   zo  -- 展開(一段階)(Open one fold under the cursor)
"   zO  -- 展開(すべて)(Open all folds under the cursor recursively)
"
" 折りたたみと展開(ファイル全体の要素に対して)
"   zm -- 折りたたみ(一段階) (Fold more)
"   zM -- 折りたたみ(すべて) (Close all folds)
"   zr -- 展開(一段階) (Reduce folding)
"   zR -- 展開(すべて) (Open all folds)