アニメ『紅殻のパンドラ』(2016)
脳は人間で体が機械、いわゆるサイボーグです。体はソフトウェアで制御されているみたいなので、当然バージョンアップとかもありますね。
将来、体に機械を組み込むような世の中になると、バグが心配です。まあ、バグがなくても、バージョン違いで動かないってことは多々あるので、バージョンの確認はとても大事ですね。
コマンド使いも、普段から使うコマンドのバージョンは意識しておくべきかなあと思います。
ではlsコマンドのバージョンを確認してみます。
takk@deb8:~$ ls --version ls (GNU coreutils) 8.23 Copyright (C) 2014 Free Software Foundation, Inc. ライセンス GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. 作者 Richard M. Stallman および David MacKenzie。 takk@deb8:~$
たいていのコマンドは、このlsコマンドのように-(ハイフン)2つのロングオプション–versionを指定すれば確認できます。
/bin配下にあるコマンドのバージョン一覧を作るスクリプトを書いてみましょう。
takk@deb8:~/tmp$ cat version.sh for i in `ls /bin`;do $i --version 1>/dev/null 2>&1 if [ $? -eq 0 ];then $i --version 2>&1 | grep ^$i'.*[0-9]\.' else echo $i noversion fi done takk@deb8:~/tmp$
–versionでコマンドが成功した場合は、バージョン行を表示し、
失敗した場合は、コマンド名とnoversionと表示するスクリプトです。
実行結果は、listというファイルに格納しました。
takk@deb8:~/tmp$ . version.sh > list takk@deb8:~/tmp$
確認してみましょう。
takk@deb8:~/tmp$ head list busybox noversion bzcmp noversion bzdiff noversion bzegrep noversion bzexe noversion bzfgrep noversion bzgrep noversion bzip2, a block-sorting file compressor. Version 1.0.6, 6-Sept-2010. bzip2recover noversion cat (GNU coreutils) 8.23 takk@deb8:~/tmp$
のっけからnoversionが続いてます。
–versionが成功するコマンドはいくつあるでしょう。
takk@deb8:~/tmp$ grep -v noversion list | wc -l 67 takk@deb8:~/tmp$ grep -v noversion list | head bzip2, a block-sorting file compressor. Version 1.0.6, 6-Sept-2010. cat (GNU coreutils) 8.23 chgrp (GNU coreutils) 8.23 chmod (GNU coreutils) 8.23 chown (GNU coreutils) 8.23 cp (GNU coreutils) 8.23 cpio (GNU cpio) 2.11 date (GNU coreutils) 8.23 dd (coreutils) 8.23 df (GNU coreutils) 8.23 takk@deb8:~/tmp$
もしかしたらほぼcoreutilsかもしれませんね。
次は/bin配下のコマンド数と、listに格納されているコマンド数を比べてみましょう。
takk@deb8:~/tmp$ wc -l list 111 list takk@deb8:~/tmp$ ls /bin | wc -l 152 takk@deb8:~/tmp$
ん〜。なぜでしょうか。一致しません。uniqでlistからこぼれているコマンド確認してみましょう。
takk@deb8:~/tmp$ (awk '{print $1}' list;ls /bin) | sort | uniq -u >nglist
タイトルにあるuniqで片方のみに存在する文字列を発見する方法を使ってみました。
diffと違うのは、いちいちファイルに保存しなくてもよいところです。保存が面倒でなかったらdiffで十分かと思います。
takk@deb8:~/tmp$ wc -l nglist 43 nglist takk@deb8:~/tmp$
あれ。またまた数が合いません。152-111で41になるはずなのに、2個多いです。
ゴミでも入ってるのでしょうか。
数が少ないのですく見つかりましたが、bzip2のあとに,(カンマ)がついています。
bzip2とbzip2,を別の文字列と認識したようです。
bzip2, a block-sorting file
気を取り直して、,(カンマ)を空白に置換してリストを作って確認してみます。
takk@deb8:~/tmp$ (tr ',' ' ' < list | awk '{print $1}';ls /bin) | sort | uniq -u > nglist takk@deb8:~/tmp$ wc -l nglist 41 nglist takk@deb8:~/tmp$
41なので数はぴったり合います。
ではnglistのコマンドを確認してみましょう。
takk@deb8:~/tmp$ head nglist bash bunzip2 bzcat bzless bzmore dnsdomainname domainname echo egrep fgrep takk@deb8:~/tmp$
おかしいです。bash –versionはバージョン表示されるはずですが、nglistに上がっています。
続く。
コメント