ぬん さん プロフィール

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

ぬん さんのブログ記事

  • dependenciesとtagsを使い、依存しているroleを実行する
  • version: ansible 2.4Ansibleでtagsを指定してplaybookを実行するとき、依存しているroleを自動で呼び出すようにしたい。Subversionのinstallを例にとる例えば、Subversionをinstallするとき、フロントにApacheをおいてユーザ認証にBasic認証を利用するとする。Subversionのroleの各taskに設定されているtagsがsvnで、Apacheのroleのtagsがapacheとする。tagsを指定して実行する場合、通常であればansible-playbook -i hosts.yml s [続きを読む]
  • 特定のファイルを除くbashのパターン記法
  • bashのversionがある程度新しければ、特定のファイルを除くパターン!(PATTERN)が使えるようだ。パターンはglob(グロブ)が入っていてもOK。!(test1)であればtest1以外のファイル/ディレクトリが全て対象になり、ワイルドカードを使って!(*2)であれば2で終わるファイル/ディレクトリを除いたものが対象となる。# CentOS7$ bash --version | head -1GNU bash, version 4.2.46(1)-release (x86_64-redhat-linux-gnu)$ ls -1test1test2t [続きを読む]
  • iPhoneで縦撮りした動画をMacのiMovieで編集する
  • iPhoneで縦撮りした動画をMacに転送してiMovieで編集すると、左右に黒帯ができてしまう。Macで見る分にはあまり気にならないが、ファイルに出力した動画を再度iPhoneに転送して見ると、動画の表示領域が小さくて見辛い。Macで編集した縦撮り動画をiPhoneで見ても、初めからiPhoneで縦撮りしたように見えるように編集する方法を記載する。前提macOS High Sierra 10.13.2iMovie version: 10.1.8iOS version: 11.2.2iMovieでの編集の [続きを読む]
  • 各OSでのデフォルトI/Oスケジューラの違い
  • CentOS6とCentOS7とAmazon LinuxではデフォルトのI/Oスケジューラに違いがあるため、ioniceコマンドを実行するときやパフォーマンスチューニングをするときに注意が必要だ。各OSでのデフォルトI/OスケジューラCentOS6ではI/Oスケジューラはcfqになっている。CentOS7ではdeadlineに変更された。(https://access.redhat.com/solutions/32376)In RHEL 7, the deadline IO scheduler is the default IO scheduler for all block devi [続きを読む]
  • wc -lでは文末に改行がないファイルの行数を正しく数えられない
  • 最後に改行がある場合は以下の通り問題ない。$ printf 'testntestn'testtest$ printf 'testntestn' | wc -l2wc -lは改行の数を数えるため、最後に改行がないと本当の行数より1少ない数を返してしまう。$ printf 'testntest'testtest$ $ printf 'testntest' | wc -l1対策としては、grep -c ''で空文字に合致する行数を求めることで代用したり、awkのENDとNRを活用したり、sedの現在の行数を出力する=と最終行$を活用したりする方法 [続きを読む]
  • GitLabにpushするときコミットメッセージをチェックする
  • RedmineのチケットとGitのコミットを紐づけるために、コミットメッセージにrefs #チケット番号を入れることをルール化したい。クライアントサイドフックであるpre-commit hookを使ってチェックできるが、各リポジトリの.git/hooks/pre-commitにフックを記載しなければいけなく、リポジトリごとに各人でそれぞれ対応しなければいけない。他のメンバーへの展開は漏れが出てくる可能性があるので、個人でpre-commit hookを設定する以 [続きを読む]
  • 安易に使わないほうがいいMySQLClientコマンド"edit"
  • 前回、安易に使わないほうがいいLinuxコマンド”fc”を書いた。コマンドライン上で編集するときはEmacsキーバインドになるが、ヒアドキュメントなど長いコマンドを書くときにfcを使うとVimで効率よく書ける。しかしコマンド実行をキャンセルしようとした時の挙動が直感と異なるので、安易に使わない方がいいという主張だ。全く同じようなことがMySQLクライアントコマンドでも言える。editコマンドの良さmysql -u user_name -p dbna [続きを読む]
  • 安易に使わないほうがいいLinuxコマンド"fc"
  • fcというhistoryを扱うコマンドがある。危険で怖いコマンドのため安易に使わないほうがいい。fcはコマンドヒストリを処理するためのコマンドだが、コマンドライン上でエディタが立ち上がりコマンドの編集ができるため、Vimの力を借りてコマンドを効率よく書くことができる。はじめ、この記事のタイトルを「Bashのキーバインドを使うより、fcコマンドでVimの力を借りてコマンド入力効率を上げる」にしようと考えていた。しかしfcの [続きを読む]
  • Muninで各サーバのeth0をまとめる
  • Munin(2.0系)で/etc/munin/munin-conf.d/に配置しているconfigに書いてある各サーバのeth0をまとめたグラ
    フを出力する方法。元々以下のように3台のサーバが定義されていたとする。[product;server0001] addr
    ess server0001 use_node_name yes[product;server0002] address server0002 use_node_name yes[product;server0003] address
    server0003 use_node_name yesこの3台をdraw STACKとsumを使ってまとめる。 [続きを読む]
  • Muninの間隔を1分間隔に変更する
  • Muninの更新間隔をデフォルトの5分から1分間隔に変更する方法を記載する。(Munin version 2.0)Muninはcron(/etc/cron.d/munin)から起動されているのでcronの変更を行う必要があるが、cronの時間を変えるだけではダメ。変更作業中にMuninが動いて欲しくないため、一番はじめの作業としてcronのコメントアウトだけしておく。#*/5 * * * * munin test -x /usr/bin/munin-cron && /usr/bin/munin-cron1分間隔の更新にあったグ [続きを読む]
  • 送信先IPアドレスをiptablesで変える方法
  • あるホストから別のホストへ通信する際の通信先のホストのIPをiptablesで変換する方法を記載する。送信先IPアドレスをiptablesで変えたい時iptablesでの実現の仕方を書く前に、送信先IPアドレスをiptablesで変えたいのはどのような時か。例を2つあげたい。グローバル経由でRedis Sentinelに接続するプライベートLAN内でReplication + Sentinelを組んでいるとする。事情によりグローバルから接続する必要があるとする。Redis Sentin [続きを読む]
  • rbenvでOSのユーザごとにRubyのversionを分ける
  • rbenvはユーザごとにinstallし、Rubyもユーザごとにinstallするのが想定されている使用方法だが、Rubyのinstallをユーザに任せずシステム管理者がinstallする場合、rbenvをただ一つsystem wideにinstallして、どのユーザでもrbenvを使えるようにしたい。rbenvを/usr/localにrootでinstallし、rootのみがrbenvに書き込み権限をもつ状態であれば、各ユーザのinstall / uninstall、global versionなどを制限したうえで、Rubyを使える [続きを読む]
  • 二段階認証と通常のパスワード認証をユーザによって分ける方法
  • Google Authenticatorによる二段階認証を導入すると、ユーザごとにgoogle-authenticatorコマンドを実行してシークレットキーを作らないと、ログインできなくなる。二段階認証を導入したので、設定をしていないユーザのログインができないのは当たり前だが、一部のユーザだけ通常のパスワードによるログインを許可したい場合は、二段階認証の設定に追加設定が必要となる。Google Authenticatorの導入Google Authenticatorのインスト [続きを読む]
  • ある正数以上の数で最小の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 [続きを読む]