lsyncdで同じ設定なのに同期フォルダの数が違う場合

lsyncdを使っているシステムで、同じ設定を使っている(同期先ホストはお互いを指定)にも関わらず同期ディレクトリ数が違うという事があり、ちょっと引っかかったので備忘で残しておく。

lsyncdで2台構成の同期を行っていたのだが、/etc/lsyncd.confで定義しているステータスファイル(ここでは/var/log/lsyncd/lsyncd.status)を見ると、なぜかinotifyで監視しているディレクトリの数が違うということがあった。 カーネルパラメータはいじってあってinotifyのwatch上限の問題はクリアしている(そもそもそれなら起動しないはず)し、対象のディレクトリだけファイルも(片道だけ)同期されていないように見える。 なんなんだろうと色々調べていたところ、片方のノードだけディレクトリマウントされていないということが分かった。


Twitterでそういった処理について見かけたので、やってみた内容を備忘として残しておく。

sedでやる場合

GNU拡張されたsedの場合 -i で上書きができるので、ただ文字列を挿入するだけであれば以下のようにしてやればいい。

sed -i '1iString' *.txt
[root@BS-PUB-CENT7-01 test_dir]# cat a.txt
a01 a02
a03 a04
a05 a06
a07 a08
a09 a10
a11 a12
a13 a14
a15 a16
a17 a18
a19 a20
[root@BS-PUB-CENT7-01 test_d...

bashの算術式についての記事を見てて、ビットシフトを算術式でできるよというのを見かけたので、それを利用してビット数一覧を出力させてみる。

eval echo "\$((1<<"{0..16}"))" | fmt -1
eval echo "\$((1<<"{0..32}"))" | fmt -1 | numfmt --to=iec # MBとかに変換する
blacknon@BS-PUB-UBUNTU-01:~$ eval echo "\$((1<<"{0..16}"))" | fmt -1
1
2
4
8
16
32
64
128
256
512
1024
2048
4096...

最近snippetマネージャとしてpetを使うようになったのだけど、選択したsnippetをhistoryに残しておいてあとで確認、再利用できるようにしたいということがあったので関数で残しておくことにした。 特に難しい事はしておらず、「pet search」で得られたコマンド文字列をevalで実行して、かつprint -sでhistoryにも記録しているだけだ。


今まで知らなかったのだが、expectでは以下のようにログファイルを指定する事でscriptコマンドのようにターミナルログを取得することが可能なようだ。

#!/bin/bash
expect -c "
  trap {
   set rows [stty rows]
   set cols [stty columns]
   stty rows \$rows columns \$cols < \$spawn_out(slave,name)
  } WINCH

  set host hostname
  set user username
  set pass Password
  set...

ごくたまに、以下のようなexpectを使ったスクリプトを作ってログイン時のパスワード入力やら事前処理のコマンドやらを自動入力させることがある。

#!/bin/bash
expect -c "
  spawn ssh user@host
  expect \"s password:\"
  send \"Password\n\"
  interact
"

ただ、このようにしてログインした場合、使用中にターミナルウィンドウのサイズをいじった際に一緒にリサイズされない事がある。 「stty size」コマンドでターミナルのサイズを取得できるのだけど、ターミナルのウィンドウサイズをいじって...


シェル芸とかで遊んでいると、よく以下のような数字でできた四角形を生成することがある。

blacknon@BS-PUB-UBUNTU-01:~$ echo {01..16} | xargs -n4
01 02 03 04
05 06 07 08
09 10 11 12
13 14 15 16

で、この時の数字の順番を斜め順、ジグザグ順でできないかと思ったのでやってみることにした。 一応できたはできたけど、エライ汚い…。

斜め順の場合

echo x{,,,}|fmt -1|awk '{a=a$0;printf("%4s\n",a)}'|tee >(tac|rev)|uniq|sed...

先日のシェル芸勉強会の問題を解いている際、sedでブレース展開させてその値を置換後の値として利用させる方法を思いついたので、忘れないように備忘で残しておく。 といっても、実際やってることは前に書いた複数回ごとにヒットした箇所に対しての置換処理の応用みたいなものなんだけど。

処理方法だが、以下のようにsedを実行することで置換後の値にブレース展開をした値を順番に置き換えていく事ができる。

echo {a..g} | sed 's/ /\n \n/g' | sed -z -e's/ /'{1..100}'/'


gnomon』という、出力に処理の経過時間を付与してくれるというツールを見かけたのだが、似たような事をシェル芸なりでできないかと思ったのでやってみることにした。 元々がmoreutilsのtsコマンドを発想元にしているということなので、以下のようにtsコマンドを利用すれば同様の事ができるようだ。

cmd | ts -s # 作業全体の経過時間
cmd | ts -i # 直前の出力からの経過時間
blacknon@BS-PUB-UBUNTU-01:~$ yes 'echo test_$(date +%Y%m%d_%H%M%S);sleep $((RANDOM%5))' | hea...

パイプで渡した出力に対して、その出力の経過時間をいい感じに表示してくれる『gnomon』というツールを見かけたので、ちょっと試してみた。 Paypalが作成しているツールのようで、node.jsで書かれているようだ。moreutilsのtsコマンドが発想元らしい。

とりあえずインストールから。npmからインストールできるようだ。


だいぶ前に、CentOS 7にKeycloakをインストールして触ってみるということをしていたが、今回はちゃんとsystemdで管理できるようにインストールをしてみる。 基本的なインストール方法は変わらないが、一応事前準備から進めていく。

1.事前準備

前回と変わらず、以下のコマンドを実行して実行ユーザの作成や必要となるパッケージを導入しておく。

useradd keycloak
yum install -y git wget

動作にMavenが必要になるので、それらをインストールする。 まずはOracle JDKのインストールを行う。

wget --no-check-...

第32回シェル芸勉強会の問題を解いてみたので、その内容を残しておく。 今回はちょっと用事が被って行けなかったので、現地でリアルタイムではやらずに後から家で問題を解いている。

問題、回答はこちら。 必要となるデータは、以下のコマンドでgithubから取ってくる。

git clone https://github.com/ryuichiueda/ShellGeiData.git

Q1.

echo 14679」から始めて、入ってない数字の箇所は空行として縦に出力するという内容。 とりあえず、オーソドックスにcommで処理をしてみる。

echo 14679 | grep...

bash/zshで実行したコマンドをクラウド上にあげてhistoryを共有する『Bashhub』

bashで実行したコマンドの履歴は\~/.bash_historyというファイルに記録され、上下キーやCtrl + Rで検索して実行することができる。 で、(当たり前の話だが)ローカルにしか記録されず、他のノードでは利用することができない。

今回紹介するBashhubは、クライアントを入れて実行したコマンドをBashhub上にも送信し、同じクライアントを入れているノードでも検索・実行できるようにするというOSSのサービス(当たり前だけど、MySQLとかのログイン時にパスワードとかオプションで指定するとその辺も一緒に送信されてしまうので注意)。 zshでも利用可能なようだ。

1.

...