
alias の世界
alias の世界へようこそ
Unix という OS には alias という機能があった。
そして今の Linux にも同じものがある。
「alias」と書いて「エイリアス」と読む。
コマンドを別名に定義する機能である。
かつてのコンピューターと言えばパソコンも含めてコマンドラインインタフェースだった。今はマウスを使ってウィンドウを駆使するグラフィックユーザインタフェースが主流だが、もちろん最初からこのようなインタフェースがあったわけではない。キーボードをカタカタと叩いてモニタには文字列が列挙される。かつてのコンピューターと言えばこのような感じだった。キーボードを使ってコンピューターに司令する「コマンド」を入力することから「コマンドラインインタフェース」と称される。
このコマンドラインインタフェースはキーボードに慣れるまでが面倒で、それがイヤでコンピューターを敬遠する人も少なからずいたのではないだろうか。面倒とは言うものの人間とは何にでも慣れるもので、何度も何度も同じようなコマンドを叩き続けるとそれこそイヤでも覚えるというものだ。自己流のタッチタイピングを身につけ、それなりにタイピングは速くなる。
速くなるとは言うものの、毎回同じコマンドを10文字も20文字も入力するのは無駄としか言いようがない。かつてはコマンド入力にタブの補完もなく、↑キーによる履歴参照もなかった。「h」(ヒストリーコマンド)はあったが、履歴をリストアップして探すのもなんだかうざったい。
そこで!
alias の登場である。
my alias
私が最低限定義する alias はこんな感じ。
alias l='ls -F'
alias ll='ls -FlgohA'
alias lt='ls -FlgohAt'
alias a='./a.out'
alias u='cd ..'
alias h='history'
alias bin='cd $PREFIX/bin'
alias binl='cd $PREFIX/bin/_local'
export PATH=$PATH:$PREFIX/bin/_local
alias のことを知らなくてもおおよそ見当は付くかもしれない。そう、
alias l='ls -F'
と定義しておけば(このコマンドを入力しておけば)、以降は
l
とたった一文字を入力するだけで
ls -F
が実行されるんである。
なんて素晴らしい!
よく使うコマンドは一文字か二文字くらいに短くして定義しておく。ファイルを列挙するのは「ls」というコマンドだが、これを alias で「l」と定義する。「l」と「s」はキーボードの右と左に離れていて「ls」と入力するためには右手左手の両手を使う。一方、「l」だけであれば片手で足りるわけだ。たった一文字、されど一文字。結構違うんである。そうしていつの間にか「l」だけを入力するのが癖になっていて、何年も経って久しぶりに linux に触れても「l」だけを入力してしまうのには自分でも驚く。
ちなみに「ls」の各オプションは次の通り。
ls オプションなし

ls -F

末尾に次の文字列を追加する(赤い点の部分)。
実行可能ファイルの場合:*
ディレクトリの場合:/
リンクの場合:@、もしくは ->
ls -Fl

「-l」オプションはサイズや更新日付などの属性を表示する(赤い波線の部分)。
ls -Flg

「-g」オプションは、「-l」で表示される属性のうちのグループIDを表示しない(赤い縦線の部分)。
ls -Flgo

「-o」オプションは、「-l」で表示される属性のうちのユーザIDを表示しない(赤い縦線の部分)。
ls -Flgoh

「-h」オプションはサイズを見やすい形式で表示する。
ls -FlgohA

「-A」オプションは、「.」で始まる隠しファイルを表示する。但し、「.」と「..」は表示しない。
ls -FlgohAt

「-t」オプションは、日付の新しい順に並べる。
ls こぼれ話
Unix では「.」で始まる名前は隠しファイル、隠しディレクトリとされていて「ls」を入力しただけでは表示されない。「ls」のオプション「-a」「-A」は「all」の略称で「.」で始まるファイル、ディレクトリも全て表示する。ただし、「-A」は「.」「..」を表示しない。
「.」って何?
「..」って何?
って感じである。
「.」はカレントディレクトリ
「..」は親ディレクトリ
である。
こんな感じ。

「ls -a」では「.」も「..」も表示されている。
「.」で始まる
と定義すると、確かに「.」も「..」も含まれるということも一理あるものの、そんなもん邪魔でしかない。何かを探して全リストを表示していると言っても「.」や「..」を探しているはずもなく、探し物の中に余計なものを含めるのは探す時間を余計に取らせるという効果しかない。というわけで「-a」ではなく「-A」を使うんである。
「./a.out」が鬱陶しくって
linux で
cc hello.c
のようにコンパイルしたら、カレントディレクトリに「a.out」というファイルが出来上がる。これが実行モジュールである。そして、これを実行するためには「./a.out」と入力しなければならない。
・・・
これって、面倒くさくね?
いや、もう、めいっぱい面倒くさいって!
アルファベットが4文字もあるというだけでなく、記号が3つも入ってるって、どうよ。だいたい、なんで毎回「./」をつけにゃならんのか。そろそろカレントディレクトリから実行モジュールを探してくれてもええんちゃうん?
「cc」実行時に実行モジュールを「bin」フォルダに放り込むという考え方もある。「bin」フォルダというのは、実行モジュールの溜まり場で、linux はここから実行モジュールを探し出して実行する。ここに入れておけば「./」を書く必要はない。
だが。
んなことをしていると「bin」フォルダがごちゃごちゃになってしまう。いや、既にごちゃごちゃしていて、山ほど実行モジュールが格納されている。ここに更に「my実行モジュール」を格納しては埋もれてしまう。どれが「my実行モジュール」だかさえもわからなくなる。第一、ちょっと調べたいだけのテストプログラムを「bin」フォルダに格納するのも躊躇われる。なので、「a.out」だけで十分なんだが、如何せん「./a.out」を入力するのが煩わしくてたまらない。
そこで、だ。
このaliasである。
alias a='./a.out'
究極の一文字である。
「a」だけだ。
これだけでこと足りる。
% cc hello.c
% a
Hello World.
%
いや、もう、楽チン楽チン。
cd ..
これだってねぇ。使用頻度の高いコマンドでしょ。カレントディレクトリを一つ上の階層の親ディレクトリに移動するコマンドである。隣のディレクトリに移動するだけでも、一度は上の階層に上がらなければならない。ディレクトリを移動する度に何度入力するのか。なのでこれも一文字。
alias u='cd ..'
楽チン楽チン。
history
昨今、このコマンドを使うのだろうか。
タブの補完や、↑キーによる履歴参照で足りている気がする。いやしかし、昔は使用頻度は高かった。タブ補完も↑矢印キーもなかったんである。前に入力したコマンドをもう一度繰り返すためには「history」は必須だった。
直前のコマンドを繰り返すのは簡単である。
これだ。
!!
もう、簡単すぎて目立たない。
ビックリマーク二つである。
Unix を使っていた30年くらい前、実に使用頻度の高いキー入力だった。
だがもちろん、直前コマンドの繰り返しだけでは足りない。二つ前、三つ前となると記憶に定かでない。そこで使用するのが「history」コマンドである。
こんな感じ。
% h
66 ls
67 pwd cd
68 cd
69 cd c
70 l
71 vi hello.c
72 cc hello.c
73 l
74 a
75 pwd
76 l
77 l
78 u
79 l
80 pwd
81 ls
%
さてここで「vi hello.c」を今一度実行したいと思えば次のように入力すればよろしい。
!71
そう。!の後に履歴番号でその番号のコマンドを実行する。この機能は今も残っている。よろしければ使ってみてください……って使わないよね。↑↓キーの方が簡単でわかりやすいもの。が、何故か alias を定義したくなるのであった。
その他
えーっと。
あとは何が残っていたっけ?
ああ、これこれ。
alias bin='cd $PREFIX/bin'
alias binl='cd $PREFIX/bin/_local'
export PATH=$PATH:$PREFIX/bin/_local
最後の「export」。
これは alias ではないけどね。ただ書いておかないと、「binl」の意味がわからんで。
「bin」は bin フォルダに移動
「binl」は bin/_local フォルダに移動
bin/_local フォルダは私専用の bin フォルダである。ちょいと作ったシェルスクリプトなどを放り込む。でもって、「binl」はそこにジャンプするための alias である。何でも「bin」に放り込むと、自作物がわからなくなるんでね。
最後の「export」は環境変数「PATH」の設定。bin/_local フォルダを PATH に設定することで、このフォルダの実行モジュールをいつでも使用できる。
以上!
他に便利な alias って、ありますやろか。