こんにちは、サイオステクノロジーの有村です。
前置き
以前はRubyで、今はPython(3)で、小粒の仕事をこなすコマンドを作ることがあります。例えばサクッとテスト用の秘密鍵とCSRを作るとか、サクッと指定した文字数のランダムな文字列をたくさん出力するとかそういう仕事です。それぞれ、とりあえず動くところまでコマンドを作るまでの流れについてまとめて見ました。
Ruby
まずは何はともあれ /usr/local/bin/ に移動して仕事の名前を与えてあげます。
$ cd /usr/local/bin/ $ sudo vi mkcsr
コマンドとして使うので拡張子は不要です。
#!/usr/bin/env ruby
冒頭にこのファイルを ruby で実行するよう宣言します。
こちらは ruby の実際のパスを問わず env のある多くのOSで動作する記述になります。
この行を shebang と呼びます。
shebang を記述したら :w でファイルを保存し、 :e でファイルを開き直してください。
拡張子はありませんが、shebang を読んで vim もファイルを ruby として再解釈し、1行目が色付けされます。
「色つかないな」というときは適当に :w :e しましょう。
#! /usr/bin/env ruby require 'optparse' require 'openssl' def main # option params = ARGV.getopts("", "dry-run") p params # initialize random seed OpenSSL::Random.seed(File.read("/dev/random", 16)) # key pair generate rsa = OpenSSL::PKey::RSA.generate(2048) p rsa # private key passphrase = "secret" File.open("private_key.pem", 'w') do |f| f.write(rsa.export(OpenSSL::Cipher.new("aes256"), passphrase)) end end main
:wq
とりあえず途中まで書きました。
optparse はオプション指定やヘルプが作れて便利なので、こういうライトコマンド作成の際はよく使います。
library optparse (Ruby 2.6.0)
$ sudo chmod 755 mkcsr
権限を修正します。
$ which mkcsr /usr/local/bin/mkcsr
コマンドが認識されていることを確認しましょう。
$ cd /tmp $ mkcsr --help Usage: mkcsr [options] --dry-run $ mkcsr {"dry-run"=>false} #<OpenSSL::PKey::RSA:0x00007fffcaf42b90> $ ls private_key.pem private_key.pem $ cat private_key.pem -----BEGIN RSA PRIVATE KEY----- Proc-Type: 4,ENCRYPTED (略)
作ったところまで動作確認できました。
$ sudo vim /usr/local/bin/mkcsr
ちょくちょく動作確認しながら続きを作っていきましょう。
Python3
Rubyと同じ流れなのでいろいろと省略しました。
# cd /usr/local/bin/ # sudo vi randomstr
#!/usr/bin/env python3
:w :e
#!/usr/bin/env python3 import argparse import random import string def main(): parser = argparse.ArgumentParser(description='Output random string') parser.add_argument('--dry-run') args = parser.parse_args() print("random") print(randomstr(16)) def randomstr(n): return ''.join(random.choices(string.ascii_letters + string.digits, k=n)) if __name__ == "__main__": main()
:wq
Argparse チュートリアル ― Python 3.7.3 ドキュメント
$ sudo chmod 755 randomstr $ which randomstr /usr/local/bin/randomstr $ randomstr -h usage: randomstr [-h] [--dry-run DRY_RUN] Output random string optional arguments: -h, --help show this help message and exit --dry-run DRY_RUN $ randomstr random GzS0RywsDsmy0knX $ sudo vi randomstr
まとめ
それぞれのスクリプト言語でコマンド利用を想定したライブラリがあるので、それらを利用しつつ、細かい仕事を便利にしてみましょう。