ぬん さん プロフィール

  •  
ぬんさん:  システム開発メモ
ハンドル名ぬん さん
ブログタイトル システム開発メモ
ブログURLhttp://progmemo.wp.xdomain.jp/
サイト紹介文Java RDB Linuxを主に使うシステム開発についての備忘録
参加カテゴリー
更新頻度(1年)情報提供51回 / 365日(平均1.0回/週) - 参加 2015/08/21 21:29

ぬん さんのブログ記事

  • ある正数以上の数で最小のNの倍数をワンライナーで求める
  • ワンライナーの前にRubyである正数に最も近いNの倍数を求めるスクリプトを作る。例として、ある正数を引数で渡して変数given_nrに格納し、Nを8とする。スクリプトファイル名をmultiple.rbとする。まず考えられる解法は、given_nrをNで割り、余りがでなければgiven_nrを、余りが出れば商に1を足した数にNをかけたものを出力する方法だ。N=8given_nr=ARGV[0].to_i# 方法0p given_nr % N == 0 ? given_nr : (given_nr / N + 1) * N実 [続きを読む]
  • IPアドレスを指定のプレフィックス長で変換する
  • 192.168.1.0/24のようにプレフィックス24で表示されているIPアドレスの範囲をプレフィックス 26で表
    示してみる。Rubyで実行するには、ipaddressライブラリをgemでinstallして使う。$ gem install ipaddressipaddre
    ss (0.8.3)$ ruby -r'ipaddress' -e'IPAddress("192.168.1.0/24").subnet(26).each{|i| puts i.to_string}'
    192.168.1.0/26192.168.1.64/26192.168.1.128/26192.168.1.192/2624を26にしたので、1行で表せていたIPアドレ [続きを読む]
  • 最新のJDKのrpmをコマンドで取得する
  • 最新のJDKのrpmをコマンドで取得し、yum installする。手動でダウンロードせず、JDKの更新がスクリプトで実施可能になる。$ SITE=http://www.oracle.com$ URL=${SITE}$(curl -s $SITE/technetwork/java/javase/downloads/index.html | egrep -m1 -o "/technetwork/java/javase/downloads/jdk.+-downloads-[0-9]+.html")$ DOWNLOAD_URL=$(curl -s "$URL" | egrep -o "http://download.oracle.com/otn-pub/java/jdk/.*x64.rpm")$ FNA [続きを読む]
  • コマンドで二つの時間の差分を取る方法
  • %H:%M:%S形式で二つ時間がかかれているファイルから、その二つの時間の差を取得する方法を考える。用途としては、ログファイルからstartとendの時刻を取り出し、その差分を計算するなど。$ cat time.txt17:34:2119:21:14dateコマンド、awkのmktime、rubyのTimeを使う方法をそれぞれ見ていく。dateコマンドが一番簡単で、rubyも同程度に簡単だが、時刻をパースして日時オブジェクトを作る際に、awkだけ書式に柔軟性がないため冗長に [続きを読む]
  • ファイルサイズだけを取得するコマンド
  • ファイルサイズだけを取得したい場合、ls -lとcutもしくはawkを組み合わせて取得する方法が真っ先に思い浮かぶ。$ ls -l test.txt | cut -d' ' -f53104$ ls -l test.txt | awk '{print $5}'3104コマンドを組み合わせなくても、ファイルサイズをbyte単位で取得するには、wc -c だけでできる。wc -c ファイルだとファイル名が出力されてしまうが、標準入力から渡してあげるとファイル名が出力されない。$ wc -c test.txt3104 test.tx [続きを読む]
  • Redisのmaxclientsを変更する時はmax open filesも変更する
  • 実行環境:CentOS 6.7、Redis 3.0Redisのconnected_clientsがデフォルトの上限10000に達していたので、maxclientsを上げようとしたが、エラーが出てしまった。$ redis-cli info | grep connected_clientsconnected_clients:10000$ redis-cli127.0.0.1:6379> CONFIG GET maxclients1) "maxclients"2) "10000"127.0.0.1:6379> CONFIG SET maxclients 60000(error) ERR The operating system is not able to handle the specified num [続きを読む]
  • プロセスの環境変数を確認する方法まとめ
  • プロセスの環境変数を確認する方法が複数あるのでまとめる。strings確認したいプロセスのプロセスIDがわかっているときは、バイナリファイルやデータファイルでも表示可能な文字列を表示できるstringsを使うのが一番簡潔。環境変数は/proc/[PID]/environに記載されているが、各環境変数はnull文字(0)で区切られているため、単純にcatするだけでは一行で出力されてしまい見づらい。$ sudo cat /proc/4186/environTERM=xtermTMPDIR [続きを読む]
  • Rubyでシェル変数を使う
  • Rubyでシェル変数を使う方法には、Rubyプログラムの引数として渡すか、シェル変数を環境変数にするかの2通りがある。引数として渡す場合、RubyではARGVを使って値を取得する。$ param1="p1"$ param2="p2"$ ruby -e 'puts ARGV[0], ARGV[1]' $param1 $param2p1p2環境変数にする場合、RubyではENV[‘変数名’]で値を取得する。# 対象プロセス実行中のみ環境変数が有効になるようにする場合$ param1="p1" param2="p2" ruby -e 'puts E [続きを読む]
  • fpingで最速で全サーバの疎通を確認する方法
  • fpingは並列で複数ホストにPingチェックを行ってくれるため、チェックしたいサーバ全台をループで回してpingを送るよりも高速に実行できる。ただfpingのオプションを適切にすることでさらに高速に実行できるし、fpingと組み合わせるコマンドの工夫でさらに高速に実行できる。オプション無しまずはオプションを指定せずに一番遅い方法を見てみる。$ time cat all_list | xargs fping -a > alive_listreal 0m10.328suser 0m0.0 [続きを読む]
  • 終了ステータスを$?とif文で比較してはいけない
  • プロセスの終了ステータスを$?で取得し、if文で判断するshellスクリプトは書いてはいけない。if文を使うということは、条件文としてtestコマンドを使うことになり、ifとelif(の中のtestコマンド)が実行されるたびに、終了ステータス$?が変わってしまう。以下にサンプルコードを書く。$ cat test.sh#!/bin/shreturn_val() { echo '"$?" is 2' return 2}return_valif [ $? = 3 ]; then echo '"[ $? = 3 ]" is matched. $? is' $ [続きを読む]
  • expectの中でawkを使う方法
  • 以下のコマンドはサーバ($host)をLBから外して、jettyを再起動したあと、再度LBに組み込むものである。変数$hostをfor loopに組み込んで全サーバのjetty再起動を以下のコマンドで自動実行したかった。# サーバパスワードを入力read -sp 'password:' pw# LBからサーバを1台外すコマンド# コマンドは略# expectでサーバにパスワードを入力せずログインする。# 踏み台サーバ(jump_host)にログインしたあと、sudo ssh $hostを実行 [続きを読む]
  • SSHでコマンド実行した時にコマンド終了後も制御が戻らない時の対処方法
  • SSHでコマンド実行した時にリモート先でコマンド終了後も制御が戻らないことがあった。現象を確認した後に対処方法を二つあげてみる。SSHの制御が戻らない現象今回SSHの制御が戻らなかった時のコマンドはservice jetty start。jettyを起動したかった。SSHでリモートにログインした後で直接実行すると、問題なくコマンドは終了する。# remote=10.100.68.239# ssh $remote# service jetty startStarting Jetty: StartLog to /disk1/j [続きを読む]
  • Rubyやsedで複数行の文章を任意の箇所に挿入する
  • お題複数行の文章を任意の箇所に挿入するワンライナーを書くファイル中の任意の箇所、例えば複数行にわたる正規表現にマッチした箇所の下に、複数行の文章を挿入するとき、Rubyのワンライナーでどのように書くかを考えてみる。またsedでの対処法も考えてみる。今回編集するファイル名はtest.shとする。test.shにはあるif文が書かれた箇所があり、そのif文の下にもう一つif文を入れたいとする。test.sh#!/bin/bash(略) if [ $cond [続きを読む]
  • 『RDB技術者のためのNoSQLガイド』読書ノート
  • 『RDB技術者のためのNoSQLガイド』を読んだので、学んだ点をまとめる。RDB技術者のためのNoSQLガイド第2章 イントロダクションNoSQLにすると嬉しいこと・辛いこと外部サービスのデータ格納などにおいて、NoSQLにすると、スキーマが変わってもとりあえず溜めておける。スキーマが変わってデータを取得できないというリスクを回避できる。よくあるNoSQLの勘違い音声、画像などのマルチメディアデータは一つのデータ容量が大きいため [続きを読む]
  • dfとduの結果が異なるときに疑ったこと
  • df -hを実行してディスク容量がいっぱいになったことを確認し、duを使ってディスク容量を無駄に使っているファイルを探そうとしたが、大きなディスク容量を使用しているファイルがなかった。ルートディレクトリの容量をdu -shx /で確認した結果とdf -hの結果が大きく異なっていた。※du -shxの-x, --one-file-systemは、duの引数としてルートディレクトリを指定しているために「違うファイルシステムの物も大量に集計に入ってしま [続きを読む]
  • Rubyで歯抜けの連番からなる配列を作る
  • 歯抜けの連番からなる配列をRubyのワンライナーで作ってみる。歯抜けの連番(例えば1..5,16..20,31..35)配列を作る方法としてまず考えられるのは、Rangeを使って歯抜けではない部分を生成し、各Rangeを要素に持つ配列を作り、この配列を数値の配列に均す方法。まず各Rangeを要素に持つ配列を作る。[(1..5),(16..20),(31..35)]Rangeの配列を各数値の配列に均すため、RangeをArrayにしてから、reduceとArray#concatを使う。$ ruby - [続きを読む]
  • Rubyのeach_sliceで配列等を一定数で分割して表示する
  • 配列等を一定数で分割したい時、shellで書くよりもRubyのeach_sliceで書く方がワンライナーでスッキリ書ける。例えば1から98までを5個区切りで表示したいとする。まず、Rangeオブジェクトで1から98までを作成し、each_sliceを繋げて、5個ずつに分割する。$ ruby -e '(1..98).each_slice(5){|arr| puts arr.join(" ")}'1 2 3 4 56 7 8 9 10(略)91 92 93 94 9596 97 98割り切れない数でeach_sliceしても良いように分割してくれる。例 [続きを読む]
  • USキーボードをWindowsで正しく使用できるようになる常駐型アプリ
  • WindowsでUSキーボードを使用しようとすると、レジストリをいじったり、ドライバを切り替えないといけない。レジストリをいじるのがためらわれる場合、ULE4JISというアプリを使うと、アプリを起動するだけでUSキーボードが正しく使えるようになる。スタートアップに追加してPC起動時に自動で立ち上がるようにしておくと、USキーボードを不自由なく使える。ULE4JISの良いところはアプリ起動で済む簡単さよりも、Caps lockでIMEのON [続きを読む]
  • sedの代わりにRubyで複数行への正規表現マッチング
  • 行単位に処理するのであれば、sedで簡潔に正規表現を使用してマッチングができる。しかし、複数行にわたって正規表現のマッチングをするのであれば、Rubyを使った方がいい。複数行であっても、正規表現内に行数指定がないのであれば、Rubyでなくてもいいのだが。まずは複数行であっても正規表現内に行数の指定がなく、Rubyである必要がないものをsedを使って書いて、それをRubyに書き直してみる。題材として、Tomcatのserver.xmlか [続きを読む]