harry’s memorandum

おれおれメモ

古いLinuxのcpuinfo

諸事情でesxi5のvmでcentos3.9をインストールして触っていたのですが、/proc/cpuinfoをみたら Core i5 が Mobile Pentium になってた。やったね!。Dixonってメンドシーノじゃないですか。カッパーマインより古いCPUと判断されるのはちょっとビックリ。

CentOS3.9のcpuinfo

$ cat /etc/redhat-release
CentOS release 3.9 (Final)
$ cat /proc/cpuinfo  | grep -3 "model name"
vendor_id       : GenuineIntel
cpu family      : 6
model           : 5
model name      : Mobile Pentium II (Dixon)
stepping        : 5
cpu MHz         : 2525.888
cache size      : 256 KB

こっちはCentOS5.8のcpuinfo

$ cat /etc/redhat-release
CentOS release 5.8 (Final)
$ cat /proc/cpuinfo  | grep -3 "model name"
vendor_id       : GenuineIntel
cpu family      : 6
model           : 37
model name      : Intel(R) Core(TM) i5 CPU       M 460  @ 2.53GHz
stepping        : 5
cpu MHz         : 2527.000
cache size      : 3072 KB

base64の備忘録

とりあえず、base64をしたかったのですが、調べると色々な方法があるなぁ、と思ったので備忘録。

opensslコマンド

一番よく使う方法かな。

$ echo -n dharry | openssl enc -base64
ZGhhcnJ5
$ echo  "ZGhhcnJ5" | openssl  enc -d -base64; echo
dharry
base64コマンド

Linuxだとこれかな。coreutilsは便利だけど他のUNIXだとなかったりするんだな。

$ echo -n dharry | base64
ZGhhcnJ5
$ echo -n "ZGhhcnJ5" | base64 -d; echo
dharry
$ rpm -qf /usr/bin/base64
coreutils-5.97-34.el5_8.1
nkfコマンド

これはこれで便利

$ echo -n "dharry"| nkf  -MB; echo
ZGhhcnJ5
$ echo -n "ZGhhcnJ5"| nkf -mB; echo
dharry
perl

perlはどのUNIXでもあるから一番楽かも。でもHP-UX11.00ぐらいだと厳しい。

$ echo -n "dharry" | perl -MMIME::Base64 -0777 -ne 'print encode_base64($_)'
ZGhhcnJ5
$ echo -n "ZGhhcnJ5" | perl -MMIME::Base64 -ne 'print decode_base64($_)'; echo
dharry
ruby
$ echo -n dharry   | ruby -r base64 -e 'puts Base64.encode64(STDIN.read)'
ZGhhcnJ5
$ echo -n ZGhhcnJ5 | ruby -r base64 -e 'puts Base64.decode64(STDIN.read)'
dharry
python
$ echo -n dharry | python -c "import base64,sys; base64.encode(sys.stdin,sys.stdout)"
ZGhhcnJ5
$ echo -n ZGhhcnJ5 | python -c "import base64,sys; base64.decode(sys.stdin,sys.stdout)"
dharry
PowerShell

コマンドレットは便利と思ったけどいまだになじめない。慣れは重要ですね。

PS C:\Users\dharry> $str = "dharry"
PS C:\Users\dharry> $str =  [Convert]::ToBase64String([System.Text.Encoding]::GetEncoding("iso-2022-jp").GetBytes($str))
PS C:\Users\dharry> $str
ZGhhcnJ5
tcl

tclshで試してみた。centosのtclだとbase64ライブラリがなかったのでActiveStateのActiveTCL8.5.11.1で確認。

% package require base64
2.4.2
% base64::encode "dharry"
ZGhhcnJ5
curl

apachebasic認証に渡すときはbase64にしているのでwgetcurlでもいけるはずだ。でも少しawkで頑張れば行けると思うけど面倒だから使わない。

$ curl -vu dharry: http://example.com 2>&1 | awk '{ if($0 ~/Authorization/) print $(NF)}'
ZGhhcnJ5Og==
$ echo -n ":" | base64
Og==
vbs

なんだかvbsが嫌になってきた。

Private Function base64(str)
	Dim dom, elem, bin, result

	Set st = CreateObject("ADODB.Stream")
	With st
		.Type = 2
		.Charset = "Shift-JIS"
		.Open
		.WriteText str
		.Position = 0
		.Type = 1
		bin = st.Read
		.Close
	End With

	Set dom = CreateObject("Microsoft.XMLDOM")
	Set elem = dom.CreateElement("tmp")
	elem.DataType = "bin.base64"
	elem.NodeTypedValue = bin
	result = elem.Text

	base64 = result
End Function
Wscript.echo base64("dharry")

読み方がわからないUNIXコマンドはどうすりゃいいんだ。

この業界は読み方がアバウトすぎる。だから間違っていても俺は強い意志でこう読みたい、と思ったので備忘録にする。*1

ASUS

いきなりUNIXコマンドじゃないけど、俺はずっとアサステックです。公式ではアスースらしい。

ASUSの日本での読み方は「アスース」が正式です。日本参入時から今まで、1度も変更したことはありません。呼び辛いと言われることは確かに多いのですが、社名なのでお許しください。

http://twitter.com/#!/asusjp/status/17064855018147840

Youtubeの英語発音ではエイサスとしか聞こえない。(2m02sあたり)

ASUSの公式サイトの「ブランドネームの由来」だとペガサスからきているから "〜〜サス" がになっていないと格好がつかないと思う。なので俺はアサスでいく。

芸術や学問でのインスピレーションの象徴となっているギリシャ神話の空飛ぶ白馬“ペガサス・Pegasus”、この最後の四文字がASUSの由来です。「市場に問うすべての製品に高レベルの品質と独創性を吹き込むことにより、機知に富むペガサスが象徴する強さ、創造性、純粋さを具体的に実現する」という意味を込めてのことです。

http://www.asus.co.jp/About_ASUS/about_asus_history_name/

SUSE Linux

そもそも SuSE と書いてしまう癖が抜けない。昔からスージーと読んでいます。でもオープンソースカンファレンスでノベルの人に聞いてみたら、「スーゼです」と言われた記憶がある。検索してみたらこういうのもあった。

一方、スペルから類推して発音してると思われる人は、スセ、スーゼー、スージーなど
いろいろ。U.S. でもいろいろな発音をする人がいますよ :-).

http://lists.opensuse.org/opensuse-ja/2004-09/msg00007.html

NovellServicesをみていると英語圏の発音だとスーセの気がしてきた。でもスージーでいく。(8sあたり)

eval

ずっとイーバル。evaluate だから エバルかなと思ったけど Youtubeでの英語発音は俺耳だとイバルとしか聞こえん。(6mあたり)

よく考えれば、C言語Javaの列挙型 enum もイーナムと自分は読んでいる。enumeration だからといってエヌーとかいうやつはいないと思う。Youtubeでイーナムと発音している人がいた(6sあたり)。つまりイーバルでこのまま行けということだな。なんだか心が温まる気分になったよ。

cron

クーロンとしかいえない。体がそうなっています。でもYoutubeでは何度聞いてもクロンとしか聞こえない。でもクーロンでいく。

gzip

絶対にグジップと信じて疑うことはなかったんですが、このYoutubeではジージップとしか聞こえない。グジップを改めてジージップと直すかは保留。

sudo

エスユードゥーと必ず読む。su を スー というのが恥ずかしくて エスユー と読んでいます。そのためsudoを スードゥー と読むことに抵抗があります。世間ではどうであるか調べてみると、へ? スドーってなんだよ。

しかし、このオッサンは 「スードゥー」と力強く発音していました。どうすりゃいいんだ。(55sあたり)

nohup

ノーハップと思っている。(1m30sあたり)

NAME
nohup - run a command immune to hangups, with output to a non-tty

aries

Itanium版のHP-UXでお世話になっているエミュレータ。2003年ぐらいにHPの人がアリーズって読んでいた。もし仮にアリエスが正しくても直さない。

HI-UX

日立のUNIXハイユーエックスって読んでいた。今更なんと読もうが興味はない。

*1:はてな記法ではYoutubeの時間指定ができないのね。

ノスタルジックな気持ちになれるかもしれないLinux/UNIXのコマンド

昔はよく使ってたけど今は全く使うことがないコマンド、もしくはきっと便利に使えるであろうと懐に忍び込ませておいたのに全く使うことがなかったコマンドって結構ありますよね。

logname

suでユーザ変更してもログインしたときのユーザを表示してくれる。いつか便利に使えると信じていたけど未だに使ったことがない。

$ logname
dharry
$ su -
Password:
# logname
dharry

banner

アスキーなものを作ってくれる。昔は楽しくbannerコマンドを撃ちまくっていたのにいつの間にか使わなくなった。私は大人になってしまったんだろうか。

$ banner banner

 #####     ##    #    #  #    #  ######  #####
 #    #   #  #   ##   #  ##   #  #       #    #
 #####   #    #  # #  #  # #  #  #####   #    #
 #    #  ######  #  # #  #  # #  #       #####
 #    #  #    #  #   ##  #   ##  #       #   #
 #####   #    #  #    #  #    #  ######  #    #

cal

カレンダーを表示。これも使わなくなった。使わなくなった諸悪の根源はGoogleカレンダーに違いない。

$ cal
   February 2011
Su Mo Tu We Th Fr Sa
       1  2  3  4  5
 6  7  8  9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28

pkill

マッチしたプロセスをすべて殺してくれる。一度バグで増え続けるプロセスをpkillでぶっ殺したときは「なんて使えるんだ!」と感動すらしたけど、あれ以来使ってない。あーあ、rootでpkillしてえなぁ。

$ pkill [pattern]

rev

文字列を逆にしてくれる。当時「どこで使うんだ?」と思ったがやっぱり使う機会は一度もなかった。

$ cat test.sh
#!/bin/sh
echo "hello world"
exit 0

$ rev test.sh
hs/nib/!#
"dlrow olleh" ohce
0 tixe

awkで代用だとこんな感じかな。

$  awk '{ len=length($0); do { printf substr($0,len,1)} while(--len > 0); printf "\n"  }'  test.sh
hs/nib/!#
"dlrow olleh" ohce
0 tixe

ワンライナーでtarバックアップ

Sourceforge.jp Magazineで連載?中のOne-Linerです。
忘れないように自分が昔から使っているのと新しく覚えたものを備忘録。
http://sourceforge.jp/magazine/09/01/14/0134202

Tarアーカイブとバックアップ

  • 普通のtarとgzip
$ tar cvf dir.tar ./dir
$ gzip -1 dir.tar
  • GNUtarでtgz
$ tar cvzf dir.tgz ./dir
  • GNUtarがない場合をパイプを使って。option '-[1-9]' は 圧縮時間を速くするか圧縮率を上げるか。
$ tar cf - ./dir | gzip -1 > dir.tar.gz
  • もちろんgzipではなく高圧縮のbzip2でもOK.
$ tar cf - ./dir | bzip2 -9 > dir.tar.bz2
  • もちろんリダイレクトではなくddに変更するのもあり。*1
$ tar czf - ./dir | dd of=dir.tgz
  • GNUtarだと'-C'でアーカイブ展開先を指定できる。
$ tar xvzf dir.tar -C ./path/to/hoge
  • tarでバルクコピー。tarはメタを保持するので便利。(cpでコピーするとシンボリックリンクとかあるとやべーことになるかもしれないし)
$ tar cf - ./test_src | (cd ./path/to/test_dest; tar xvf - )
  • GNUtarでバルクコピーなら'-C'でコピー先を指定できる。
$ tar cf - ./test_src | tar xvf - -C ./test_dest/
  • tarのバルクコピーはsshやrshを使って別マシンへ送りつけることも可能。
$ tar cf - ./test_src | ssh user@server.com "(cd /path/to/test_dest; tar xvf - )"
  • リモートサーバへのtarバルクコピーでもGNUtarなら'-C'オプションで展開先指定できる。
$ tar cf - ./test_src | ssh user@server.com tar xvf - -C /path/to/test_dest
  • サイズが大きい場合はGNUtarで圧縮してリモートサーバへバルクコピー。
$ tar czf - ./test_src | ssh user@server.com "(cd /path/to/test_dest; tar xvzf - )"
  • そもそもリモートサーバには圧縮アーカイブでバックアップにしたい。
$ tar czf - ./test_src | ssh user@server.com "cat - > /path/to/test_src.tgz"
  • 古いUNIX機にはGNUtarなんかねーんだよ、という状態でもリモートサーバに圧縮アーカイブでバックアップ。
$ tar cf - ./test_src | ssh user@server.com "gzip -1 > /path/to/test_src.tar.gz"
  • サイズが大きいからできるだけ高速になるようにddでおまじない。(きっと気休めだけど)
$ tar czf - ./test_src | ssh user@server.com dd bs=4096 of=/path/to/test_src.tar.gz

もしかしたら役に立つかもしれない小技

  • リモートサーバにテスト用の圧縮できないゴミファイル作成。*2
$ cat /dev/urandom | rsh -l user server.com "cat - > junkfile.txt"
  • mysqldumpしたデータをリモートサーバに日付付きでバックアップ
$ mysqldump -u root -x --all-databases  | ssh user@server.com "gzip -1 > /path/to/backup.`date +%Y%m%d`.gz"
  • リダイレクトうざいって人はddに変更。(ローカル/リモート)圧縮するところは気分で。
$ mysqldump -u root -x --all-databases | gzip -1 | ssh user@server.com dd of=/path/to/backup.`date +%Y%m%d`.gz
  • ログインに失敗(もしくはブルートフォースアタック)しているログをメールで送るんだけど、理解不能な社内ルールのためにメール送信できるサーバが限定されている場合。
$ awk '{ if($8=="failure;") print }' secure | ssh user@server.com mail -s 'failure_check' hoge@example.co.jp
  • 暇なのでパイプたくさん繋げてみる
$ tar cf - /path/to/src  | gzip -c  | cat - | gzip -cd | tar xvf - -C /path/to/dest

*1:標準入出力はリダイレクトでもddでも好みの方法ってことで

*2:リモートサーバ先にsshもとい/dev/urandomがない場合という超限定しか使えん