Home

技術系のメモと日々の雑感

Perl のワンライナーについての個人的なメモ

仕事で Perl のワンライナー(One Liner)を利用することがあって、基本的な振る舞いが分かってなかったせいで結構ハマってしまった。
で、個人的に調べた限りでは、サンプルはたくさん見付かるものの、自分がほしかった情報が書かれたサイトがなかったのでまとめておくことにした。
バージョンは v5.8.8 を想定。
自分用に書いているので結構適当だからご注意を。
間違い等に気付いたらコメントでツッコミを入れてもらえると嬉しい。

続きを読む

netcat を使って気付いたこと

netcat(nc)の使い方をざっと見ておくことにした。
まずは最新のソース(netcat-0.7.1.tar.gz)をオリジナルサイトからダウンロード。
make 時に「DGAPING_SECURITY_HOLE」を指定しないと -e オプションが使えないという情報を見かけるけど、このバージョンでは不要だった。

# tar zxvf netcat-0.7.1.tar.gz
# cd netcat-0.7.1
# ./configure --prefix=/usr/local
# make

make install する前にとりあえず動きを見ておく。

# cd src
# ./netcat -l -p 1234 -e /bin/sh

リッスン側はこれで OK だね。
telnet で接続できるという情報があったけど、やってみると駄目だったので、クライアント側(接続元)でも netcat を使うことにした。

# ./netcat localhost 1234
cat /etc/issue

Vine Linux 4.2 (Lynch Bages)
Kernel 2.6.16-0vl76.28 on an i686

ところで、nc というファイルは make 時には作られないんだね。
コマンド名としてはこっちの方が有名(?)だと思うんだけど、nc は make install 時にシンボリックリンクとして作られるようだ。
あと、このバージョンでは -t は「TCP mode」の指定に変わっていた。(このオプションはデフォルトで有効)
-T オプション(telnet negotiation)も試してみたかったけど、指定しても特に動作に変化はなかった。
使うことはなさそうなので、まぁいいか・・・。
ちなみに、CentOS 5.2 の nc パッケージでは -e オプションが無効になっているようだ。
危険なツールだから、知らずにインストールしてしまった場合への配慮なんだろうね。

Perl の配列のインデックスに小数を使うと

自分が書いた Perl のソースをたまたま他の人が見たときに
「配列のインデックスって小数が入っててもいいんですね」
と言われてびっくり。
慌ててソースを見直したら

$MsgStr[$MsgNo/10];

などと書いていて、この $MsgNo が 10 で割り切れないパターンがあるのを見逃していた。
いや、ただ単に int に渡すのを忘れてただけで・・・。
しかし、これでも動くんだなぁ。
この場合、小数部分を無視して int に渡したのと同じ動きをするようだ。
文法的に問題がないかは未確認。
Perl って動かしてみないと分からないことって多いね。
そこがまた面白いんだけど。

コマンドを実行した回数をカウント

ちょっと前に hash コマンドを使えば外部コマンドの実行回数が分かるという話を書いたけど。
これだけだとあまり使い道がないし、だったら組み込みコマンドの実行回数も含めて何とかならんのかと思うのが人情というもの。
ということで、かなり適当だけど perl で書いてみた。

続きを読む