xargsライクにパラレルでコマンドを実行させる『machma』

ネットで調べ物中に、xargsみたいな使い方でパラレルでコマンドを実行させることができる『machma』なるコマンドツールを見かけたのでお試し。 GNU拡張されたxargsの場合、並列でコマンドを実行させることができるのだが、実行結果の出力時に使用したパラメータを先頭に入れて表示してくれたりするので、使い勝手はこちらのほうが良いと思う。

Golangで記述されているので、まだGoのコンパイル環境がない場合は別途用意する必要がある。 環境が用意できたら、以下のコマンドでインストールを行う。

go get github.com/fd0/machma
go install github....

CentOS 7にMavenをインストールする必要があったので、備忘で残しておく。 まず、MavenにはJDKが必要になるので、以下のコマンドでOracle JDKをインストールする。

yum install -y wget
wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa801...

だいぶ久しぶりにsftpの設定をすることがあったので、自分用にまとめておく。 セオリーというか、一般的に行われている設定と同様にchrootをし、かつsftpのみ実行可能なユーザとする。 わざわざsftpに制限するユーザを作るので、ログインは鍵認証のみに制限する。 まず、以下のコマンドでユーザ(ここではsftpユーザ)の作成をしておく。

useradd sftp # -dでホームディレクトリを任意のディレクトリ
mkdir ~sftp/.ssh # .sshディレクトリを作成

ログイン元の公開鍵が/tmp/publicとして置いてあると仮定して、以下のように公開鍵設定をする。 設定完了...


先日からscriptコマンドの出力ログにタイムスタンプを付与させる処理について色々とやっていたのだが、ふとnohupでも同様のことができるのではないかと思いやってみた。 で、想定どおり同様の方法でタイムスタンプの付与が行える事が確認できた。

nohup コマンド > >(awk '{print strftime("%F %T : ") $0}{fflush() }'>> PATH)

前にユーザが所属しているグループの一覧を取得する処理について記述したが、今回はLinuxで各グループごとに所属しているユーザ一覧が必要になったので、出力用のコマンドを備忘で残しておく。 サブグループとして後から追加させたりしたユーザについては、getentコマンドで取得可能だ。

getent group
[root@BS-PUB-CENT7-01 ~]# getent group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
mem:x:8:
kmem:x:9:
wheel:x...

Windowsで作業をしていると、時折DOSコマンド(ネットワーク系のコマンドとか)を管理者として実行させたい時がある。 個人的に、あまりマウス操作のためにキーボードから手を離したくない性質なので、そういった場合は[Windowsキー押下]そのまま対象のプログラム名を入力して検索(cmd)起動したいプログラム名(コマンドプロンプト)を選択して、[Ctrl] + [Shift] + [Enter]キーを押下して管理者として実行 させているのだが、開きっぱなしのコマンドプロンプトからそのまま管理者としてコマンドを実行したい場合もある。 プログラムを別途インストールすれば楽み...


最近、検証中にIPアドレスを直接使ってのアクセスよりもDNSで名前登録してのアクセスの方が増えてきたので、クライアントでよく利用しているWindows・Mac OS XでのDNSのキャッシュクリアコマンドについて調べてみた。

1. Windowsの場合

WindowsでDNSのキャッシュをクリアする場合、以下のようにコマンドプロンプトでコマンドを実行する。 管理者権限が必要になるので注意。

powershell 'Start-Process -Verb "ipconfig /flushdns"'


CentOS 7にOSSのWebアプリケーション用SSO(シングルサインオン)ツール『LemonLDAP::NG』をインストールする

WebアプリケーションのオープンソースSSOツールというと有名なのがOpenAMだと思うが、他にも無いのかなと調べて見たところ、『LemonLDAP::NG』なるツールを見かけた。 ドキュメントもかなり揃ってるし、スクリーンショットを見る限り良さげな感じ。

今回は、とりあえずCentOS 7にインストールをして動作させるまでをやってみる(ActiveDirectoryやOpenLDAPとの連携まではまた後日)。 複数台に役割を分散させることができるようなのだが、ここでは一台で全ての役割を担当させている。 ちなみにWebサーバはApacheかNginxを選べるようなのだが、ここではN...


bashで、オプションにパスワードを指定したりした場合など、実行したコマンドをbash_historyに記録させたくない場合がある。 そういった場合、以下のコマンドを実行(起動時に設定するなら.bashrcなどに追記)してやることで、コマンド実行時に頭に空白がある場合はhistoryにコマンドが残らないよう設定ができる。

export HISTCONTROL=ignorespace # 空白から始まるコマンドをhistoryに記録しない
export HISTCONTROL=ignoreboth # 空白のみ+空白から始まるコマンドをhistoryに記録しない

上のコマンド実行後は、h...


Nginxで、現在読み込まれているモジュールの一覧を取得する必要があったので、備忘で残しておく。 Nginxでは、-Vオプションを付与することでコンパイル時の情報が得られるので、以下のようにコマンドを実行することでそこからコンパイル時のモジュール情報を抽出できる。

nginx -V 2>&1 | grep -oP '[a-z_]+_module'

Linuxのscriptコマンドで覚えておくと便利な使い方4個

よくターミナルでの作業ログなどを記録する際に用いられるscriptコマンドだが、オプション自体はあまり多くは無いのだがうまいこと使えれば色々な使い方ができる。 個人的にはよく利用されていると思っていたのだが、あまり周りで使ってる人がいないようなので、とりあえず個人的に知っている使い方についてまとめてみることにした。

1. 基本的な使い方

オプション無しで実行することにより、カレントディレクトリに「typescript」というファイルを作成して作業終了後に操作ログを出力してくれる。

script

指定したファイルに記録する場合は、以下のように引数として出力先のPATHを指定し...


よく、バックグラウンドで実行したいコマンドに対して、以下のように末尾に&を付けて実行させているのだが、この場合処理が終了するとジョブの実行完了メッセージが表示される。

[root@BS-PUB-CENT7-01 ~]# cat test1.txt > ./test1.txt.bk &
[1] 17008
[root@BS-PUB-CENT7-01 ~]#
[1]+  終了                  cat test1.txt > ./test1.txt.bk

このメッセージを非表示にしたい場合、以下のように実行するコマンドを()で囲ってグループにしてやるといいようだ。

...

ちょっと前にscriptコマンドで取得したターミナルログにタイムスタンプを付与する方法について記述したが、今回はその状態でさらにscriptreplayを行えるようにしてみる。 ここで厄介なのが、scriptreplayで用いるタイミングが記録されたファイルの書き方が、そのタイムスタンプ+表示されていた文字数になっている事。 行数とかとくに気にされてないので、各行にタイムスタンプが差し込まれている現状だとその文字数が一体何行になるのかを知る必要がある。

1. ログ再生時にタイムスタンプを除外する場合

こっちは簡単。単純にcutコマンドを使ってファイルからタイムスタンプの部分...


LinuxやOS Xでファイルの中身を表示する際、catなどで開くと一瞬で中身を表示してくれるのだが、これを1文字づつゆっくり表示させることができないかと思いやってみた。 意外と簡単にできるようだ。 ここでは、例としてtest1.txtというファイルに対して処理を行っている。

無難にwhileとreadを組み合わせてやる場合、以下のようにコマンドを実行する。

cat test1.txt | while IFS= read -rN1 c; do printf "$c";sleep 0.1;done
while IFS= read -rN1 c; do printf "$c";sleep...

Linuxにある程度慣れていると、現在のファイルのパーミッションは記号表記で、設定の際は数字表記でやることが多いだろう。 で、いつも記号表記でばかり確認しているのだが、ふと数字表記で現在のパーミッションを取得できるのかなと思い調べてみた。 個人的には大体lsで調べるのだが、残念ながらそういったオプションは無いらしい。

1. statコマンドを用いる場合

statコマンドで、以下のように指定することでファイルのパーミッションを数字表記で取得できるようだ。

stat PATH -c '%a'
[root@BS-PUB-CENT7-01 ~]# ls -la ./test.pl
-r...

ちょっとした処理のために、bashでファイルから改行を含むn文字~x文字分の範囲を抽出したいなぁと思い、最初はreadで実現しようと思ったのだが、どうも改行を含む文字数となるとうまくいかなかった。 で、tailとheadでとりあえず実現したので、念のため備忘として残しておく。 なお、この際改行も文字数として含まれるので注意すること。

cat file | tail -c +$((開始文字数 + 1)) | head -c $((終了文字数 + 1))

以前にもLeetSpeakへの変換を行うコマンド『leetpass』を触ったことがあったが、Perlにも同様の事ができるライブラリ『Acme::LeetSpeak』があったので、これを使って標準入力からLeetSpeakを取得してみる。 まず、以下のコマンドでライブラリの導入をする。

cpan Acme/LeetSpeak.pm

ライブラリの導入後は、以下のようにperlを実行することで指定した文字列からLeetSpeakに変換してくれる。

echo Strings | perl -lne 'use Acme::LeetSpeak;print(leet($_))'

...

Windows Server 2012 R2のActive Directory DSに内部CAの証明書を入れてLDAP over SSLの設定をする

Windows ServerでActive Directory Domain Contoller(以降AD DC)を構築した場合、最初から389番ポート経由でLDAP通信が行えるのだが、このままだと暗号化されていない(Active Directoryとして通信した場合はその手前で暗号化されているので問題ない)。 パケットキャプチャでLDAPのパスワードとかが丸見えになるので、これはよろしくない。 で、AD DCの場合だと最初からLDAPS(LDAP over SSL:636)がオープンになっているため、クライアント側でCA証明書がインポートされていれば、あとはドメインコントローラー側にサーバ証明書をインポートしてやればLDAPSでの通信が行えるようになる。


ちょっと前から、ランサムウェア「WannaCrypt」が流行しているが、これの感染経路はWindows(Windows 10未満のバージョン)で利用されているSMBv1の脆弱性らしい。 で、Linuxだとその脆弱性には影響を受けないのだが、そういえばSambaでSMBv1を無効化するのってどうすりゃ良いんだっけと思ったので、備忘で残しておく。

SambaでSMBv1を無効化するには、設定ファイルである「/etc/samba/smb.conf」にて、[global]配下に以下の項目を追記してやる。


ふと、sedで特定のパターンで指定した範囲の行に対して、改行を含んだ置換を実施する場合ってどうすりゃ良いんだっけかなと思ったので、備忘で残しておく。 結論としては、以下のように「/START/,/END/」で範囲を指定してやり、その範囲に対してNコマンドでラインを読み込んでやってから置換をしてやればいいようだ。

sed '/START/,/END/{N;s/BEFORE/AFTER/}'

Chromeのアップデートをしたところ、こちらの手順で作成していたオレオレ証明書が、何故か信用されない証明書として扱われるようになってしまった。 なんじゃこりゃ、と思って調べて見たところ、こちらをみるとどうやらRFC2818ではSubjectAltNameに利用するホスト名を記述する方法が推奨されているらしく、CommonNameは非推奨になっているらしい。 で、Chrome 58からはそれに則ってSubjectAltNameが無いとエラーになるという。 おおぅ…。

こうなるとサーバ証明書を作り直す必要がある。 作り直すのはサーバ証明書だけでよい。 とりあえず、まず以下のようにコマ...


そういう処理についてをTwitterで見かけたので、念のため備忘で残しておく。 まあ特に難しい事をせずとも、bashの変数展開やsed、awkで取得できる。 面倒なので、とりあえずパイプで受け取った結果から拡張子のみを取得するコマンドを以下に記載する(特に変数展開の処理は、普通にスクリプト書くならこんなやり方しなくてもいいかと思うが…)。

find ./ -type f | xargs -I@ -n1 sh -c 'echo @ | (read X;echo ${X##*.})'
find ./ -type f | sed 's/.*\.//'
find ./ -type f | awk -F. '{print $NF}'

SQL記述時にオートコンプリートしてくれるコマンドラインのMySQLクライアント『Mycli』

ちょっとした調べ物をしていたところ、SQLの記述中に対象のデータベースに合わせてオートコンプリートしてくれるMySQLクライアント『Mycli』というツールを見かけたので、試してみる。 Pythonで書かれており、pipからインストールが可能だ。

pip install -U mycli

MacOS X やDebian/Ubuntuの場合なら、brewやaptでもインストール可能。

brew update && brew install mycli
sudo apt-get install mycli


ターミナル上でzipファイルの差分を比較する

Twitterでそんなのあったので、いつか自分にも必要なときが来るかもしれないので備忘で残しておく。 圧縮ファイルの中身が、サイズが少なくてほとんど差異が無いのであれば、以下のように比較してやると楽に差異が確認できる。

diff -y <(unzip -c test1.zip) <(unzip -c test2.zip)

でもこれ、目diffをちょっとやりやすくしただけでなかなかツライよなぁ… もうちょっとなんとかならないかなと思ったので、無理やり以下のように圧縮ファイル内の各ファイルごとにdiffをかけさせてみた。


ターミナル上でグラフィカルにCPU使用率をモニタリングする『CoreFreq』

CPUやメモリの使用率について、ターミナル上でグラフィカルにモニタリングできるツールというとhtopnMonなどがあるが、CPUをグラフィカルにモニタリングできる『CoreFreq』というものも見かけたので、試しに触ってみることにする。 検証はUbuntu 16.04 LTSで行っている。 ちなみに、このツールはどうも仮想マシンでは利用できないようなので、物理マシンで動作させないといけない点に注意。

1. インストール

まず、事前にNMI Watchingを無効化しておく必要があるので、以下のコマンドを実行し再起動する。

sudo sed -i '/^GRUB_C...

grep -oで、指定した条件のみを表示させるのはよく利用されていると思う。 ただ、このやり方だとPCREで指定しても改行を挟んで抽出し、かつ抽出した行の改行を削除して一行にするといった事ができない。 特定の範囲に対して抽出・改行の削除を行うことで同様の事を行えるのだが、その場合は以下のようにsedを利用してやることで行える。

sed -n '/START/,/END/{H;/START/h;/END/!d;x;s/\n/ /gp;}'
[root@BS-PUB-CENT7-01 ~]# cat test1.txt
START
AAA
BBB
CCC
END

sssss

START...