2006年06月23日 コンピュータリテラシ 筑波大学 電子・情報工学系 コンピュータサイエンス専攻 新城 靖 <yas@is.tsukuba.ac.jp>
このページは、次の URL にあります。
http://www.coins.tsukuba.ac.jp/~yas/coins/literacy-2006/2006-06-23
あるいは、次のページから手繰っていくこともできます。
http://www.coins.tsukuba.ac.jp/~yas/
http://www.cs.tsukuba.ac.jp/~yas/
例:ls -l の代わりに ll というコマンドを使えるようにする。
% ls -lalias の機能total 80 -rw-r--r-- 1 yas prof 281 Jun 22 13:14 Imakefile -rw-r--r-- 1 yas prof 1072 Jun 22 13:31 Makefile -rw-r--r-- 1 yas prof 14044 Jun 22 13:31 index.html -rw-r--r-- 1 yas prof 10681 Jun 22 13:30 index.html-m4 -rw-r--r-- 1 yas prof 10129 Jun 22 13:14 index.html-m4.~1~ % ll
tcsh: ll: Command not found. % alias ll ls -l
% ll
total 80 -rw-r--r-- 1 yas prof 281 Jun 22 13:14 Imakefile -rw-r--r-- 1 yas prof 1072 Jun 22 13:31 Makefile -rw-r--r-- 1 yas prof 14044 Jun 22 13:31 index.html -rw-r--r-- 1 yas prof 10681 Jun 22 13:30 index.html-m4 -rw-r--r-- 1 yas prof 10129 Jun 22 13:14 index.html-m4.~1~ %
![]()
% alias![]()
% alias ll![]()
% unalias ll![]()
毎回手作業で定義したくないなら、ファイル~/.cshrc
に定義を含める
とよい。tcsh は、実行されると、まずそのファイルに含まれているコマンドを
実行する。
例:引数で与えられたディレクトリを ls -l -t で調べて、そのうちの先頭の 10行だけを表示する。
% alias new10 'ls -l -t \!* | head'「!*」と書きたいが、単に「!」を使うと、ヒストリが展開されてしまうので、 「\!」と書く。また、「*」がファイル名に展開されないように、 シングルクォート「''」で括る。% new10 /bin
total 8824 -rwxr-xr-x 1 root wheel 40408 Feb 19 18:09 launchctl -r-xr-xr-x 1 root wheel 896720 Aug 23 2005 ksh -rwxr-xr-x 2 root wheel 491340 Aug 23 2005 zsh -rwxr-xr-x 2 root wheel 491340 Aug 23 2005 zsh-4.2.3 -r-sr-xr-x 1 root wheel 24736 Aug 22 2005 rcp -r-xr-xr-x 1 root wheel 14440 Aug 22 2005 domainname -r-xr-xr-x 2 root wheel 18104 Aug 22 2005 [ -r-xr-xr-x 2 root wheel 18104 Aug 22 2005 test -r-xr-xr-x 1 root wheel 13964 Aug 22 2005 sleep %
![]()
「\!:1」のように、引数を区別する機能もある。
alias では、パイプ「|」もよく使われる。
% which mdalias を無効にして、元のコマンドを使いたい時には、コマンド名の 前に「\」をつける。または、コマンド名をフルパスで打つ。/usr/bin/md % man md
md(1) BSD General Commands Manual md(1) NAME md -- process raw dependency files produced by cpp -MD SYNOPSIS md [-d] [-f] [-m makefile] [-u makefile] [-o outputfile] [-v] [-x] [-D c|d|m|o|t|D] ... % alias md mkdir
% which md
md: aliased to mkdir %
![]()
% mdusage: mkdir [-pv] [-m mode] directory ... % \md
usage: md -f -Dcdmot -m makefile -o outputfile -v
... % /usr/bin/md usage: md -f -Dcdmot -m makefile -o outputfile -v
... % ![]()
% alias ls ls -Fしかし、行の先頭以外では、Alias loop というエラーになる。![]()
% alias ls 'dirs; ls \!*'この時には、alias を展開させないために、コマンド名の前に「\」を使う。% ls
tcsh: Alias loop. %
![]()
% alias ls 'dirs; \ls \!*'コマンド名をフルパスで書く方法もある。% ls
~/public_html/coins/literacy-2006/2006-06-23 Imakefile index.html index.html-m4.~1~ Makefile index.html-m4 %
![]()
% alias ls 'dirs; /bin/ls \!*'% ls
~/public_html/coins/literacy-2006/2006-06-23 Imakefile index.html index.html-m4.~1~ Makefile index.html-m4 %
![]()
tcsh は、csh に terminal での編集機能や補完機能を付けたもの。シェル・ スクリプトを書く時には、多くのシステムで備わっている /bin/csh を使うこ とが多い。(csh はあるが tcsh がないシステムもある。)
% open /usr/local3/Applications/Gimp.apptcsh の機能で、^p (Control+P) で1行戻して、echo でファイルに落とす。 「|」があれば、 「'シングルクォート'」 でくくる。csh の引数にファイル名を与えて実行できる。(^p で1行もどす。^a で、行頭に移動して echo と打ち、^e して > run-gimp と打つ) % echo open /usr/local3/Applications/Gimp.app > run-gimp
% csh run-gimp
%
![]()
いちいち csh と打たないでもいいようにするには、chmod +x する。
% chmod +x run-gimpただし、この場合、csh ではなくて、sh (/bin/sh)で実行される。sh と csh は、文法に共通性もあるので、問題ない場合も多い。問題がある場合、どうし ても tcsh で実行させたい場合、テキスト・エディタで、行の先頭に 「#!/bin/csh」と書き、csh で実行させる。% ./run-gimp
%
![]()
#!/bin/csh open /usr/local3/Applications/Gimp.app
数行にわたるものの場合、history コマンドを使う。
% history(ヒストリの表示して、何行必要か数える。history コマンド2回分多くtailコマンドに与える。) % history | tail -5 > run
% emacs run
(最後の history コマンドや 番号、時刻などをテキスト・エディタで削る。)
「#!/bin/csh -f」と、-f を付けた方が、~/.cshrc を読み込まないので起動 が速い。ただし、~/.cshrc での設定(aliasなど)は効かないことがある。環境 変数は、今の状態が引き継がれる(~/.cshrc を読み込ませない方が都合がよい ことが多い)。
% csh -f -x run![]()
-n オプションを付けて実行して、構文のチェックだけ行う。
シェルに1行ずつ与えて実行してみる。
~/.cshrc
などを設定して、~/bin
をpath シェル変数(PATH
環境変数)に含まれるようにすることを奨める。そして自分で作成したプログ
ラムやスクリプトを、~/bin
に置くと./
などで実行する必
要はない。
ただし、ファイルを作成し、chmod +x した後で、1度だけ rehash コマンド を打つ必要がある。rehash と打たれるまで、tcsh は、コマンドが追加された ことに気がつかない。
% emacs ~/bin/newcommandchmod も rehash も、シェルごとに1度だけやればよい。端末をたくさん開い ていた時には、作成したスクリプトをすぐに使いたい時にはそれぞれのシェル でrehash コマンドを実行する。% chmod +x ~/bin/newcommand
% rehash
% newcommand
% emacs ~/bin/newcommand
% newcommand
% emacs ~/bin/newcommand
% newcommand
%
![]()
rehash の意味は、ハッシュ表を作り直すことである。path にあるコマンドは、 csh は、コマンドを打つたびに探すのではなくてハッシュ表に入れてそれを検 索している。
rehash は、新しいシェルが実行される時には自動的に行われている。次にロ グインした時、chmod +x した後に開いた端末ではrehash を実行する必要はな い。
実際には、Unix オリジナルの sh ではなく、bash (GNU Bourne-Again SHell) という高機能のプログラムが広く使われている。
大量の情報を保存するには、木構造を使うしかない。 しかし、木構造だけではうまくいかない。
図13 こうもりの分類(1)
図14 こうもりの分類(2)
木構造は、ファイルを整理するのに非常に強力な構造である。しかし、それだ けでは、ファイルを整理するには不都合が起きる。それを解消するために、次 のような名前で呼ばれる仕組みが用意されている。
注意:csh の alias とファイル名の alias (Macintosh) は、まったくの別物。
図15 こうもりの分類(別名つき)
中間管理職の意味==横方向に情報が流れない。
木構造でしか情報が流れないような組織は、潰れる。木構造を補う意味で、会 社組織では、裏チャネルや同期会が重要となる。
木構造を補う方法として、 ハイパーテキスト を使うことがある。
例:cc と gcc-4.0
% ls -l /usr/bin/ccシンボリック・リンクは、ls -l で見ると、右端に l (小文字の L) と表示さ れる。 ファイル /usr/bin/cc を参照すると、gcc-4.0 (/usr/binにある)が使われる。lrwxr-xr-x 1 root wheel 7 Jun 6 17:31 /usr/bin/cc -> gcc-4.0 %
![]()
シンボリック・リンクを作成するには、ln -s コマンドを使う。
% ln -s oldname newnameこの結果、![]()
newname
でファイルを参照すると、
oldname
というファイルが使われる。(このファイルは、
newname
と oldname
の2つの名前を持つ。)
シンボリック・リンクとエイリアスの違い
そのプログラムが、一般のプログラム(機械語)かシェル・スクリプトかは、 file コマンドを使うと調べることができる。
% file /usr/bin/apropos/usr/bin/apropos: Bourne shell script text executable % ls -l /usr/bin/apropos
-rwxr-xr-x 1 root wheel 2408 Aug 22 2005 /usr/bin/apropos % lv /usr/bin/apropos
%
![]()
(1) tcsh のエイリアス、または、シェル・スクリプトを作成しなさい。作成す る目的としては、コンピュータ・リテラシで用いたプログラムを簡単に実行す ることとする。どのプログラムを対象にしたのか、また、作成したエイリアス、 または、シェル・スクリプトをレポートに報告しなさい。
エイリアスは、~/.cshrc に保存しなさい。シェル・スクリプトは、ディレクト リ ~/bin 以下に起きなさい。
(2) ファイルに対するシンボリック・リンクを作成しなさい。作成する目的と しては、よく使うプログラムを簡単に実行できるようにすることや、自分自身 のファイルを整理する時に、木構造ではうまく行かない時にそれを補うために 使う。
(3) fj.unix.shells に 2006年6月9日から6月13日にかけて「いつも使う shell script」という Subject: を持つ記事を読みなさい。そして、その中から有用 だと思うものを1つ以上選び、そのシェル・スクリプトを自分で書きなさい(加 点)。