なんとなしにBashのリダイレクトとパイプについて調べてたので、後から確認しやすいようにまとめてみることにする。

1.ファイルへのリダイレクト

基本的な使い方。コマンドの実行結果をファイルにリダイレクトする事で、上書きや追記をさせることが出来る。
これについては、UNIX系OSに慣れていない人でもよく知っている事だろう。
「>」で上書き(ファイルの既存内容は削除される)、「>>」で追記書き込みが行われる。

コマンド > ファイル # 上書き
コマンド >> ファイル # 追記

で、このリダイレクトだが通常は標準出力しかリダイレクトされない。
この辺りを使い分ける場合は、以...


ちょっとしたスクリプトを作っていた際、文字列の抜き出しを多様する処理があったので忘れないように残しておく。

2017/01/14 追記
個人的な好みで、変数へ代入をしてこなかった(スクリプト書かずにシェル芸で対応することのほうが多いため)のだが、スクリプトで書くなら変数に代入してからパラメータ展開によって文字列を抜き出す方法もあるので、念のため追記しておく。

左から◯文字

cut -c [開始文字(個数)]-[終了文字(個数)]
[root@test-node ~]# # 例:左から1文字目~4文字目
[root@test-node ~]# echo abcdefghij...

sedで、指定した行(特定の文字列から始まる行など)の先頭や末尾に文字列を追記するには、置換対象に正規表現で先頭(^)もしくは末尾($)を指定すればいい。

指定行の先頭に文字列を追加する場合

sed '/文字列/s/^/追加文字列/g' 対象ファイル # 文字列を検索して行を指定
sed '◯s/^/追加文字列/g' 対象ファイル # 行番号を直接指定
[root@test-node ~]# cat /work/test_1.txt
aaaaa
bbbbb
ccccc
ddddd
eeeee
fffff
ggggg
[root@test-node ~]#
[root@test-no...

dogwrapコマンドでDatadogへコマンドの実行結果を連携する

監視でDatadogを使っているのだけど、プロセスダウンとかしきい値を跨いだ際の挙動についてはDatadog側で動作させることが可能なのだが、例えば既存のスクリプトをキックした際にヘルスチェックで引っかかった場合などにアラートを飛ばすなどの処理をしたい時がある。そんな場合には、Datadog側で用意しているコマンドツール『dogwrap』を使うと良いようだ。

『dogwrap』は、指定したコマンドを実行して、その出力結果をDatadogへ連携してくれるツールだ。
これで、既存のスクリプト実行時にエラーになった場合はDatadogに連携するようにすれば、既存のスクリプトを使いまわせるだろう...


正規表現を学習するコマンド『regexProgram』

ボケっとネットサーフィンをしていた所、正規表現の学習プログラム用のコマンド『regexProgram』というものがあったので使ってみることにした。
コマンドなのでTerminal上での操作になるが、Cursesを使っているので見た目的には分かりやすく使うことが出来るようだ。

ここでは、CentOS 7でインストールを行う事にする。

1.インストール

まず、前提となるパッケージを以下のコマンドでインストールする。

yum -y install gcc* ncurses-devel ncurses-c++-devel boost boost-devel

前提となるパッケー...


データセンターやラック、ネットワーク構成をマップで管理できるNagiosのアドオンツール『Nagvis』を使ってみた

先日より、自宅環境の監視で統合監視ツールを入れてみようと色々と調べていたのだが、Nagiosのアドオンにラック構成や地理情報に関するマップ、グラフを生成、可視化出来る『Nagvis』というものがあるようなので、使ってみることにした。こちらのスクリーンショットをみる限り、結構キレイに色々な情報を整理できるツールのようだ。
今回は、先日NagiosをインストールしたCentOS 7環境に対し、このアドオンを導入、実際に使ってみる事にする。

1.Nagvisのインストール

それでは、Nagiosのインストールされた環境に対し、以下のコマンドを実行し前提となるパッケージとNagv...


色々なdiffコマンドを使ってみた

ファイルの差異を確認する、おなじみのdiffコマンド。
大量のファイルの確認をしていた際に「少し見にくいなぁ…」と感じたので調べてみたところ、結構な種類(亜種)が存在するようだ。

1.diff

いわゆる、普通のdiff。
2つのファイルの差分を表示するのだが、色付けとかされるわけでもなく、ちょっと見にくい…

diff ファイル1 ファイル2

2.diff3

ファイルを3つ比較するdiffコマンド。
まぁ数が増えただけでやること、やれることは変わりない。

diff3 ファイル1 ファイル2 ファイル3

3.colordiff

前にこちらでも紹介...


最近、よくパスワードを新規で作成することがあったので、各OS別にパスワードに使えるランダムな文字列を生成してくれるコマンドを調べてみることにした。

1.Linux

RHEL/Debian系ともにpwgenコマンドでランダムなパスワード文字列が生成可能だ。
入ってない場合は、yum/apt-getでインストールできる。

オプション無しで実行すると、8桁の英数字を大量に出力してくれる。

pwgen
[root@test-node ~]# pwgen
XeituY4O ceeT0boo Taelu0oo EiKu3aev Oog6ma0u Vaedee0u wu7ri7Ah I...

CentOS7にNagios 4をインストールする

自宅の検証環境の監視方法について検討するため、いくつかの監視ツールを試しているのだが、今回はZabbixに引き続き有名なNagiosを入れてみる事にする。
前回と同様、サーバ・エージェントともにCentOS 7を用いるものとする。

1.NagiosCore インストール

まず、前提となるhttpd、php、MariaDBをインストールしておく。
(ここでは実施していないが、mysql_secure_installationは実施しておくと良いだろう。)

yum -y install httpd php php-mbstring php-pear php-mysql mari...

Vimでテキストファイルにパスワードプロテクトをかける

ちょっと平文で保有したくないテキストファイルがあったのだけど、opensslとかgpg、mcryptで暗号化するほどの手間は掛けたくないな、と思って少し調べてみたところ、vimではパスワードプロテクトをかけることができるようだ。
暗号化アルゴリズムはPKZip、スワップファイル・メモリ上に展開したデータについては平文らしいけど、お手軽さはそれなりだ(コンソール上で復号化が出来ないため、catする際の使い勝手が悪いが)。

1.暗号化をする

暗号化の仕方は簡単。ファイルを開く際に、以下のように「-x」オプションを付与するか、編集中に「:X」コマンドを実行すればよい。
なお、実際に暗号化...


CentOS7にZabbix2.2をインストールする

自宅の検証環境の監視方法について検討するため、いくつかの監視ツールを試してみようと思う。
というわけで、まずはこちらを参考にOSSの監視ツールとして有名なZabbixから試してみる事にする。

なお、サーバ・エージェント共にCentOS 7を用いるものとし、バージョンはインストールの簡単なZabbix 2.2を対象とする。

1.Zabbixサーバインストール

Zabbix2.2の場合は、以下のコマンドでインストールを実施する。

yum install -y epel-release
yum install -y zabbix22 zabbix22-web zabbix22-...

Maxscaleのチュートリアルを読んでいたら、Corosync & Pacemakerを用いてのMaxscaleのHA化についてあったので、試してみる事にした。
今回利用するOSはCentOS 7を用い、Maxscaleはインストール済、SELinuxとFirewalldは無効化済とする。

なお、同じHAのカテゴリとしてLsyncdを用いる手法も紹介されていたが、正直これは単にmaxscale.confを自動同期させるだけでそこまで役に立つものでもないので無視する。

1.Corosync & Pacemakerのインストール

まずは、HA化に必要となるCorosyn...


諸事情あって正規表現について調べていたところ、どうやら正規表現を作成してくれる『rgxg』というコマンドがあるようだ。
早速、インストールして使ってみよう。

なお、検証したOSはUbuntu 14.04 LTSを用いている。

1.インストール

まずはインストールから。
以下のコマンドでインストール出来る。

sudo apt-get install rgxg

これでインストールが出来た。

2.実行

さて、それでは実際にコマンドを実行してみよう。
詳細な使い方については、manで見てもらうとして、ここではいくつかの例を抜粋して紹介する。

このrgxgコマン...


Curlを使ってアクセスするとAsciiArtの天気図を取得、ターミナル上で表示できる「wttr.in」

なんかボケっとTwitterをみてたら、curlで天気図をコンソール上に表示させてる画像が回ってきたので、どんなものなのか調べてみた。
以下のコマンドをコンソール上で実行すると、天気図が取得されるようだ。
※Teratermとかだとエンコードが対応していないので、Macとかでやると良い。

curl http://wttr.in/


Linux/UNIXで連続した文字列を特定の長さで改行分割する

先日出席したシェル芸勉強会で、連続した文字列を特定の長さ(バイト数・文字数などなどの固定長)で改行して出力させるような問題があり、それの解法について覚えておきたいのがあったので備忘。
基本的にはfoldコマンドで行うのだが、地味にgrepコマンドでも同様の処理ができる。

1.foldコマンド

foldコマンドは、指定した文字数もしくはバイト数で文字列を折りたたむコマンド。
まさにこの処理のためにあるようなコマンドで、以下のようにコマンドを実行することで、半角文字列を指定した列数(バイト数)で改行させることができる。
(全角文字列の場合は、バイト数で計算される様子。)

fol...

先日出席したシェル芸勉強会で、処理の途中で一年分(というか、指定期間)の日付をdateコマンドで出力させる必要があった。
で、日単位であれば以下のようにコマンドを実行することで、一覧として出力可能だ。

echo '2016/01/01\ +'{0..365}'\ days' | LANG=C xargs -n1 date -d

わかりやすいかどうかわからないけど、解説。
dateコマンドの-d(--date)オプションでは、以下のように"日付 + ○ (days|month)"などのように、日付を計算させることが出来るのだ。
例えば、「2016/01/01 + 1 month」...


先日のシェル芸勉強会で、pdfの内容をコンソール上で確認する問題があったので、その備忘。
コンソール上でpdfを標準出力させる場合、通常のプリインストールされているコマンドからだと少々難しいようだ。

というのも、良く使用されているpdfの場合だと中のテキストなどがzlibで圧縮された状態で保持されているため、ここをうまいことzilbで解凍する必要があるらしい。
通りで…単純なテキストしか入ってないpdfなのに、中見たらわけわからんと思ったら…

このへんを参考になんとか作れるかも(stringsで読込み、awkなどでFlateDecodeされた箇所だけを抽出して復号化、それを...


時折、どこかのノードで設定ファイルとか編集をしたら、自動的に同期して他のノードでも設定を変えて欲しい時がある。
台数が多ければAnsibleなどで設定ファイルを一括更新するが、2\~3台でそこまでするのもなぁ…というときは、Lsyncdを使って自動的に同期させると良いだろう。

Lsyncdは、inotify(Linuxに用意されている、ファイルの変更を検知する仕組み)で、変更を検知したと同時にrsyncでファイルを同期するデーモンツールだ。
比較的簡単に設定ができ、ファイルの削除や新規追加、変更でも同期を自動的に行ってくれる。もちろん、中身はrsyncなのでssh経由でのリモート同期も...


先日、MariaDBでテーブルの暗号化を行ってみたが、今回はそれをGaleraClusterで行ってみる。
前回でも触れたが、この機能はMariaDB 10.1.3以降である必要がある。GaleraClusterの設定方法が10.0系と10.1系で少し違っているので、少し注意しよう。
10.1系でのGaleraClusterの設定については、こちらを参照してもらいたい。

今回はMariaDB 10.1.11、GaleraClusterはすでに構成済として進めていく。

1.鍵ファイルの作成・配布

さて、まずは前回と同じく鍵ファイルを作成、そのファイルを各ノードに配布する。...


MariaDB Serverのバージョンを確認する

MariaDB Serverのバージョンを確認する場合、何個か方法がある。

1.インストールされているパッケージからバージョンを確認する

rpmファイルやdpkgファイルからインストールされている場合(yumやapt-getも同様)、それらの情報からバージョンを確認する事が出来る。

RHEL系の場合

rpm -qa | grep -i mariadb

Debian/Ubuntuの場合

dpkg -l | grep -i mariadb

2.MariaDB Serverに接続して確認する

mysqlコマンドからMariaDBに接続してバージョンを確認することができ...


今仕事でMariaDBを使っているのだが、どうやらMariaDBにはテーブルを暗号化する機能があるらしい。
というわけで、こちらを参考に実際にやってみる事にした。

なお、すでにMariaDBはインストール済みで、プロセスは起動していない状態とする。
また、この機能はMariaDBの10.1.3以降でないと利用出来ないので、もしこれより前のバージョンを使用しているようであればアップデートが必要なので注意。
今回は、2016/02/12時点で最新版であるMariaDB 10.1.11を用いている。

1.鍵ファイルの作成

まずは、以下のコマンドでテーブルの暗号化をする鍵ファイル...


第21回シェル芸勉強会に参加してきました(復習)

前回に引き続き、今回もシェル芸勉強会へ参加してきました。
…風邪ぶり返したので、懇親会は出ず即効で帰ってきましたが。

今回の問題はこちら
"上田先生の本をちゃんと読んでいればできる"問題をチョイスしたらしい。
(…買ったし読んではいたけど、その時の自分に役たちそうなトコしか読まずに、"あんま使わないっぽいな"と思ったトコは飛ばしてたような気がする。)

今回はいつも持っていってるノート(Ubuntu)ではなくMacからCentOS7につなげて解いていたので、同様に復習もCentOS 7で行う事にする。
なお、問題に使用するデータはgithubに上がっているので、以下のコマ...


作ってある検証用の環境で、MariaDBの最新版を使いたかったので、yumから最新版へアップデートしてみることにした。

まず、こちらへアクセスし、repoファイルで指定する最新バージョンのURLを把握しておく。
例えば、2016/02/11時点の最新バージョンで、CentOS7用だと以下のURLとなる。


MariaDB 10.1系でGalera Clusterを使いたかったので、その方法について備忘。
地味に10.0系から結構変わっていて、少し手こずってしまった。

今回インストールするのは、2016年02月12日時点で最新版となる10.1.11とする。

1.インストール

まずはインストールから。
MariaDB 10.1系からはMariaDBにGalera Clusterが含まれているので、普通にそのままインストールを行う。

rpm --import https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
cat << EOF > /etc/...

前回、前々回とMariaDB+Galera Clusterでのバックアップについて、記述してきた。
今回は、それらと同じくMariaDBのバックアップ・リストアを実施するツールであるPercona XtraBackupを使用してのバックアップを取得してみる。

  1. GaleraClusterの構成ノードを切り離しorLVMのスナップショットを使用し、ファイルをバックアップする
  2. mysqldumpを使用してオンラインバックアップ
  3. Percona XtraBackupを使用してオンラインバックアップ

このPercona XtraBackup、mysqldumpとくらべてコマンド側で差分...


さて、前回はGalera Clusterからノードを切り離しての、もしくはLVMスナップショットを用いてのバックアップ・リストアを紹介した。
で、次は以下の3つのうち2個目である、mysqldumpを用いてのオンライン・バックアップについて検証したいと思う。

  1. GaleraClusterの構成ノードを切り離しorLVMのスナップショットを使用し、ファイルをバックアップする
  2. mysqldumpを使用してオンラインバックアップ
  3. Percona XtraBackupを使用してオンラインバックアップ

1.バックアップ

まずはバックアップ。mysqldumpでは「--single-t...


仕事で、MariaDB+GaleraClusterのバックアップについて検討する事があったので、その備忘。
さて、当たり前の話として、業務で利用している大体のDBってクラスタ化した上で定期的にバックアップを取得していると思う。

バックアップの取り方としては何通りもあると思うが、MariaDB+GaleraClusterの組み合わせで取得する場合、以下の3通りが考えられる。

  1. GaleraClusterの構成ノードを切り離しorLVMのスナップショットを使用し、ファイルをバックアップする
  2. mysqldumpを使用してオンラインバックアップ
  3. Percona XtraBackupを使...

Galera Clusterのバックアップ検証を行う上で、LVMでのスナップショットを取得する必要があったので、まずスナップショットの作成についてのみ抜き出して記述する。
LVMのスナップショットを取得する場合、エクステントにある程度空きがある必要がある。今回は、こちらを参考にHDDを増設してLVMに組み込んで領域を追加、スナップショットの取得を行う。

1.LVMの領域追加

[root@BS-PUB-GALERA-02 ~]# vgdisplay
  --- Volume group ---
  VG Name               centos
  System ID...

仕事で、バックアップファイルをAzure Blob Storageにアップロードさせるスクリプトを作成する必要が出てきた。
Azure Blob StorageはRest APIに対応しているので、それで上げれば良さそうだ。

というわけで、こちらの内容を参考にPythonに書き直してスクリプトを作成してみた。
運用時にアップロード・ダウンロード・削除と使い分けするのが面倒だったので、サブコマンドを指定する方式にしている。

azure_blob_backup.py

#!/bin/python
# -*- coding: utf-8 -*-
# +---------------...

Pythonのpycurlで帰ってきた結果を変数・ファイルに出力する

仕事でスクリプトを書いていたところ、pycurlで取得した値を変数やファイルに書き出す必要があったので、その備忘。
なお、Pythonのバージョンは2.7.5を用いている。

1.変数に書き出す

pycurlで取得した結果を変数に書き出す場合は、StringIOをインポートしpycurl.curl.WRITEFUNCTIONで書き出させる事で対応できる。
以下、サンプル。

#!/bin/python
# -*- coding: utf-8 -*-
import pycurl
from StringIO import StringIO

# 結果を格納する変数を宣言
buffer...