CLI
だけ
CLI
とは
CLI
とは Comand Line Interface の略です。Linux を
X 抜きでインストールしたときは CLI
モードで
コンピュータを動かすことになります。「勘弁してよ」と悲鳴をあげるかも
しれませんが、コンピュータの方は「うん それのほうが CPU もメモリも
多く使えていいよ」と言うでしょう。
CLI
の話になるのか
ウェアラブルの中には、グラフィックチップ、ディスク、およびメモリ容量 ならびにバッテリ寿命に問題を抱えているものもあります。テキストモード で動かすなら、バッテリが節約できるし,ディスクアクセスも少なくなり、 同様に多くのメモリと CPU サイクルの節約にもなります。また、グラフィック インタフェースをインストールする必要がないなら、ディスクスペースをすこし 節約することになります。その結果、データ用のスペースが増えます。 しかしテキストモードではなにもできないじゃないか、と思うかも しれませんが、すこし考え方を変えれば、テキストモードとグラフィックモードで 同じことができるのです。
入出力の通路を利用して、その間を情報伝達するプログラムが、ほとんどないと
いうことを考慮することが必要です。こういった環境では、何かするには
全部の指を使わなければなりません。マウスさえ使いません。
X では、エディタ (vi
, Emacs
,
Jed
など)、ゲーム(もっともウェアラブル自体ゲームみたいな
ものですが)、ビューア/ブラウザ ( ?less
, ?more
,
lynx
, links
など)、ファイルマネージャ
( mc
など) などいろいろ使えます。
CLI
はかっこいいのだが、コマンドの設定やオプションをすべて
覚えるのは難しいと思っている人もいます。学習曲線は実際に急勾配ですが、
覚えてしまえば、よりはやく働けるし、速ければ速いほどウェアラブルに
とって良いことです。個人の仕事を加速する例を見てみましょう。
強力なシェルが UNIX
の基盤です。 シェルを使うことで
Microsoft の貧弱なバッチ言語に比べて多くのことができます。
UNIX
は強力なシェル (tcsh
, ksh
,
bash
など) を数多く備えています。ただし著者は sh
を
使っています。これは古くて他に比べて特徴もあまりありませんが、どの
UNIX
類にも搭載されています。sh
にはよく使われる
機能/コマンド (echo
, test
)があります。なぜ
そのことに言及するかというと、 GNU
も echo
と test
のプログラムを持っており、もしこれをはずせたら、
まあ多いとは言えませんが、約 20k のディスクスペースの節約になります。
sh
のバージョンの中には、すごく経済的なものがあります。
シェルスクリプトは、小さなプログラム言語で、繰り返しは
(for
, while
)、ユーザーインタラクションは
(read
)、I/O (< >)です。
スクリプトを学ぶには、 man sh
とタイプすればマニュアルが
表示されます(または tcsh
ですが、すこし複雑です)。
馬鹿げたスクリプトの例
for i in * .[^.]*; do echo $i; done
(簡単に ls
)
sed
と awk
についてUNIX の世界では awk
と sed
はよく知られています。
これらのプログラムは汎用性があり、いろいろなことに使えます。
GNU
には sed
や awk
に代わる
ユーティリティ類 (dd
、cut
、
seq
など) があります。なぜ dd
が出てくるのか
と思われる向きには -
dd
には、気の利いたちょっとした機能が付いていて、大文字/小文字
の変換でいえば -
あるディレクトリに大文字のファイルネームがあって、それを小文字に
変えたいとします。awk
では次のようにします。-
for i in *; do
mv "$i" "`echo $i | awk '{print tolower($0)}'`"; done
sed
では大文字を、一つ一つ小文字に変換します。
dd
では簡単で、次のようにすればよいでしょう。 -
for i in *; do mv "$i" "`echo $i | dd conv=lcase`"; done
cut
はテキストの縦列をプリントするプログラムです。1行の中の
異なった縦列をプリントしたいときは cut
が使えます。
cut
はこの種のジョブ専用のコマンドで、速く効率的に仕上げたい
なら awk
よりベターです。同じことが shell の内部コマンド
でもできます。(IFS
変数を割り当てればできます)
awk
、 cut
、 sh
での例を
下に示します。単に login : identity
のフィールドだけを
示します。
awk -F: '{ print $1" : "$5}' /etc/passwd
cut
:
while read line; do echo "`echo $line | cut -d: -f 1` : `echo $line | cut -d: -f 5`"; done < /etc/passwd
IFS=':'; while read a b c d e f; do echo "$a : $e"; done < /etc/passwd; IFS=' '
awk
を覚える必要はありません。
awk
を知らなくても、どんなことでもできます。
(もっとも、ときには awk
のほうが簡単なことがあります)
sed
の欠点は、一時ファイルで作業しなければならないことです。
ディスク容量を節約してコマンドラインでファイルを編集したければ
ex
があります。これは vi
のスクリプトバージョンです。
sed
も使えますが必ずしも必要ではありません。
ディスク容量が肝心なら、ほかのプログラムでも同じことができるようなものは
削除することもできます。たとえば - dd
があるなら
cat
はいらないし、vi
があるなら ed
は必要ありません。(ほかの例があれば教えてください)
スクリプトの方がエイリアスより強力です。しかしスクリプトはディスク
容量を消費し、動かすたびにロードされます。エイリアスはメモリを消費
しますが CLI
モードならひとりでメモリ全てを使えるわけです。
エイリアスはディスクではなくメモリから読み込まれるので、スクリプト
より速いのです。普通、シェルにはエイリアスやスクリプトに代る関数が
あります。関数にはスクリプトと同じ機能がありますが、メモリだけしか
使いません。エイリアスと関数について知りたければ Man ページを見て
ください。