Unix・Linuxと言えばもちろんランベル3のコマンドラインです。
コマンドラインってレスポンスが早く、慣れるとGUIが苦痛になる人もいます。
Unix・Linuxではシェルスクリプトも扱えた方が良いのですが、シェルスクリプトを記述しなくてもその場で様々なコマンドを組み合わせて処理を動かせます。
そんな中で私が日常的に使用している2つの小技について書いていきたいと思います。
また小技ですがシェルスクリプト以外でも使う事が出来ます。
RubyやPerlといったインタプリタ型のスクリプトを使う場合も重宝するでしょう。
プログラムとしての知識としては小技というよりも基礎知識です。
基礎ですが、その基礎によって作業が効率化出来ます。
では実際に紹介していきたいと思います。
コマンドで作れる小技
ワンライナー
ワンライナーとはfor分などをコマンドラインから実行する技法になります。
例えば、下記のワンライナーは10秒おき10回、topコマンドを1回実行します。
for i in `seq 1 10` ; do top -c -n1 ; sleep 10 ; done
シェルスクリプトにしなくても、その場で動作します。
※seqはLinuxのみで使用可能
その他にも、インストールしているパッケージの確認にも下記のような記述で対応できます。
# for i in mysql php apache XXXX ; do rpm -qa | grep $i ; a=`echo $?` ; if [ $a -eq 1 ];then echo "*--- not found $i ---*" ; fi ; done mysql-server-5.1.71-1.el6.x86_64 mysql-libs-5.1.71-1.el6.x86_64 mysql-5.1.71-1.el6.x86_64 mysql-connector-odbc-5.1.5r1144-7.el6.x86_64 php-mysql-5.3.3-26.el6.x86_64 php-pear-1.9.4-4.el6.noarch php-xml-5.3.3-26.el6.x86_64 php-5.3.3-26.el6.x86_64 php-pdo-5.3.3-26.el6.x86_64 php-mysql-5.3.3-26.el6.x86_64 php-common-5.3.3-26.el6.x86_64 php-cli-5.3.3-26.el6.x86_64 php-gd-5.3.3-26.el6.x86_64 *--- not found apache ---* *--- not found XXXX ---*
このように汎用的に、その場でコマンドが組めます。
実行結果も、存在しないパッケージはnot foundで記述させているので、分かりやすいですよね。
Unix系やLinux系の特性をさらに生かしていくには、ワンライナーが使えた方が良いと思います。
ヒアドキュメント
ヒアドキュメントと検索すると、より詳しいサイトが多く出てくると思いますが、もちろんそれは身に着けた方が良いスキルだからです。
ヒアドキュメントは下記のような記述になります。
#cat <-EOF >> aaaaa >> bbbbb >> ccccc >> EOF aaaaa bbbbb ccccc
一見、何をしているか分かりにくいので、分割していきます。
>cat <-EOF
「<-EOF」は、catコマンドを実行する際にヒアドキュメント開始の宣言をしています。
「EOF」という文字が必須なわけではなく、他の文字列でも構いません。
次にコマンドに渡す文字列を渡していきます。
>> aaaaa >> bbbbb >> ccccc >> EOF
これはヒアドキュメントを開始すると標準入力が出来るようになるので、aaaaaとbbbbbとcccccを入力することでcatコマンドに「文字を渡している」だけです。
そして、最後のEOFは終端子といい、ヒアドキュメントの終わりの宣言になります。
これを入れないとエラーになります。
この終端子が書かれるまでに入力された文字を「EOF」の後に処理していきます。
aaaaa bbbbb ccccc
最後は入力された結果を返しております。
catコマンドに入力した文字列を引き渡し実行された結果として上記が標準出力されています。
ヒアドキュメントの最大のメリットは、コマンドを|(パイプ)で挟んで連続実行する訳ではなく、入力された内容を順を追って渡していけるので、手続き型のスクリプトを組む際によく用いられます。
ワンライナーのようなコマンドベースではなく、スクリプトを作成するときによく使用します。
FTPやSQLPLUSなど、プロンプトの応答を待たなければいけない場合に非常に有用です。
まとめ
この二つはランレベル3で作業するには必要不可欠になると思います。
一度使い慣れると中々手放せませんし、スキルがあがればこの二つの手法で出来ることはどんどん増えていきます。
プログラマの人からすると当然知識かもしれません。
しかしインフラエンジニアでもこのようにプログラムを書かずにその場で実行できるようになればかなり効率的です。
もしコマンドの実行しかやっていないLinuxエンジニアの人などがいればぜひ練習して試して欲しいと思います。