こうこく

自分用メモ

20230310

Linux CPUのアーキテクチャを調べる

コマンド
lscpu | grep "Architecture:"
結果
Architecture:        x86_64

全体だとこんな感じ

Architecture:        x86_64
CPU op-mode(s):      32-bit, 64-bit
Byte Order:          Little Endian
CPU(s):              1
On-line CPU(s) list: 0
Thread(s) per core:  1
Core(s) per socket:  1
Socket(s):           1
NUMA node(s):        1
Vendor ID:           GenuineIntel
CPU family:          6
Model:               63
Model name:          Intel(R) Xeon(R) CPU E5-2676 v3 @ 2.40GHz
Stepping:            2
CPU MHz:             2400.135
BogoMIPS:            4800.01
Hypervisor vendor:   Xen
Virtualization type: full
L1d cache:           32K
L1i cache:           32K
L2 cache:            256K
L3 cache:            30720K
NUMA node0 CPU(s):   0
Flags:               fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36
 clflush mmx fxsr sse sse2 ht syscall nx rdtscp lm constant_tsc rep_good nopl xtopology cpui
d pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes
 xsave avx f16c rdrand hypervisor lahf_lm abm cpuid_fault invpcid_single pti fsgsbase bmi1 a
vx2 smep bmi2 erms invpcid xsaveopt

20230212

WSL2のUbuntuのIPを調べる

ip addr show dev eth0
実行結果の例
6: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:15:5d:2f:1b:42 brd ff:ff:ff:ff:ff:ff
    inet 172.26.129.189/20 brd 172.26.143.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::215:5dff:fe2f:1b42/64 scope link
       valid_lft forever preferred_lft forever

172.26.129.189 のとこがWSL側のIPなので、例えばWSL側でWebサーバーを立ち上げていたらWindows側のブラウザのアドレスバーに入力すればアクセスできる

20211109

Expressで静的なファイル表示

URL /aaaaa 以下にアクセスで /public 以下のファイルを表示
const express = require('express');
const app  = express();
const port = 3000;
app.use('/aaaaa', express.static(__dirname + '/public'));
app.listen(port, () => {
  console.log(`http://localhost:${port}/aaaaa de /public no nakami ga deru-`);
});

20211107

Ubuntu 20.04 メモリ使用量確認

コマンド
free -h
実行結果
              total        used        free      shared  buff/cache   available
Mem:           983M        389M        136M         12M        457M        423M
Swap:            0B          0B          0B

Ubuntu 20.04 ディスク使用量確認

コマンド
df -h
実行結果
Filesystem      Size  Used Avail Use% Mounted on
udev            481M     0  481M   0% /dev
tmpfs            99M  776K   98M   1% /run
/dev/xvda1       39G   11G   29G  27% /
tmpfs           492M     0  492M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           492M     0  492M   0% /sys/fs/cgroup
/dev/loop6       34M   34M     0 100% /snap/amazon-ssm-agent/3552
/dev/loop2       25M   25M     0 100% /snap/amazon-ssm-agent/4046
/dev/loop4       56M   56M     0 100% /snap/core18/2128
/dev/loop3      100M  100M     0 100% /snap/core/11798
/dev/loop1      100M  100M     0 100% /snap/core/11993
/dev/loop0       56M   56M     0 100% /snap/core18/2246
tmpfs            99M     0   99M   0% /run/user/1000

20210725

TypeScript オブジェクト型を加工する型

readonlyを除去
type RemoveReadonly<T> = {
  -readonly [P in keyof T]: T[P];
};
?を除去
type RemoveUndefined<T> = {
  [P in keyof T]-?: T[P];
};
生えてるか不明だし値の型も不明
type Unvalidated<T> = {
  [P in keyof T]?: any;
};

2020-12-08

Node.js グローバルがどこ見てるか確認

global.module.paths に配列でパスが入ってる

2020-11-22

package.json から npm install コマンド生成

※バージョンは無視

console.log(`npm i -s ${Object.keys(require('./package.json').dependencies).join(' ')}`);
console.log(`npm i -D ${Object.keys(require('./package.json').devDependencies).join(' ')}`);

2020-09-11

画像保存妨害

画像のラッパー要素に ::after で同サイズの透明なボックスを乗せると……

.image-wrapper {
  position: relative;
}
.image-wrapper::after {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  content: "";
}

2020-09-08

Webpack 「hidden modules」を全部表示する

webpack --display-modules

2020-06-21

Prettier JSXのタグの部分はダブルクォート、それ以外はシングルクォートしたい

singleQuote 有効かつ jsxSingleQuote 無効

2020-06-19

AWS 東京リージョンにパブリックアクセスブロックONのS3バケットを作成する

コマンド2発必要

aws s3api create-bucket --bucket <名前> --create-bucket-configuration LocationConstraint=ap-northeast-1
aws s3api put-public-access-block --bucket <名前> --public-access-block-configuration BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true

2020-05-26

指定したサーバーでnslookup

nslookup
> server 8.8.8.8
> note.kiriukun.com

2020-05-24

apt

依存関係もアンインストール
sudo apt autoremove piyopiyo
設定ファイルを含めて依存関係もアンインストール
sudo apt --purge autoremove piyopiyo
完全一致検索
apt list piyopiyo
部分一致検索
apt search piyopiyo
インストール済みのパッケージを表示
sudo dpkg -l

2020-04-22

JavaScript 分割代入で再代入

カッコで囲わないと Unexpected token '=' が出る

const obj = { a: 1, b: 2 };
let a, b;
({a, b} = obj);
console.log(a, b);  // -> 1 2

2020-04-09

AWS-CLI 接続先、接続ユーザーを取得

【小ネタ】AWS CLIでAWS Account IDが取れるようになりました! | Developers.IO

aws sts get-caller-identity
結果
{
    "UserId": "AAAAAAAAAAAAAAAAAAAAA",
    "Account": "999999999999",
    "Arn": "arn:aws:iam::999999999999:user/kiriukun"
}

2020-04-08

anyenvをアンインストール

ホームディレクトリにインストール済みのanyenvと設定ファイルを削除

rm -rf ~/.anyenv
rm -rf ~/.config/anyenv

それから、インストール時に .bashrc とか .bas_profile あたりに以下の記述を追加してるはずなので、手動で削除する

.bashrcなど
export PATH="$HOME/.anyenv/bin:$PATH"
eval "$(anyenv init -)"

ターミナルを落として上げなおして (再ログイン)、anyenv versions などでコマンドが使えなくなったことを確認する。

2020-04-06

シンボリックリンク削除

unlink /path/to/link

2020-04-04

Ubuntuのバージョン確認

cat /etc/os-release | grep VERSION
結果
VERSION="18.04.4 LTS (Bionic Beaver)"
VERSION_ID="18.04"
VERSION_CODENAME=bionic

Ubuntu MariaDBを完全にアンインストール

Ubuntu18.04+MariaDBでいろいろやらかした話 | 雑廉堂の雑記帳

sudo dpkg --force-all -r mariadb-server-10.1
sudo apt --purge remove mysql-server*
sudo apt --purge remove mysql-common*
sudo apt --purge remove mariadb-server*

aptはremoveじゃなくてpurgeしないと設定が残るらしい

最後の mariadb-server を消すとき、画面が出てきて消すか聞かれるのでYESを選択すること

Ubuntu シンボリックリンク作る

ln -s /path/to/target linkname

2020-03-16

AWS CloudFormationでRoute 53にエイリアスのAレコード追加

コメントのとこは公式マニュアル参照

  MyAliasRecordSetIPv4:
    Type: "AWS::Route53::RecordSet"
    Properties:
      HostedZoneId: "追加先のホストゾーンID"
      Name: "ドメイン名"
      Type: "A"
      AliasTarget:
        DNSName: "CloudFrontディストリビューションのドメイン名"
        HostedZoneId: "Z2FDTNDATAQYW2"  # CloudFrontならこれ固定

  MyAliasRecordSetIPv6:
    Type: "AWS::Route53::RecordSet"
    Properties:
      HostedZoneId: "追加先のホストゾーンID"
      Name: "ドメイン名"
      Type: "AAAA"
      AliasTarget:
        DNSName: "CloudFrontディストリビューションのドメイン名"
        HostedZoneId: "Z2FDTNDATAQYW2"  # CloudFrontならこれ固定

2020-03-10

Gitでconflictした時の BASE, LOCAL, REMOTE

  • BASE … 共通の先祖
  • LOCAL … 自分の変更
  • REMOTE … 相手の変更

自分のを捨ててよければREMOTEを採用すればよい。

stashからpopしてconflictした場合は、LOCALとREMOTEが逆なので注意。(相手の変更が反映されたところに、popされた自分の変更が降ってくるわけだから)

2020-03-03

AWS CloudFormationでVPC Lambdaを作ろうとしたら CreateNetworkInterface がどうこう

please make sure your function execution role have permission to CreateNetworkInterface みたいなエラーが出たら、VPCで動かすLambdaの実行ロールのポリシーに ec2:CreateNetworkInterface, ec2:DescribeNetworkInterfaces, ec2:DetachNetworkInterface, ec2:DeleteNetworkInterface が足りない。

AWS S3の前にCroudFront置いたらS3のURLにリダイレクトされてAccessDeniedと言われる

CroudFront作ってすぐにアクセスしようとすると、設定に何も問題無くても、S3の生URLへのリダイレクトがCroudFrontにキャッシュされてしまうらしい。

2020-02-13

JavaScript オブジェクトの配列を特定のキーでソート

list をオブジェクトの id でソートするなら↓

list.sort((a, b) => {
  if (a.id > b.id) return 1;
  if (a.id < b.id) return -1;
  return 0;
});

2020-02-12

設定ファイルを指定してwebpack

webpack --config webpack.config.js

設定ファイルを指定してwebpack-dev-server

webpack-dev-server --config webpack.config.js

2020-02-07

printableなASCII文字以外をヒットさせる正規表現

[^ -~]

printableなASCII文字と改行以外をヒットさせる正規表現

[^\r\n -~]

2020-02-03

VSCode settings.jsonの開き方

左下の歯車マークをクリック、または Ctrl + , で設定画面を開く → 画面右上にあるファイルのマークをクリック

このファイルのアイコンは、カーソルを合わせると『設定 (JSON) を開く』と表示される

VSCode ウィンドウのリロード

Ctrl + Shift + P でコマンドパレットを開く

Developer: Reload Window と入力して実行

2019-11-16

Windowsでシンボリックリンク

mklink /D %リンク置きたい場所% %リンク先%

2019-11-02

ゴミ

function toQueryString(params) {
    var ret = '';
	Object.keys(params).forEach(function(key) {
		if (ret !== '') {
			ret += '&';
		}
		var value = params[key];
		if (value === '' || value === null) {
			ret += key;
		} else {
			ret += key +'='+ encodeURIComponent(value);
		}
	});
    return ret;
}
function getCookies() {
	var ret = {};
	var tmp = document.cookie.split(';');
	for (var i = 0, len = tmp.length; i < len; ++i) {
		var arr = tmp[i].split('=');
		if (arr[1] === undefined) {
			arr[1] = '';
		}
		ret[arr[0]] = arr[1];
	}
	return ret;
}

2019-10-31

npm インストールしたパッケージ確認

--depth=0 つけると、依存で入ったパッケージを省いて表示できる

# ローカル
npm list --depth=0
# グローバル
npm list -g --depth=0

pip インストールしたパッケージ確認

--not-required つけると、依存で入ったパッケージを省いて表示できる

pip list --not-required

2019-10-27

ImageMagick 7 で一括crop, resize

ウィンドウモード (1600x900) のゲームのスクショ (1602x927) から枠を除去して640x360以下に縮小、フォルダ内 .png 全部

magick mogrify -crop 1600x900+1+26 +repage -resize 640x360 *.png

2019-10-05

ソフトバンクのルーターの初期ユーザーとパスワード

ユーザー名「user」パスワード「user」

ソフトバンク 光ユニッット ポート開放

Ubuntu16.04 IPアドレス固定

/etc/network/interfaces
source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto ens33
#iface ens33 inet dhcp
iface ens33 inet static
address 192.168.1.200
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 192.168.1.1

2019-09-17

普通にbabel7

インストール
npm install --save-dev @babel/core @babel/preset-env @babel/cli
.babelrc
{
    "presets": [
        "@babel/preset-env"
    ]
}
起動方法
npx babel src -d lib

2019-08-29

ランレングス圧縮

やっつけ

function runlength(text) {
	let compressed = '';
	let n = 0;
	let pc = null;
	for (let i = 0, len = text.length; i < len; ++i) {
		const c = text.charAt(i);
		if (pc !== null && c !== pc) {
			compressed += n + pc;
			n = 0;
		}
		pc = c;
		++n;
	}
	if (n > 0) {
		compressed += n + pc;
	}
	return compressed;
}

console.assert( runlength('') === '' );
console.assert( runlength('a') === '1a' );
console.assert( runlength('aaabbbb') === '3a4b' );
console.assert( runlength('aaabbbbcccccabbaaaacc') === '3a4b5c1a2b4a2c' );

2019-08-27

webpackでbabel7

インストール
npm install --save-dev webpack webpack-cli
npm install --save-dev @babel/core @babel/preset-env babel-loader
.babelrc
{
    "presets": [
        "@babel/preset-env"
    ]
}
webpack.config.js
const path = require('path');

module.exports = {
  mode: 'development',  // productionにすると難読化&minifyされる
  entry: './src/index.js',
  output: {
    path: path.join(__dirname, 'public/js'),  // ここはフルパスで指定
    filename: 'bundle.js',
  },
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        loader: ['babel-loader']
      }
    ],
  }
};
起動方法
npx webpack

gulp4でlessを自動コンパイル

インストール
npm install --save-dev less gulp gulp-less
gulpfile.js
const gulp = require('gulp');
const less = require('gulp-less');

// lessをコンパイルするタスク
gulp.task('less', function(done) {
  gulp.src('./src/less/*.less').pipe(less()).pipe(gulp.dest('./public/css'));
  done();  // done()しないと終わらない
});

// ファイルの変更を監視してlessタスクを起動するタスク
gulp.task('watch', function() {
  gulp.watch('./src/less/*.less', gulp.series('less'));
});

// デフォルトのタスク (lessタスクとwatchタスクを両方やる)
gulp.task('default', gulp.series('less', 'watch'));  // gulp.series()に渡したタスクは左から順に流れる
起動方法
# lessタスクだけ実行
npx gulp less

# watchタスクだけ実行
npx gulp watch

# defaultタスクだけ実行
npx gulp

2019-08-21

AMIから復元したEC2インスタンスに踏み台から接続しようとしたら Permission denied(publickey)

AMIから作成したインスタンスは勝手にパスワードログインが無効化されるらしい

/etc/ssh/sshd_configPasswordAuthentication yes にしてSSH再起動 sudo service sshd restart

2019-08-02

upstart 登録

/ect/init 以下に {ジョブ名}.conf ファイルを作る

piyopiyo.conf
# 説明
description "hello"

# ランレベル3,4,5かつnetworkが開始したら動き出す
start on (runlevel [345] and started network)

# ランレベル3,4,5以外またはnetworkが停止したら止まる
stop on (runlevel [!345] or stopping network)

# プロセスが死んだら自動で復活する
respawn

# やること (例: ユーザー kiriukun で /my/terrible/program.sh を叩く)
exec sudo -u kiriukun /my/terrible/program.sh

upstart 設定をリロード

ジョブ追加したらやる

sudo initctl reload-configuration

upstart 起動、停止、再起動

piyopiyo はジョブ名。Amazon Linuxではログは /var/log/messages に出てたから、動かなかったら見る。

sudo initctl start piyopiyo
sudo initctl restart piyopiyo
sudo initctl stop piyopiyo

2019-07-31

ApacheのMPMを確認する方法

httpd -l コマンドで『Server MPM』を見る (※Windowsでしか確認してない)

WinNTはスレッド増える系だから、PHP乗せるならスレッドセーフ版にする

Server version: Apache/2.4.39 (Win64)
Apache Lounge VS16 Server built:   May 28 2019 17:12:51
Server's Module Magic Number: 20120211:84
Server loaded:  APR 1.7.0, APR-UTIL 1.6.1
Compiled using: APR 1.7.0, APR-UTIL 1.6.1
Architecture:   64-bit
Server MPM:     WinNT
  threaded:     yes (fixed thread count)
    forked:     no
Server compiled with....
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses disabled)
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=256
 -D HTTPD_ROOT="/apache"
 -D SUEXEC_BIN="/apache/bin/suexec"
 -D DEFAULT_PIDLOG="logs/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_ERRORLOG="logs/error.log"
 -D AP_TYPES_CONFIG_FILE="conf/mime.types"
 -D SERVER_CONFIG_FILE="conf/httpd.conf"

2019-07-30

Amazon Linux 秘密鍵じゃなくてパスワードでログインできるようにする

/etc/ssh/sshd_config を編集して PasswordAuthentication yes に変更する

変更したら /etc/rc.d/init.d/sshd restart で反映する

しくじると鍵でも入れなくなるから、他から入れることを確認するまで今のSSHを切ってはいけない

2019-07-25

Amazon Aurora (PostgreSQL互換) Serverless

  • PostgreSQLのバージョンは必ず最新のものになる。
  • パブリックアクセスは不可。踏み台EC2だの作って、そこからアクセスする。
  • 作成時にデータベース名を決められないっぽいので、デフォルトの postgres データベースでログインして作業する。
  • サブネットグループはRDSの画面の左メニュー『サブネットグループ』から作れる。
AmazonLinuxにpsqlインストール
yum install postgresql96.x86_64
psqlでRDSに接続
psql -h ${RDSのエンドポイント} -U ${データベース作成時に設定したユーザー名} -d postgres

Amazon LinuxからPostgreSQL(RDS)へ接続する - Qiita

Amazon Linux 踏み台サーバーの作り方

以下サイト様を参照

【AWS 再入門】VPC 環境に踏み台サーバーを構築して SSH 接続してみよう | PSYENCE:MEDIA

Amazon Linux sudoできるユーザーの作り方

sudo useradd kiriukun
sudo passwd kiriukun
sudo visudo

visudo すると /etc/sudoers を書き込み可能状態で開ける。開いたら以下を追記する。root ユーザーで似たような記述があるはずだから、そこらへんに書けばいい。

kiriukun    ALL=(ALL)       ALL

これで作ったユーザーは、sudo するときに自分自身のパスワードを求められる。rootユーザーのパスワードを入力させたいとか、パスワード入力しなくていいようにするには、以下サイト様を参照。

一般ユーザでもroot権限が必要なコマンドを実行できるようにする – sudo – ABC Blog

Amazon Linux ログインできないユーザーの作り方

sudo useradd -s /sbin/nologin kiriukun

もしこれで追加したユーザーで作業したいことがあったら、他のユーザーでログインしてから root に昇格 → su -s /bin/bash - kiriukun で入れる

ログインできないユーザの作成とログインできるように変更するコマンドの使用方法 | レンタルサーバー・自宅サーバー設定・構築のヒント

プライベートVPC内のEC2でyumできるようにする

プライベートなVPCはプライベートだから当然 yum も無理。でもAmazon Linuxの yum リポジトリがS3にあるらしいので、VPCにS3へのエンドポイントを追加してやれば yum できるようになる。

ただVPCのエンドポイントは存在するだけで有料なことは留意。

VPC閉塞網からyumリポジトリにアクセスする(Amazon Linux & RHEL) - のぴぴのメモ