expectについて嵌まった

2月 5th, 2015

久しぶりにexpectでスクリプトを書いてたら動かなくて嵌まった。

以前に書いていたエントリーを参考にしていた

 

今回書いていたスクリプトのshebangが #!/usr/bin/expectではなく、

#!/bin/bash だった事に起因していました。

 

なぜshebangが影響するかというと文字のエスケープが必要になるようです。

×   expect “Enter PEM pass phrase:”

○ expect \”Enter PEM pass phrase\:\”

前者はexpectを直接実行した場合でエスケープがいらないのに対し、

シェルスクリプト内でexpect -c として利用する場合はエスケープが必要になります。

 

ちょっと嵌まったので書いておきました。

 

itermのフォントについて

8月 7th, 2014

weechatを導入してから死ぬほど見づらい。

我慢できなくなってきたので調べたら「Ricty」というフォントが良さそうなのでインストールした。

brew tap sanemat/font

brew install rict  #結構時間かかるけど放置

自分の環境のFontsディレクトリにコピー

cp -f /usr/local/Cellar/ricty/3.2.3/share/fonts/Ricty*.ttf ~/Library/Fonts/

fc-cache -vf   #フォントのキャッシュをリビルド -v 詳細表示  -f 強制オプション

 

後はiTermのPreferenceから Profiles > Text > Changefont でRictyを選択。

Anti-aliasedにもチェックを入れないとまだ見づらいので注意。

s3cmdについて

8月 7th, 2014
今更だけどエントリ−書いていなかったので。。

yumのレポジトリに登録

cat <<EOF > /etc/yum.repos.d/s3tools.repo
#
# Save this file to /etc/yum.repos.d on your system
# and run "yum install s3cmd"
#
[s3tools]
name=Tools for managing Amazon S3 - Simple Storage Service (RHEL_5)
type=rpm-md
baseurl=http://s3tools.org/repo/RHEL_5/
gpgcheck=1
gpgkey=http://s3tools.org/repo/RHEL_5/repodata/repomd.xml.key
enabled=1
EOF

ツールのインストール
yum installs3cmd


s3cmd --config コマンドで動的に設定ファイルを作ってもいいのですが、
面倒な場合は下記コマンドで作られます。

access_key と secret_key はそれぞれご自身のものを設定して下さい。
AWSのコントロールパネルのMy AccountからSecurity Credentials を辿ると確認出来ます。
 
cat <<EOF >~/.s3cfg
[default]
access_key =
bucket_location = ap-northeast-1
cloudfront_host = cloudfront.amazonaws.com
cloudfront_resource = /2010-07-15/distribution
default_mime_type = binary/octet-stream
delete_removed = False
dry_run = False
encoding = UTF-8
encrypt = False
follow_symlinks = False
force = False
get_continue = False
gpg_command = /usr/bin/gpg
gpg_decrypt = %(gpg_command)s -d --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase_fd)s -o %(output_file)s %(input_file)s
gpg_encrypt = %(gpg_command)s -c --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase_fd)s -o %(output_file)s %(input_file)s
gpg_passphrase =
guess_mime_type = True
host_base = s3-ap-northeast-1.amazonaws.com
host_bucket = %(bucket)s.s3-ap-northeast-1.amazonaws.com
human_readable_sizes = False
list_md5 = False
log_target_prefix =
preserve_attrs = True
progress_meter = True
proxy_host =
proxy_port = 0
recursive = False
recv_chunk = 4096
reduced_redundancy = False
secret_key =
send_chunk = 4096
simpledb_host = sdb.amazonaws.com
skip_existing = False
socket_timeout = 300
urlencoding_mode = normal
use_https = False
verbosity = WARNING
EOF

基本的なコマンド
s3cmd ls  #s3上のトップディレクトリ表示
s3cmd put ./hoge s3://hoge.com/  #ファイルのアップロード
s3cmd get s3://hoge.com/foo  #ファイルのダウンロード
s3cmd sync ~/PATH/directory s3://hoge.com/  #rsyncと同様に差分の転送など

もっと詳しく見たい方はこちらへどうぞ http://s3tools.org/usage

svnコマンドについて

7月 4th, 2014

export  EDITOR=vim

svn export {FilePath|URL} Path2

これで.svnファイルが除外された形で保存されるため、容量が圧縮できる。既存環境で約1/4になりました。

 

svn commit 時にCONFLICTが発生した場合の対処。

自分のファイルを消す。

マージする。

revertする。

conflictした場合は

svn: Aborting commit: '/svn/hoge.txt' remains in conflict
このようなメッセージが出て、どうするか聞かれます。
rコマンドでmergeして、その後該当ファイルを編集します。
<<<<<<< .mine
hoge
moge
=======
foo
bar
>>>>>>> .r2

 

ファイルを開くと上記のようになっています。
問題がなければ、<で始まる行、"
=======

 

"、>で始まる行を削除して保存しましょう。

 

mysqlbinlog

7月 4th, 2014

テキストで見られるようになるよ。

mysqlbinlog /var/lib/mysql/sv**.example.com-bin100 > /tmp/binlog.txt

sedをgrepぽく使う

7月 4th, 2014

sed -n ‘/server-id/p’ /etc/my.cnf

-n でパターンスペースをホールドスペースに突っ込む
アクションpでプリント

grepみたいに使う。正規表現などでsedに対応しているregexを使いたい時など。

trコマンドについて

7月 4th, 2014
echo unko | tr [:upper:] [:lower:]
UNKO

 

bundlerのメモ

7月 4th, 2014

まずはbundlerのインストールから

 

gem install bundler

実行したいスクリプトがあるディレクトリでinitコマンド実行

cd /PATH/TO/hoge

bundle init

initするとテンプレートファイルができるので、自分が必要なgemを記述する。

gemの配布先が別途必要な場合はsourceで指定

 

vim Gemfile

# A sample Gemfile
source “https://rubygems.org”

gem “redis”
gem “json”

 

 

bundle install

指定したディレクトリにgemをインストールする場合は–pathオプションをつけます。

bundle install –path=/home/osho-3/sample/bundle

Redis Commanderについて

7月 3rd, 2014

なにやら名前がカッコイイ

ブラウザからredisのデータにアクセスできる優れもの。

npmでパッケージが提供されています。

npmとはNodeむけパッケージ管理ツールです。

Nodeをインストールすると付いてくる。

yum とか aptとか gem とかの一種だと思って頂けるとよいでしょう。

npm -v
1.4.14 #バージョンが返ってくればインストールできてます。

 

npm -g install redis-commander # -g はグローバルオプションです。
/usr/local/bin/redis-commander -> /usr/local/lib/node_modules/redis-commander/bin/redis-commander.js
redis-commander@0.2.1 /usr/local/lib/node_modules/redis-commander
├── inflection@1.2.7
├── readline-browserify@0.0.4
├── cmdparser@0.0.3
├── sf@0.1.7
├── async@0.1.22
├── ejs@0.8.8
├── optimist@0.3.7 (wordwrap@0.0.2)
├── redis@0.7.3
├── node-redis-dump@0.2.1 (underscore@1.5.2, async@0.2.10, redis@0.8.6)
├── express@2.5.11 (qs@0.4.2, mime@1.2.4, mkdirp@0.3.0, connect@1.9.2)
└── browserify@1.12.3 (nub@0.0.0, commondir@0.0.1, crypto-browserify@0.4.0, resolve@0.2.8, vm-browserify@0.0.4, coffee-script@1.7.1, detective@0.1.1, http-browserify@0.1.14, deputy@0.0.4)

 

redis-commanderコマンドで起動させ、iptablesなどでアクセス制限をしていたらデフォルトの8081ポートを空けてブラウザでアクセスするだけ。

と、ここまで書きましたがnodeの管理もご多分に漏れず複数のバージョンを切り替えて使えるようです。

rbenv とか plenvとか

nodeのバージョン管理ツールの名称はnvm

nvmのインストールからしていきましょう。

git clone git://github.com/creationix/nvm.git ~/.nvm
source ~/.nvm/nvm.sh

#インストールできるバージョンの一覧表示

nvm ls-remote
nvm install v0.11.13
nvm use v0.11.13

node -v

v0.11.13

 

npm -v
1.4.9

npm install redis-commander

 

npm ls redis-commander
/”your account”
└── redis-commander@0.2.1

which redis-commander
~/.nvm/v0.11.13/bin/redis-commander

nvm経由で特定のバージョンが使えるのはsourceコマンドで ~/.nvm/nvm.shして nvm use ‘version’ しているからなんですね。

ログアウトして再度ログインすると使えなくなります。

では~/.*sh_profileにでも登録しましょう。

echo -e “\n” >> ~/.bash_profile

echo “nvm use v0.11.13” >> ~/.bash_profile

 

 

 

redis-commander はフロントで常駐するので、supervisorとかそこらへんので、デーモンとして起動してやればいいでしょう。

http://sample.com:8081

sample.comをあなたのサーバーのホスト名にしてアクセスしてみて下さい。

 

 

Swiftではじめよう その3

7月 3rd, 2014

前回は寄り道したので戻ります。

swiftのREPL(Read-eval-print loop 対話型評価環境だそうです)環境を整えましたが、複数行コピペすると思った通りに動かなくて

イライラしたので、ファイルに落としてswiftコマンドの引数に渡してコンパイルと実行をしてみました。

vim hoge.swift

swift -i hoge.swift

 

// If

//閉じブレースが特徴的

var com = “pepabo”

ifcom.isEmpty {

    println(“Empty”)

} else {

    println(com)

}

// Optional

//下記の:Type?で条件指定できる

// 変数:Type?で表現される

let cityDict = [

    “Japan”:“Tokyo”,

    “France”:“Paris”

]

let cityOpt:String? = cityDict[“Japan”]

if let cityName = cityOpt {

    let currentityName = “You ar in “ + cityName

   println(currentityName)

} else {

   let message = “You ar not here”

  println(message)

}

//ifの簡略化

/*

let opt:String? = cityDict[“France”]

if opt {

    println(“Do something”)

}

*/

// optをつけないとエラーになる。

//unwrappedされていない値ということだが、飲み込めていない

let opt:String? = cityDict[“France”]

if opt {

    let message = “You are in “ + opt!

}

//forループ

for var idx = 0; idx < 5; idx++ {

    var message = “かえりたい + String(idx)

    println(message)

}

// 5回実行される idx < 5

for idx in 15 {

    var message = “Count=” + String(idx)

    println(message)

}

// 4回実行される 条件式のドットの数が違う idx <= 5

for idx in 1..5 {

    var message = “Count=” + String(idx)

    println(message)

}

// List Collectionの要素を回す

//eachのような使い方

let names = [“Hikari”, “Kodama”, “Nozomi”, “Komachi”]

for name in names {

    println(“Hello, \(name)!”)

}

// Dictionary型の要素を回す。(連想配列)

for (country, city) in cityDict {

    println(“Country : \(country), city: \(city)”)

}

つづく