curlにかわるコマンドラインのhttpクライアントコマンド『HTTPie』

ちょっと調べ物をしていたところ、Pythonで書かれたモダンなcurlというようなCUIツール『HTTPie』なるものを知った。

curlだと色分け表示されずにちょっと見にくいところを色付き...


Yubikey 4に秘密鍵を入れてssh接続に利用する

個人的に、sshの接続は基本的には公開鍵認証を使うようにしている。

で、秘密鍵はローカルマシンで保持させてるのだけど、Yubikeyに秘密鍵を入れて、証明書認証の設定をすることでトークン認証にすることもできるようだ。 確かに、これなら複数のマシンで共通の秘密鍵を利用できるし、PINコードでの認証も必要になるので、2要素認証的な要素もあってセキュリティも固くなる。

触ってみないとなんともいえないので、ひとまずは実際に試してみることにした。なお、Yubikeyから鍵を取得するため、OpenSCが必要になるらしい。 ssh接続先にはCentOS 7、Ubuntu Server 18.04 L...


MacOSで作業中、brewの操作実行後に以下のようなエラーが表示される。

dyld: Library not loaded: /usr/local/opt/readline/lib/libreadline.7.dylib
  Referenced from: /usr/local/bin/awk
  Reason: image not found

なんだこりゃ?と思って調べてみたところ、どうやらlibreadlineのバージョンが8に上がった際、旧バージョン(7)のファイルがなくなったために参照先が無いとエラーになっている様子。 とりあえず、バージョン付きのファイルとしてシンボリック...


Linuxでなにかしら処理を動かしていると、処理が終了した際にローカルのユーザにメールを送ってくることが多い(デフォルトでは/var/spool/mail/にファイルとして吐かれてる場合が多い(mbox形式))。 ちゃんとしたサーバだったら監視ツールとか入れたり、別途Slackにポストさせたり、ちゃんとメーリングリスト宛にメールを転送させるように設定したりしているけど、適当にCUIでキックした処理の終了連絡とか、cronで定期実行してる処理だとそこまでしてなかったりする。

で、そもそも最近はメールもあまり見ないし、Slackにはメールを受け付けてチャンネルにPOSTしてく...


Macでショートカットキーにコマンドやスクリプトの実行を割り当てる

Mac OS Xで、ごくたまにショートカットキーに特定のコマンドを割り当てたいということがある。 ただ、OS Xのショートカットキー登録はメニューの機能名で登録する場合が多く、特定のコマンドを実行させるよう指定することはできない。 で、なんか方法あるのかなーと思って調べて見たところ、以下の2パターンがあるようだ。

1. Automatorでシェルスクリプトを書いて登録する場合

MacOS Xでは、操作を自動化できるAutomatorという機能が用意されている。 この機能では、AppleScriptやシェルスクリプトを登録でき、さらに「サービス」としてその自動化した処理を登録できるので、...


最近は仮想マシンをVirtualBoxで使うことが多いのだけど、VMのパフォーマンスを確認する場合、残念ながらVirtualBoxはパフォーマンスをGUIで確認はできないようだ。 で、調べてみたところこういった場合はVBoxManageコマンドから確認するようだ。

VBoxManageはVirtualBoxをインストールしたら一緒に入ってくるので、コンソール上で以下のようにコマンドを実行してやればいい。 (以下の例では、3秒ごとに情報を出力させている)


ブラウザ上からSQLをいじって学べる学習サイト『Sqlzoo』

たま~に、リアルなデータが入っておらず、適当なデータしか入ってないテーブルに対してSQLを実行し、どういう感じに書けばうまく動作するのかを確認したりしたいことがある。 こういう時、だいたい今までは適当な仮想マシンとかにDBインストールして、適当なデータ突っ込んだテストDBを作ったりしてたのだけど、それもちょっと面倒くさい。なんかいい方法ないかなと調べてみたところ、そういったときにも使えそうなSQLの学習サイト『SQLZOO』というサイトを見つけた。 どうやら日本語に翻訳もされてるようだ。こんなサービスがあるとは、知らなかった…。


Linuxなどで定期的に特定のプログラムを実行したい場合、外部のジョブシステム(JP1だったりRundeckだったり)やcronで処理をすることが多いだろう。 だが、特定の日時に1度だけ実行したい、という場合は、atコマンドという日時を指定して、一度だけプログラムを実行させるコマンドを利用する場合が多い。今回は、そのatコマンドを使う上で覚えておきたい使い方をまとめてみる。

なお、ここではatと同じパッケージに含まれるatq、atrm、batchコマンドについても触れる。

1. 基本的な使い方

最初にも記述したことではあるが、atコマンドは指定した時間にジョブを実行するためのコマン...


Twitter見てた時、そういう処理の仕方についてわからないというのを見かけたので、一応何かの時のために残しておくことにする。 通常、LinuxやMacに入ってるmvやcpでは、コピー先のディレクトリが無かったら作成するような機能はないので、ひと手間必要になる。

1. findからxargsを使ってコピー、移動させる場合

findからxargsに対象のファイルPATHを渡して、それをcp、mvを使ってコピーや移動をさせる場合。 この場合、コピー時にディレクトリが無いとエラーになってしまうので、一度mkdirで(フォルダがない場合に)生成させる必要がある。 以下、サンプルコード(mvの場...


前に、yum/rpmコマンドでファイルがどのパッケージに含まれるか、逆にパッケージを指定してどのようなファイルが展開されるかについて書いたので、今回はapt/dpkgコマンドで同様のことをする方法について残しておく。

1. 指定したファイル名がどのパッケージに含まれるかを調べる

指定したファイル名がどのパッケージに含まれるか(yumでいうprovides)を調べる場合、aptで行う場合はそのものズバリな機能はないため、apt-fileという別のプログラムを利用する必要があるようだ。 以下のコマンドでインストールできる。


VirtualBox 6.0でVMでホストオンリーアダプタでの接続をさせる

実は2019年1月で転職をしたのだけど、転職先では仮想マシンは自分のクライアントマシンで動作させるようになって、VMware FusionとかParallelsではなくVirtualBoxを使うらしい。 で、VirtualBoxではデフォルトだと接続がNATになってしまい、VMと直接接続ができないため、ネットワークをホストオンリーアダプタという接続方式にする必要がある…のだが、前に触った時と一部違ってホストオンリーアダプタでの接続に手こずってしまった。 なので、一応備忘で残しておくことにする(なお、VirtualBoxはインストール済とする)。

VirtualBoxでホストオンリーアダプタ...


前回、sshからsuでユーザを切り替えて、ログインユーザではないユーザから直接コマンドを実行させるという内容について記述していたが、この方法だとttyの払い出しがなされないということに気づいた。

sshから直接suコマンドでユーザを切り替えてコマンドを-cオプションで実行させる場合、残念ながら仮想端末が有効にならないし、そのためのオプションというのも用意されていない。 じゃあどうすればいいかというと、scriptコマンドを経由することで仮想端末が使えるようになるので、それを利用する。


ローカルorリモートマシン(ssh)でsuによるユーザ切り替え時に自動でパスワード入力をさせる

諸事情があり、sudoを使わずにsuだけでユーザを切り替えてコマンドを実行したい、その時にパスワードの入力をキーボードから行わずに自動化させたいということがあったので、調べてみた。 こういった場合、ヒアドキュメントを使えば指定した入力は標準入力として扱われるので、それでパスワードの入力が自動化できる(ただ、テキストとして丸見えになるし、(psの出力には残らないけど)historyにも残るので自己責任で…)。


いい感じに色分けして表示してくれるCUIのバイナリビューア『hexyl』

ネットをぼけーっと見てたところ、バイナリの値をいい感じに色分け表示してくれるCUIのバイナリビューア『hexyl』なるコマンドを見かけた。 Rustで書かれているらしい。

面白そうなので早速インストールしてみる。


シェル芸botに入ってるunko.towerの中、外にテキストを差し込んで遊ぶ

よく、Twitterにあるシェル芸bot(フォローされてたら「#シェル芸」 というハッシュタグ付きのツイートをつぶやくとそのシェル芸を実行して結果を引用リツイートで出してくれるボット)というボットで遊んでるのだけど、そこでよく遊んでたシェル芸を残してなかったので、備忘。

シェル芸botには、super_unkoなるうんこ関係のコマンドを詰め合わせてるうんこづくしなリポジトリがあって、その中にアスキーアートのうんこを生成するunko.towerというコマンドが存在している。

unko.tower N

今回は、このunko.towerのうんこの中や背景に任意のテキストを差し込んでいく。


ターミナル上でファイルをSyntax Highlightして表示してくれる『bat』

数年前に、LinuxでソースファイルをSyntaxHighlightして出力させるコマンドについて書いたことがあるのだが、最近batというRustで書かれたものも出たらしい。

Boxを出力して、その中にソースコードをSyntax Highlightして表示してくれるらしい。 インストールは簡単で、Ubuntuなら用意してあるdebパッケージを使えばいいし、OS Xならbrewからイン...


数年前に、他のターミナルの操作をのぞき見できるttylogというツールについて書いてたのだけど、そのツールの動作を調べてGolangで書き直したという内容の記事を見かけた。

読んでいると、どうやらttylogは以下のステップで他のターミナルの内容をのぞき見しているらしい。

  • ttyのログインプロセスのIDを調べる
  • pidに対してstraceコマンドを使ってシステムコール(read/write)を見る
  • straceの内容を加工して出力する

…あれ? このくらいの内容なら、straceを使ってgrepや...


yum/rpmを使っていて、指定したファイル名がどのパッケージに含まれるのか、その逆に指定したパッケージにはどのようなファイルが含まれるのかを調べる必要があったので、備忘で残しておく。

1. 指定したファイル名がどのパッケージに含まれるかを調べる

指定したファイル名がどのパッケージに含まれるかを調べる場合、yumで行う場合は「yum provides」を利用する。 この時、ファイル名はフルPATHでなくても問題ない。


Typoしたものが大半なのだけど、指定した文字列とN文字違ったり、1文字ずれている(「あいうえお」→「いあうえお」みたいな)文字列をヒットさせたいということがごくごくたま~にあって、それをgrepでときどきやっている。 個人のマシンではfunctionを作ってあるのだけど、たま~にリモートマシンで使うとき(+ローカルのrcファイルを読み込ませてない時)なんかにはその場でコマンドを組み合わせたりしているので、備忘で残しておく。

1文字違う文字列をgrepする

指定した文字列から1文字違う文字列をgrepする場合、以下のようにする。


ちょっと前にPython3でコードを書いていた際、複数の変数の値すべてがNoneだった場合にTrueとする処理にしたいということがあったので、備忘で残しておく。 やり方としては簡単で、一度すべての値を配列に入れてやって、それをlist.count(None)で数えてやった値と配列の要素数を比較してやればいいだけだ。


ターミナル上で、特定の列の値の件数を集計して、その集計した数が指定した値の行だけを出力させたい事がある。 …のだけど、調べたところ楽に一発で取得するようなコマンドが無いみたいなので、一応残しておく。

いろいろとやり方は有ると思うけど、以下のようにawkで処理を書いてやるほうが楽だろう。 以下の例では、3列目に2個同じ値がある行のみを出力している。


WSLでリモートマシンに接続してポートフォワーディングする場合、Teratermのようにメニューから選択等をする必要はなく、普通にsshコマンドから実行してやればいいようだ。

ssh -L <ローカルポート番号>:<対象ホスト名:対象ポート番号> user@hostname

WSL単体でできるってのは、なかなかいいものだなと。 …あまり使う機会なさそうだけど(´・ω・`)。


ちょっと前に意図的に脆弱なシステムを作る機会があって、そこでブラインドSQLインジェクションを利用して値を取得させるように作った。 で、前に 常設のCTFで似たような内容をシェル芸で解いてた のでちゃちゃっと対応できるだろうと思ってたのだけど、結構前に書いてたコードだったのでテスト時にうまくできなかったので、次に手こずらないようそこだけ抜き出して書いてみる。(サンプルに必要なURLは前述のCTFのサイトを利用)

ブラインドSQLでは、まず最初に対象の文字数を調べる必要があるので、以下のようなコマンドを実行する。


WSLでリモートマシンにx11フォワーディング接続をさせる

最近はあまり使うこともないのだけど、Oracleのインストールとかをする際にsshでリモートサーバにx11フォワーディング接続をしてGUIを転送させるようなことをしていた。 で、その際はTeraterm + Xmingの組み合わせで対応することが多かったのだが、それをWSLを使ってやってみることにする。

なお、WSLで利用するOSはUbuntu 18.04LTSとし、リモートマシンへの設定はここでは省略する。

1. 『VcXsrv Windows X Server』のインストールをする

Teratermと組み合わせて利用するX...


ちょっと前に、ssh接続時にローカルのrcファイルをそのまま読み込ませる方法について書いたけど、それと組み合わせられるようにインクリメンタルサーチ用のシェル関数で「boco」というものを作ってみた。これはANSIエスケープコードを利用してプロンプト下に標準入力で受け付けた内容を出力させて選択した内容を標準出力で表示させるシェル関数で、外部コマンドとしてgrepとsort、あとはbashの機能のみで動作するように作成している。 あまりにも受け付けた入力が大きすぎる場合は挙動が重くなるが、10000件くらいなら問題なく処理できるので、historyのインクリメンタルサーチくらいなら利用でき...