コンソール上でロードアベレージをグラフで表示してくれる『ttyload』

コンソール上で、ロードアベレージの値をグラフで表示してモニタリングできるツール『ttyload』なるものを見かけたので、試しにインストールしてみた。 UbuntuやDebianであれば、aptコマンドでインストールが可能だ。

sudo apt install ttyload

ソースからインストールする場合は、以下のコマンドを実行する。

git clone https://github.com/lindes/ttyload.git
cd ttyload
make && sudo make install


コマンドの実行結果を、標準出力で確認しつつファイルにも出力させる場合や、複数のファイルに出力させたい事がある。 そんなときはteeコマンドを使うと便利だ。 今回は、このteeコマンドの使い方についてをまとめてみることにする。

1. 基本的な使い方

基本的には、以下の様にコマンドを実行することで、標準入力から受け付けた内容を指定したファイルと標準出力に出してくれる。

コマンド | tee ファイル
blacknon@BS-PUB-DEVELOP:~$ echo {1..5}
1 2 3 4 5
blacknon@BS-PUB-DEVELOP:~$ echo {1..5} | te...

grepでメールアドレスを抽出する場合、正規表現を書いて抽出するのが楽になる。 とりあえず、以下のように記述してやることで、メールアドレスと思われるものを抽出することができる。

grep -E "[-_a-zA-Z0-9\.+]+@[-a-zA-Z0-9\.]+"

『rootsh』でrootユーザの操作(ターミナルログ)を記録してSyslogに出力する

ターミナルログの記録について、タイムスタンプ付きで取得する場合やSyslogにターミナルログを流す場合、とりあえずscriptコマンドとawkを組み合わせる事で可能になるのだが、この『rootsh』コマンドでも同様にSyslogにターミナルログを出力することができる。 残念ながらファイルに出力する際はタイムスタンプを付与できないようだが、syslogには出力することが可能。

今回は、とりあえずCentOS 7にインストールして試してみることにする。 まず、以下のコマンドでインストールを実施する。

yum install -y epel-release
yum install -y...

LaTeX形式のファイルをプレーンテキストに変換する『OpenDetex』

先日のシェル芸勉強会でLaTeX形式のファイルについての処理がテーマだった。 で、sedとかawkで頑張ってたのだが、なんか他に良いツールが無いものかと思い調べてみたところ、とりあえずプレーンテキスト(と言っていいのかわからないけど)に出力してくれるツール『OpenDetex』というものはあるようだったので、試しにインストールしてみる事にした。 検証にはUbuntu Server 16.04 LTSを用いる。

まず、以下のコマンドで前提となるパッケージを導入し、ソースを取得・コンパイルしてインストールする。

sudo apt install make gcc flex
wget h...

grepでひらがな・カタカナ・漢字を抽出する

先日のシェル芸勉強会で、ひらがな以外に対してのgrep処理を調べた際に色々と知見を得られたので、忘れないように残しておく。 一応、grep以外でも文字やASCIIコードでの範囲指定は応用できるはず…。

1. 文字で範囲を指定する

特定の文字を範囲として指定することで、ひらがな・カタカナ・漢字を指定することができる。 以下、範囲の指定。

種類 範囲指定
ひらがな [ぁ-ん]
カタカナ [ァ-ン]
漢字 [亜-熙]
句読点など [ -】]

なお、漢字については日本語で利用する漢字を含む範囲をとりあえず囲っているにすぎないので注意。 漢字の部首だっ...


第28回シェル芸勉強会に行ってきたので、その復習。 今回はLaTeXのファイルに対して、特定箇所の抽出やらを行っていく形式。

正直、かなり難しかった…。 前回もそうだったけど、ほとんどついていけなかった。 よくわからなかったトコについては、回答できた人の内容を分解して理解を進めることにする。

問題および模範解答はこちら。 問題で使用するファイルは、(1ファイルしかないけど)以下のコマンドでダウンロードすると良いだろう。

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

Q1.

まずはQ1。これは簡単で、そ...


調べ物中、リモートサーバのsshdの設定情報をスキャンする『ssh_scan』なるツールについて見かけたので、試してみることにした。 以下のコマンドでインストールできる。

sudo gem install ssh_scan

オプション等はこんな感じ。

blacknon@BS-PUB-DEVELOP:~$ sudo ssh_scan --help
ssh_scan v0.0.19 (https://github.com/mozilla/ssh_scan)

Usage: ssh_scan [options]
    -t, --target [IP/Range/Hostname] I...

そういう処理について見かけたので、念のため残しておく。 awkで行に含まれる数字のみを抜き出すには、区切り文字として数字以外を指定して、各列を取得してやることで実現できる。

例えば、ファイルの各行に含まれている数字を1行づつ抽出する場合、以下のようにコマンドを実行する。

awk -F '[^0-9]+' '{for(i=1;i<=NF;i++){if($i!="")print $i}}' test1.txt
[root@BS-PUB-CENT7-01 ~]# cat test1.txt
111AAA222BBB333
CCC444DDD555EEE
666FFF777GGG8...

ターミナルからhttpリクエストをいじれるtuiツール『wuzz』

Burpのように、TUIでhttpのリクエストをいじれるツール『wuzz』というものを見かけたので、ちょっと試してみることにした。 Burpのようにと言ったが、ローカルプロキシとして動作するわけでは無いためブラウザから操作してどうこうするものではない。 Golangで書かれているようなので、インストールも簡単だ。

go get github.com/asciimoo/wuzz
go install github.com/asciimoo/wuzz

ワンライナーを分解して詳細を表示してくれる『explainshell.com』

ボケっとTwitter眺めてたところ、入力したワンライナーを分解してmanから引用付きで表示してくれるという『explainshell.com』なるサービスがあると知ったので、ちょっとお試し。 確かに、シェル芸とかワンライナーで書かれたコードを見ていると、よく何をしているのだかわからない(けど目的の動作は達成できている)コードを見かけるので、こういうサービスがあるとかなり嬉しいかもしれない。 トップページはこんな感じ。

例えば、結構前に書いた◯んこというキーワードを辞書ファイルから取ってくるシェル芸を入力すると、こんな感じで表示してくれる。

なかなか良さそうだ。ちゃ...


CentOS 7にWebブラウザからWebDAV風にファイルを操作できる『Cloud Commander』をインストールする

WebDavみたいに、Webブラウザからファイルを操作できるようにする『Cloud Commander』なるものを見かけたので、ちょっと試してみることにした。 画像などもブラウザ内でプレビューできるようなので、結構面白そう。 Node.jsで作られているようだ。 今回はCentOS 7にインストールして、サーバとしてアクセスする。 ちゃんと利用するのであればsystemdのserviceファイルを作成してやったりローカルのリバースプロキシをかましてのSSL化といった対応が必要になると思うが、今回はお試しなので行わない。

1. 『Cloud Commander』のインストール

まずは...


nanoっぽいターミナル用テキストエディタ『Micro』

ちょっと別件の調べ物していたところ、nanoっぽいターミナルで利用できるテキストエディタ『Micro』と言うものを見かけたので、少し試してみることにした。 Golangで書かれているようなので、Goの環境が整っているのであれば以下のコマンドでインストールできる。

go get github.com/zyedidia/micro
cd $GOPATH/src/github.com/zyedidia/micro
make install


シェル芸の検証などなどで、時たま適当なCSVファイルが必要になることがあるので、簡単に生成するようのワンライナーを用意しておきたいなぁと思ったので備忘。 特に難しいこともなく、以下のようにコマンドを実行してやれば生成できる。 とりあえず、20行(数字)8列(アルファベット)で作成している。

echo {01..20}{{A..G}",",H} | xargs -n8 | tr -d ' ' # echoの段階で区切り文字を入れるパターン
echo {01..20}{A..H} | xargs -n8 | sed 's/ /,/g'    # スペースをカンマに置換するパターン

Twitterでそんな感じの処理について見かけたので、後々使うことがあるかもしれないので残しておく。 とりあえず、カンマの前後にあるスペースは問答無用で削除する場合は、以下のようにawkを実行する。

awk 'BEGIN{FS=" *, *";OFS=","}{$1=$1;print $0}' test.csv
blacknon@BS-PUB-UBUNTU-01:~/b$ cat test.csv
a1,a2,a3,a4
b1,b2,b3,b4
c1, c2 ,c3,c4
  ,d2,d3,
e1,    e2,e3,e4
f1,f2,  ,f4
  ,g2,g3,g4
h1,h2 ,...

スクリプトの作成中、シンボリックリンクのリンク先を変更させる処理が必要になったので、備忘で残しておく。 シンボリックリンクのリンク先を上書きして書き換える場合、以下の様にlnコマンドを実行してやれば良いようだ。

ln -nfs リンク元PATH シンボリックリンクPATH

これで、シンボリックリンクのリンク先が変更できる。


参考


コンソール上で利用できるGolang製のvmstatっぽいCPUモニタリングツール『cpustat』

ネットサーフィン中に、Uberの作ったGolang製のモニタリングツール『cpustat』なるものを見かけたので、ちょっと試してみることにした。 githubの画像を見てもらうとわかるのだが、コンソール上であってもグラフで使用率等を表示してくれてるみたいで、なかなか良さげ。 インストール(というかコンパイル)にはGolangが必要になるので、インストール前にその辺の環境は構築済みであることを想定して進める。

まず、以下のコマンドでcpustatのソースをダウンロードしてインストールしてやる。実行にはroot権限が必要になるので、ここではバイナリを/usr/sbinにおいている。

g...

コンソール用のメールクライアント『lumail2』なるツールを見かけたので、ちょっと試してみたのでその備忘。 元々あった『lumail』というプロジェクトを元にして作られているらしい。 とりあえず、今回は公式の例の通りDebian系であるUbuntu Server 16.04で試してみる。

1. 『lumail2』のインストール

まず、以下のコマンドで必要となるパッケージ類を導入する。

sudo apt-get install -y build-essential libgmime-2.6-dev liblua5.2-dev libmagic-dev libncursesw5-...

CentOS 7などでは、net-toolsの使用について非推奨となっているため、IPアドレスなどを調べるifconfigコマンドは使わず、出来る限りipコマンドを使った方が良いと言われてる。 でこのipコマンド、ifconfigに比べると結構いろんなことができるので、ちょっと使い方について調べてまとめてみることにした。

基本的に、ipコマンドでは指定するオブジェクトに応じて行える操作が切り替わる。

オブジェクト 省略形 備考
address addr(a) デバイスに紐づくIPv4/IPv6アドレスの管理
addrlabel addrl アドレスラベル...

dsdコンソールから、指定したWEBページの証明書期限を取得する方法について調べてたので、備忘で残しておく。 証明書の情報はopensslコマンドで取ってこれるので、そこから取得してパイプで再度opensslで期日等の情報を抜き出せば良い。

echo|openssl s_client -connect ドメイン名:443 -showcerts 2>/dev/null|openssl x509 -dates -noout # 証明書の開始・終了日付
echo|openssl s_client -connect ドメイン名:443 -showcerts 2>/dev/null|op...

ちょっとした調べ物をしていたところ、バイナリやディスクから中のデータを抽出することができる『foremost』コマンドなるものについて知ったので、ちょっと試してみることにする。 これを利用することで、例えばpdfファイルの中にある画像のみを抽出したりといったこともできるようだ。

1. foremostのインストール

インストールは簡単で、以下のコマンドで行える。

Debian/Ubuntu系の場合

sudo apt -y install foremost

RHEL系の場合(例:CentOS 7)

yum install -y https://forensics.ce...

ふと思い立ったので、ターミナル上でファイルから頻出しているキーワード(スペース区切り)・文字を取得させてみることにする。 特に難しいことはなく、以下のように簡単に行える。

1. スペース区切りの頻出キーワードを抽出する

スペース区切りの頻出キーワードを抽出する場合は、以下のようにする。

コマンド | sed 's/ /\n/g;s/\t/\n/g' | grep -v ^$ | sort | uniq -c | sort -nr | head -20

例として、lsのmanの内容で抽出した結果が以下。

blacknon@BS-PUB-UBUNTU-01:~$ man ls...

bashの組み込みコマンドでshoptというコマンドがあるのだが、これを使うことによりbashのオプションの動作を制御する変数の値を変更してやることができる。 色々と便利なオプションも多いので、まとめてみることにする。 確認にには 4.2.46(1)-release を用いている。

shoptコマンドで設定可能な項目は、以下のコマンドで確認可能だ。

shopt
[root@BS-PUB-CENT7-01 ~]# shopt
autocd          off
cdable_vars     off
cdspell         off
checkhash       of...

ファイルの利用状態をモニタリングできる『pyinotify』

ボケっとネットサーフィンしてたところ、Python製のツールでfswatchのようにファイルの変更を検知・記録できる『pyinotify』というツールを見かけたので、CentOS 7上で試してみることにする。 インストールは簡単で、pipから導入が可能なようだ。

yum install -y epel-release
yum install -y python-pip
pip install --upgrade pip
pip install pyinotify

インストールできたら、以下のようにコマンドを実行することで対象のディレクトリ配下でのイベントをモニタリングする事ができる。

...
CentOS 7でWEBブラウザからssh接続できる踏み台サーバ『KeyBox』を使ってみる

sshの踏み台サーバについて調べていたところ、ブラウザ経由でssh接続が行える『KeyBox』というツールを見かけたので、ちょっと試してみることにする。 触ってみた感じ、接続の種類や機能はApache Guacamoleに比べて少ないのだが、Guacamoleはコンソールに表示される文字列を直接コピペできないのに対し、KeyBoxは行えるので、用途によってはありかなと思う。 設定次第でLDAP認証も行え、二要素認証がデフォルトで設定可能なのも良い感じだ。 ちょっと前にlsshを使って似たようなことをやらせてみたけど、あちらではsshで繋げないといけないし、こちらはWebだけで完結す...


ちょっと前に、awkを使ってscriptコマンドで取得するターミナルログにタイムスタンプを付与する(Teratermとかのログみたいにする)処理について記述したことがあったのだが、この状態だとバックスペースなどの制御文字やカラーコードが残っている状態になってしまう。 catなどで見る分には問題ないのだが、lessなどで確認するにはちょっとよろしくないよねということで、そういった制御文字やカラーコードを記録中に削除してしまうことにする。

で、よく制御文字を削除する方法としてはcolコマンドが用いられるのだが、この方法だとファイルを読み込んで削除はできても追記での削除はできないようだ。 な...


Twitterでそんな感じの処理について見かけたので、あとで引っ張ってこれるように残しておく。 といっても大したことはせず、普通にfindコマンドでexecするときにrenameすればいいだけだ。 このとき、ファイル名にシングルクォートがあったとしてもリネームができるよう、findで得たファイル名をダブルクォーテーションで囲ってやればいい。

find ./ 条件 -exec rename 置換前文字列 置換後文字列 "{}" \;