tec memo

メモです。

cpuの情報を見やすくするlscpu

CPUの情報を知りたい時、/proc/cpuinfo の中身をいつも見ていたが、コマンド一発でしかも見やすくしてくれるコマンドがlscpu。便利

  • lscpu を実行した場合
# lscpu
アーキテクチャ: x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                1
On-line CPU(s) list:   0
コアあたりのスレッド数:1
ソケットあたりのコア数:1
Socket(s):             1
NUMAノード:         1
ベンダーID:        GenuineIntel
CPUファミリー:    6
モデル:             62
Model name:            Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz
ステッピング:    4
CPU MHz:               2599.998
BogoMIPS:              5199.99
仮想化:             VT-x
ハイパーバイザーベンダー:KVM
仮想化タイプ:    完全仮想化
L1d キャッシュ:   32K
L1i キャッシュ:   32K
L2 キャッシュ:    256K
L3 キャッシュ:    20480K
NUMAノード 0 CPU:   0
  • /proc/cpuinfo を見た場合
# cat /proc/cpuinfo
processor   : 0
vendor_id   : GenuineIntel
cpu family  : 6
model       : 62
model name  : Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz
stepping    : 4
microcode   : 0x1
cpu MHz     : 2599.998
cache size  : 20480 KB
physical id : 0
siblings    : 1
core id     : 0
cpu cores   : 1
apicid      : 0
initial apicid  : 0
fpu     : yes
fpu_exception   : yes
cpuid level : 13
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon rep_good nopl eagerfpu pni pclmulqdq vmx ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm vnmi ept fsgsbase tsc_adjust smep erms xsaveopt
bogomips    : 5199.99
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:

インストール済みパッケージに変更が無いかチェック

インストール済みのパッケージファイルとRPMファイルの情報を比較し、変更がないかをrpmコマンドでチェックすることができる。

私の環境で、td-agentをチェックしてみる。

# rpm -V td-agent
.M....G..    /opt

/opt で以下が変わっていた。 M は、ファイルの権限が変わっている。 G は、グループが変わっている。

その他のコードは以下。

コード 説明
5 MD5チェックサムが異なる。
S ファイルの大きさが異なる。
L シンボリックリンク属性が異なる。
T ファイルの修正時刻(mtime)が異なる。
D バイスファイルが変更されている。
U ファイルの所有者が変更されている。
G ファイルのグループが変更されている。
M ファイルのモードが変更されている。
? 未知または理由不明。

pmilterの導入

概要

pmilter

PmilterはProgrammable Mail Filterの略で、SMTPサーバ(送信や受信)とmilterプロトコルで通信し、SMTPサーバの送受信の振る舞いをRubyでコントロールできるサーバソフトウェアです。

ref: Pmilter: Programmable Mail Filter Serverを作った

rubyで自分の思い通りに制御できるところが素晴らしいなと思い、試してみる。

環境構築にあたっては、 pmilter + postfixでプログラマブルなSMTPサーバを作る(入門編) を参照するとして、私は補足を。

環境

OS, centos7
MTA, postfix3.1

補足

postfix3.1が最新のステーブルだがBaseのリポジトリにはないので、gfさんのリポジトリを利用させていただいた。 また、postfix2系がすでに入っていると、競合してインストール出来ないので、postfix2をアンインストールしたのちにpostfix3を入れる。

rpm -ivh http://mirror.symnds.com/distributions/gf/el/7/gf/x86_64/gf-release-7-10.gf.el7.noarch.rpm
yum remove postfix
yum --enablerepo=gf-plus install postfix3

pmilter導入

pmilter を socket を利用して起動するもプロンプトがすぐに返ってきた。

sudo -u postfix ./pmilter -c pmilter.conf

/var/log/messages に以下エラー。

Jan  5 19:11:58 localhost pmilter: pmilter: Unable to bind to port /var/spool/postfix/pmilter/pmilter.sock: Permission denied
Jan  5 19:11:58 localhost pmilter: pmilter: Unable to create listening socket on conn /var/spool/postfix/pmilter/pmilter.sock

/var/spool/postfix/pmilter/ がroot権限で作成されていたため、権限がないというエラーになっていた

chown postfix: /var/spool/postfix/pmilter

再度実行し、うまく起動した。

動作確認

動作確認にはpostfixに付属でついているsmtp-sourceを利用。

smtp-source -s1 -m1 -l 1024 -f test@example.com -t src@example.com -S "test mail" 127.0.0.1

pmilterでログが正常に出力された

[root@localhost pmilter]# sudo -u postfix ./pmilter -c pmilter.conf
[Thu, 05 Jan 2017 12:54:55 GMT][notice]: pmilter/0.0.1 starting
hello pmilter handler called from pmilter
client ipaddr 127.0.0.1
client hostname localhost
client daemon localhost.localdomain
handler phase name: mruby_connect_handler
helo hostname: localhost.localdomain
tls client issuer:
tls client subject:
tls session key size:
tls encrypt method:
tls version:
env from from args: <test@example.com>
env from from symval: test@example.com
SASL login name:
SASL login sender:
SASL login type:
env to from arg: src@example.com
env to from symval: src@example.com
header: {"From"=>"<test@example.com>"}
header: {"To"=>"<src@example.com>"}
header: {"Date"=>"Thu,  5 Jan 2017 21:55:05 +0900 (JST)"}
header: {"Message-Id"=>"<3244.0003.0000@localhost.localdomain>"}
header: {"Subject"=>"test mail"}
body chunk; 1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
2XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
3XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
4XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
5XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
6XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
7XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
8XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
9XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
2XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
myhostname: localhost.localdomain
message_id: DD58741B34FC
reveive_time: Thu Jan 05 21:55:05 2017
add_header(X-Pmilter:True): Enable

macでパスワードを生成する

macでパスワードを作りたい場合、pwgenを使う。

導入方法

インストールは Homebrewを導入していればbrew installするだけ。

brew install pwgen

# brew install pwgen
==> Downloading https://downloads.sourceforge.net/project/pwgen/pwgen/2.07/pwgen-2.07.tar.gz
==> Downloading from http://jaist.dl.sourceforge.net/project/pwgen/pwgen/2.07/pwgen-2.07.tar.gz
######################################################################## 100.0%
==> ./configure --prefix=/usr/local/Cellar/pwgen/2.07 --mandir=/usr/local/Cellar/pwgen/2.07/share/man
==> make install

使い方

pwgen を実行するだけで、8桁のパスワードをたくさん出してくれるが、オプションを渡すことでさらに複雑なパスワードや逆に簡単なパスワードを生成することができる。

Usage: pwgen [ OPTIONS ] [ pw_length ] [ num_pw ]

OPTIONS

OPTION Content
-c –capitalize パスワードに最低1文字は大文字を含める(デフォルト)
-A –no-capitalize パスワードに大文字を含めない
-n –numerals パスワードに最低1文字は数字を含める(デフォルト)
-0 –no-numerals パスワードに数字を含めない
-y –symbols パスワードに最低1文字は特殊文字を含める
-s –secure 完全にランダムなパスワードを生成する。
-B –ambiguous パスワードに曖昧な文字は含めない(0とO等)
-h –help 使い方を表示する
-H –sha1=path/to/file[#seed] ランダムなパスワードをファイルのsha1ハッシュを使用する
-C 列にパスワードを表示する(デフォルト)
-1 列にパスワードを表示しない(1行1パスワード)
-v –no-vowels 偶然の不快な言葉を避けるために母音を使用しない

pw_length

パスワードの文字数を指定する。

num_pw

パスワードの生成数を指定する。

試しに使ってみよう。

以下の条件で、実行する。 - 数字を含めない - パスワードは10文字 - パスワードを5つ生成する。

# pwgen -0 10 5
waijahgahM aeRahkemoo keeCeithoh Haeshaecam OhmieGeefa

散らかった写真を整理したい方へ

数年前に家族が撮影した未整理の写真データが出てきた。 変更した日は出ているが、写真名からはいつのものか判断できない。さらにはよく見ると同じ写真がファイル名が違うものであったりと、かなり状態としては悲惨だった。 それをサクッと整理したお話です。

以下、finderで表示した場合、こんな感じだった。

f:id:atani:20161201230148p:plain

整理するためにやるべきこと

用件としては二つ

  • 重複したデータは取り除く
  • それぞれの写真の日付が一目でわかるようにする

やったこと

重複データを取り除く。

お金を出せば有料のアプリで一気にできるのだが、どちらもコマンドを使って解決した。

まず、重複データを取り除く。

fdupes というコマンドを利用した。mac標準では入っていないので、brew を使ってインストールする。

brew install fdupes

※ なお、brew が何ものかについては MacにHomebrewをインストールする あたりを参照のこと。

これでfdupes が使える状態になった。

# fdupes -r フォルダ名

これで、重複しているファイルリストが出てくる。

# fdupes -r backup/ | head
backup/SH3E0154.jpg
backup/SH3E0154_0001.jpg

backup/SH3E0090.jpg
backup/SH3E0090_0001.jpg

backup/PAP_0222.JPG
backup/PAP_0223.JPG
backup/PAP_0224.JPG
backup/PAP_0225.JPG

fdupesに重複ファイルを消すオプションがついているけれど、消してしまったら元に戻せないので、一度対象のファイル名をテキストに出力する。

fdupes -rf backup/ | sort | uniq | grep -v '^$' > duplicate.list

中身を確認し、問題なければ削除する。

while read file; do rm "$file"; done < duplicate.list

この時、rmだとこれまた問答無用で消えてしまうので、それでも怖い方はrmtrashなどを利用する。 そうすると、重複ファイルは、ゴミ箱に入る。確認が終わったらゴミ箱を空にすればOK!

ファイルがいつに撮影されたものか一目でわかるように。

ファイル名が日付になれば、一目でわかる。 jhead コマンドを利用する。

brewで一発で入る。

brew install jhead

ファイル名を変換するには以下のとおり。

jhead -nf%Y-%m-%d-%H%M%S [ファイル名]

正規表現が使えるので、

jhead -nf%Y-%m-%d-%H%M%S *.jpg

f:id:atani:20161201232106p:plain

あとは、年月日のディレクトリごとに整理するなりしたらスッキリ。

smtpの負荷試験

postfixサーバでの負荷試験をするために、smtp-source(postfixに内包されている) を用いた。 メールを配送したくないのであれば、smtp-sinkを使うと良い(ここでは割愛)

  • 例:

    smtp-source -s100 -m10000 -l 4194304 -f info@example.com -t info@hogehoge.com -M "example.com" -S "test mail" smtp.example.com

  • オプション

    オプション 説明
    -s SMTPセッションの並列数
    -m 送信数
    -l 送信サイズ
    -f 送信元メールアドレス
    -t 送信先メールアドレス
    -M HELOコマンドのホスト名
    -S 件名

送信元サーバが非力だと思った性能が出せないので、気をつける。

変数宣言されているが使われていない。

変数宣言しているが使われていないってエラーが出る。 golang厳しい。

# go run main.go
# command-line-arguments
./main.go:14: a declared and not used