シェル(1)

					2007年05月11日
情報科学類 コンピュータリテラシ

                                       筑波大学 システム情報工学研究科 
                                       コンピュータサイエンス専攻, 電子・情報工学系
                                       新城 靖
                                       <yas@is.tsukuba.ac.jp>

このページは、次の URL にあります。
http://www.coins.tsukuba.ac.jp/~yas/coins/literacy-2007/2007-05-11
あるいは、次のページから手繰っていくこともできます。
http://www.coins.tsukuba.ac.jp/~yas/
http://www.cs.tsukuba.ac.jp/~yas/

■連絡事項

■復習

「*scratch*」バッファは、Emacs に対して Lisp と呼ばれる言語で命令を与え るための場所である。
;; This buffer is for notes you don't want to save, and for Lisp evaluation.
;; If you want to create a file, visit that file with C-x C-f,
;; then enter the text in that file's own buffer.

(+ 10 20)^J
30

■補足

削除できないファイルは、Unix では直接的には作れない。rm コマンドは、書 き込めないファイルを削除しようとすると「?」と問い合わせてかくるが、それ に y と入れると削除できてしまう。対策としては、ディレクトリを書き込み禁 止にする。The Unix Super Text 21.3.5節 参照

■シェル

コマンド・インタプリタともいう。

◆オペレーティング・システムの中の位置づけ

カーネルを取り囲んでいる殻。

図? アプリケーション、シェル、カーネル、ハードウェアがリング状になっている。

図? シェルの位置づけ(リング)

◆入出力

入力
プログラムが実行する時に受け取るデータ。 引数とは違い、ファイルからも受け取れる。
出力
プログラムの実行結果
シェルの機能として、画面を出力をファイルに保存したり、キーボードの代わ りにファイルに保存されたデータを与えたりできる。

◆標準入出力

Unix では、文字端末で動くプログラムは次の3種類を当てにしている。
標準入力 (stdin, standard input)
普通、キーボードにつながっている。
標準出力 (stdout, standard output)
普通、画面につながっている。
標準エラー出力 (stderr, standard error output)
普通、画面につながっている。
標準エラー出力は、標準出力がファイルに切り替えられた時でも、エラー・メッ セージが画面に表示されるために使われる。

◆標準入出力の切り替え(redirection リダイレクション)

シェルは、記号> があると、標準出力を画面から指定されたファ イルに切り替える。
% ls -l > file1 [←]
シェルは、記号> があると、標準入力をキーボードから指定され たファイルに切り替える。
% cat < file1 [←]
シェルは、記号| があると、次の動作を行う (パイプ(pipe)機能)。 例:
% ps aux | head [←]
<プロセスのリスト>
% []
ファイルを介しても可能だけれども、作成したファイルを消さなければならない。
% ps aux > file [←]
% head < file [←]
<プロセスのリスト>
% rm file [←]
パイプは、3つ以上のプロセスを結びつけることもできる。

◆標準エラーの役割

標準出力の切り替えを行ったとしても、標準エラーは画面に表示される。
% ps AUX > ps-result [←]
ps: X: no such user
% cat ps-result  [←]
% []
AUX は、間違い。ps コマンドは、エラー・メッセージを標準出力で はなく標準エラー出力に書き出す。

>&をつかうと、エラー・メッセージも含めてファイルに出 力することもできる。

% ps AUX >& ps-result [←]
% cat ps-result [←]
ps: X: no such user
% []
|&を使うと、エラー・メッセージも含めてパイプに出力す ることもできる。
% ps AUX |& head  [←]

◆ファイルの追記

標準出力では、ファイルを追加することができる。
>file
ファイルがなければ、まず空のファイルを作成する。ファイルがあれば、 file の内容を消して空にする。
>>file
ファイルが存在しても、消さずにその後ろに追加する。

■変数

変数(variable)
何かを覚えるためのもの。メモリを抽象化して名前をつけたもの。
変数名(variable name)
変数を区別するための名前
変数の値(value)
変数が覚えているもの
変数の値を参照(reference)
変数の値を取り出すこと
変数に値を代入(assignment)
変数名で変数を指定して、その値を変更する。変数に値をセットする。

◆シェル変数と環境変数

シェル変数
1つのシェル内でのみ有効。変数にリストが許される。
環境変数
子プロセスに引き継がれる。変数にリストが許されない。
操作 シェル変数 環境変数
代入 set name=value setenv name value
参照 $name $name
削除 unset name unsetenv name
一覧表示 set printenv
単独表示 echo $name echo $name
printenv name

◆子プロセスへの引き継ぎ

シェルは、コマンドを実行する時にプロセスを生成する。 シェルが親プロセス、コマンドのプロセスが子プロセスになる。

シェル変数は、子プロセスへ引き渡されないが、環境変数は、子プロセスへ引 き渡される。環境変数は、子プロセスの動作を変更するために用いる。

% date [←]
Wed May  9 23:03:07 JST 2007
% echo $TZ [←]
tcsh: TZ: Undefined variable.
% setenv TZ EST [←]
% date [←]
Wed May  9 09:03:20 EST 2007
% unsetenv TZ [←]
% date [←]
Wed May  9 23:03:25 JST 2007
% []
マニュアルの ENVIRONMENT VARIABLES に記述されている。
% man date [←]
DATE(1)                   BSD General Commands Manual                  DATE(1)

NAME
     date -- display or set date and time

SYNOPSIS
...
ENVIRONMENT VARIABLES
     The following environment variables affect the execution of date :

     TZ  The timezone to use when displaying dates.  See environ(7) for more
         information.
...

◆シェル変数のリスト

シェル変数 path は、空白で区切られた文字列の並びであるリスト を代入できる。
% set [←]
...
path    (/home1/prof/yas/bin /usr/local/bin /usr/local3/bin /bin 
/usr/X11R6/bin /sbin /usr/bin /usr/sbin /usr/local3/ImageMagick/bin)
...
% echo $path[1] [←]
/home1/prof/yas/bin
% echo $path[2] [←]
/usr/local/bin
% []

◆シェル変数と環境変数の対応

いくつかのシェル変数と環境変数は連動して変わる。
シェル変数 環境変数
path PATH
home HOME
term TERM
user USER

◆空白を含むシェル変数

シェル変数や環境変数で、空白を含んでいる(可能性がある)時には、ダブル クォート "" で括ると1単語として扱われる。
% set as="Application Support" [←]
% ls -ld ~/Library/$as [←]
ls: /home1/prof/yas/Library/Application: No such file or directory
ls: Support: No such file or directory
% ls -ld ~/Library/"$as" [←]
drwx------   11 yas  prof  374 May  9 00:27 /home1/prof/yas/Library/Application Support
% []

■メタキャラクタ

シェルが解釈し、コマンドには渡されない文字。 < > | $ { } ( ) [ ] & ; ^ " * ? ~ ' ` 空白 など。

コマンドの引数として渡したい時には、解釈を避ける(エスケープ(escape))た めの特殊な形式を使う。
形式 エスケープ対象 エスケープしないメタキャラクタ
\x \」の直後の一文字 なし
'str' 「'」でくくられた文字列 !
"str" 「"」でくくられた文字列 !, $
\は、ASCII 5c(16進)の文字。表示は、「\」か「¥」。 ダブルクォート "" の内部では、$ は解釈され、シェル変数や 環境変数の置き換えられる。シングルクォート ''では、$ は解釈さない。

% echo "$home" [←]
/home1/prof/yas
% echo '$home' [←]
$home
% []

■ファイル名置換

ファイル名の一部だけをキーボードから打ち込み、 残りの部分をシェルに探させる。

補完(completion)では、人間が目で確認するが、置き換えでは人間が確認する ことはない(見つからなければエラーになる)。

例:/usr/bin にある a で始まるファイルをすべて ls コマンドに引き渡したい。

% cd /usr/bin [←]
% ls a* [←]
a2p             ant             as              atq             automake-1.6
aclocal         appleping       asa             atrm            automator
aclocal-1.6     appletviewer    at              atstatus        autoreconf
addftinfo       apply           at_cho_prn      autoconf        autoscan
afmtodit        apropos         atlookup        autoheader      autoupdate
alias           ar              atos            autom4te        auval
amlint          arch            atprint         automake        awk
% []
パタン 意味
* 任意の文字列(空でもよい)(.で始まるものを除く)
? 任意の1文字
[str] strのなかの1文字。たとえば [aA] は、a か A とマッチする。「-」があると、ASCIIでその間の文字を意味する。たとえば [0-9](数字)や[a-zA-Z](アルファベット)がよく使われる。
{str1,str2,...} 「,」で区切られたパタン str1, str2, ... を順にファイル名置換した結果を並べたもの
~username ユーザusernameのホーム・ディレクトリの絶対パス。
~/ 自分自身のホーム・ディレクトリ
~ 自分自身のホーム・ディレクトリ
よく使われる形式
*
全てのファイル名。
*.txt
最後が .txt で終わるもの。
file[0-9]
数字で終わるファイル名
[a-z]*
英小文字で始まるファイル名
[Ww]work
work または Work

■ヒストリ機能

csh (tcsh) には、過去に打ち込んだコマンドを記憶して 再現する機能がある。

◆historyコマンド

過去に打ち込んだコマンドの一覧を表示する。
% history [←]
     2  22:43   cd public_html/coins/literacy-2007/2007-05-11
     3  22:43   ps
     4  22:43   ps x
...
   100  6:20    ls
   101  6:20    history
% []
シェル変数 history の個数だけ記憶している。

◆利用

tcshでは、Emacs の ^P / ^N で、ヒストリを さかのぼれる。

その他に、次のような方法もある。tcsh では、ほとんど使われない。編集機能 がない csh では有効であった。

!!
直前のコマンドの再実行
!10
10番のコマンドの実行
!-2
現在からさかのぼって2個前のコマンドの実行。!-1 は、!! と同じ。n
!str
先頭が str から始まるコマンドで、最も最新のもの。
!?str
文字列 str を含むコマンドで、最も最新のもの。
^old^new
直前のコマンドの old を new で置き換えたもの。打ち間違いの修正。
!*
直前のコマンドの引数(コマンド名以外)

■実習

実習時間中には、 以下の課題をできるだけ多く行いなさい。全部を行う必要はない。

★練習問題(100) 標準出力の切り替え

次のように、cal コマンドを実行して、>による標準出力の切り替 えが動作することを確認しなさい。
% cal [←]
      May 2007
 S  M Tu  W Th  F  S
       1  2  3  4  5
 6  7  8  9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

% cal > cal-2007-05 [←]
% ls -l cal-2007-05  [←]
-rw-r--r--   1 yas  prof  136 May  9 22:56 cal-2007-05
% cat cal-2007-05  [←]
      May 2007
 S  M Tu  W Th  F  S
       1  2  3  4  5
 6  7  8  9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

% []

★練習問題(101) bcコマンド

bc コマンドは、電卓のプログラムである。一般的には、キーボードから数式を 読み込み、結果を画面に表示する。これを動作させてみなさい。

動作例:

% bc [←]
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 
10+20[←]
30
^D
% []
bc コマンドは、プロンプトを表示しないが、ユーザが打ち込んだ数式を行単位 で計算して表示する。終了するには、入力の終わり(end of file) を意味する ^D (Control+D) を押す。コントロール・キーを押しながら、 D キーを押す。

次のような機能が利用できる。

詳しくは、man bc を見なさい。

★練習問題(102) 標準入力の切り替え

bc コマンドに対して、ファイルから数式を読み込ませて計算させなさい。 まず、テキスト・エディタ、または、cat 等で数式が含まれたファイルを作成 しなさい。以下は、cat で作成する例である。Emacs を利用して作成してもよ い。
% cat > expressions [←]
10+20[←]
2^40[←]
^D
% cat expressions  [←]
10+20
2^40
% []
次に作成した数式を、 キーボードの代わりにファイルからデータを読み込ませる。
% bc < expressions [←]
30
1099511627776
% []

★練習問題(103) パイプ

次のコマンドを実行して、パイプの動作を確認しなさい。

★練習問題(104) 追記

以下のような手順で、5月から7月のカレンダ含むファイルを作成しなさい。
% ls cal-2007-567 [←]
ls: cal-2007-567: No such file or directory
% cal 5 2007 > cal-2007-567 [←]
% cal 6 2007 >> cal-2007-567 [←]
% cal 7 2007 >> cal-2007-567 [←]
% cat cal-2007-567  [←]
      May 2007
 S  M Tu  W Th  F  S
       1  2  3  4  5
 6  7  8  9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

     June 2007
 S  M Tu  W Th  F  S
                1  2
 3  4  5  6  7  8  9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

     July 2007
 S  M Tu  W Th  F  S
 1  2  3  4  5  6  7
 8  9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

% []

★練習問題(105) ヒアドキュメント

シェルのヒアドキュメントの機能を使ってみなさい。 The Unix Super Text 126ページ 参照

★練習問題(106) tcsh補完機能

tcsh の補完機能を利用して、次のファイル名を打ちなさい。
 % ls /[]
ここまで打ったら、行末で^Dを押してみる。
 % ls /^D[]
すると、ls と同じような表示がなされる。
 % ls /
 Applications/ Network/      bin/          home2/        sbin/
 Desktop DB    System/       cores/        mach.sym      tmp@
 Desktop DF    Users/        dev/          mach@         usr/
 Developer/    Volumes/      etc@          mach_kernel   var@
 Library/      automount/    home1/        private/      
 % ls /[]
uから始まるものは、1個しかないので 「u」とうち、タブ・キーを打つ。タブ キーの代わりに (^I)でもよい。
 % ls /u^I[]
すると、sr/ が補完される。
 % ls /usr/[]
^D を打つ
 % ls /usr/^D[]
すると、/usr の内容が表示される。
 % ls /usr/
 X11R6/      epkg@       info/       libexec/    local@      share/
 bin/        include/    lib/        local3@     sbin/       standalone/
 % ls /usr/[]
「lo タブ」とうつと、
 % ls /usr/lo^I[]
次のように「cal/」が補完される。
 % ls /usr/local[]
同様に、^D と打つと、一覧が表示される。
 % ls /usr/local^D[]
 local3@ local@  
 % ls /usr/local
/b タブとうつ。
 % ls /usr/local/b^Iin/[]
「in/」が補完される。
 % ls /usr/local/bin/[]
ここで ^D を押しても数が多いので参考にならない。emくらいを入れ てタブを押す。
 % ls /usr/local/bin/em^I[]
ビープ音がなり、補完されない。 ^Dで様子をみる。
 % ls /usr/local/bin/em
 emacs*         emacsclient*   emcws-22.0.50* 
 % ls /usr/local/bin/em[]
a タブとうつ。
 % ls /usr/local/bin/ema^I[] 
「cs」が補完される。
% ls /usr/local/bin/emacs

★練習問題(107) tcsh補完機能(コマンド名)

tcsh には、ファイル名だけでなくコマンド名を補完する機能もある。コマンド ラインの先頭で補完機能を利用すると、ファイル名ではなくコマンド名が補完 される。このことを確かめなさい。この機能を使って、次のようなコマンド名 を打ちなさい。

★練習問題(108) psとlv

ps コマンドを使って、動作している全プロセスを表示しなさい。lv コマンド で1ページずつ表示しなさい。
% ps aux | lv [←]
lv については、手引き 2.2.10 参照

★練習問題(109) headとtail

head は、ファイルの先頭の 10 行(または、指定された行数) を表示する。 tail は、ファイルの末尾の 10行(または、指定された行数)を表示する。
% head /etc/services  [←]
#
# Network services, Internet style
#
# Note that it is presently the policy of IANA to assign a single well-known
# port number for both TCP and UDP; hence, most entries here have two entries
# even if the protocol doesn't support UDP operations.
#
# The latest IANA port assignments can be gotten from
#
#       http://www.iana.org/assignments/port-numbers
% tail /etc/services [←]
nimhub          48002/tcp    # Nimbus Hub
nimgtw          48003/udp    # Nimbus Gateway
nimgtw          48003/tcp    # Nimbus Gateway
#                           Carstein Seeberg 
#               48004-48555 Unassigned
com-bardac-dw   48556/udp    # com-bardac-dw
com-bardac-dw   48556/tcp    # com-bardac-dw
#                           Nicholas J Howes 
#               48557-49150 Unassigned 
#               49151       IANA Reserved
% []

★練習問題(110) grep

grep は、引数で指定された文字列を検索し、見つかった行だけを表示するプロ グラムである。
% grep root /etc/passwd  [←]
root:*:0:0:System Administrator:/var/root:/bin/sh
daemon:*:1:1:System Services:/var/root:/usr/bin/false
% cat /etc/passwd | grep root [←]
root:*:0:0:System Administrator:/var/root:/bin/sh
daemon:*:1:1:System Services:/var/root:/usr/bin/false
% []
ps aux, ps auxw の結果を grep で検索し、特定の文字列 (たとえば sh や自分のログイン名)が現れるものを表示しなさい。

grep コマンドでよく使うオプション

-v
その行が含まれないものを表示する
-i
大文字小文字を無視する
★練習問題(111) sort sort コマンドは、データを並べ替えるプログラムである。データは、引数で指 定されたファイル、または、標準入力から受け取る。結果は、標準出力、また は、-o で指定されたファイルに書き出すプログラムである。

1行に1つ、なにかの名前(人名、果物の名前)を含むファイルを作成しなさい。 sort コマンドを使って、並べ替えなさい。

ls -l の結果は、ファイル名の順番でソートされている。これをファイルの大 きさでソートしなさい。

sort コマンドでよく使うオプション

-n
数値として比較
-r
逆順でソート
-f
大文字小文字を区別しない
+番号
番号で指定されたフィールド以降をソートする。先頭は0。
-o filename
結果を filename に保存

★練習問題(112) uniq

uniq は、連続した行で重複したものを取り除くコマンドである。 sort の結果で重複したものを取り除くためによくつかわれる。 uniq -c で、数を数えることもできる。

★練習問題(113) lsとパイプ

ls コマンドは、画面に表示する時とパイプに表示する時で表示方法が異なる。 このことを確認しなさい。
% ls [←]
% ls | cat [←]
% ls | lv [←]
パイプに出力する時にも、画面と同様の表示をさせるには、-C オプションを付 ければよい。
% ls -C [←]
% ls -C | cat [←]
% ls -C | lv [←]

★練習問題(114) 既に設定されているシェル変数の表示

set コマンドを用いて、どのようなシェル変数が設定されているかをしらべな さい。
% set [←]

★練習問題(115) 1つのシェル変数の表示

echo コマンドを用いて、シェル変数の1つひとつ表示しなさい。 例:
% echo $home [←]
/home1/prof/yas
% []
その他に、path, shell, status, user 等のシェル変数を表示しなさい。

◆user変数

ps コマンドは、x オプションの他に U オプションもあり、特定のユーザのプ ロセスを表示することができる。U オプションで自分のプロセスを表示する 時に、$user 変数を利用できる。このことを確認しなさい。
% ps U $user [←]
この方法と U に自分のログイン名を打つ方法、x オプションを使う方法を比較 しなさい。出力結果や打ちやすさ覚えやすさを比較しなさい。
% ps U ログイン名 [←]
% ps x [←]

◆シェル変数の操作

シェル変数を使って、長いファイル名やディレクトリ名を簡単に打ちなさい。
% set u=/Applications/Utilities [←]
% echo $u [←]
/Applications/Utilities
% ls $u [←]
Activity Monitor.app            Java
AirPort Admin Utility.app       Keychain Access.app
AirPort Setup Assistant.app     NetInfo Manager.app
Audio MIDI Setup.app            Network Utility.app
Bluetooth File Exchange.app     ODBC Administrator.app
ColorSync Utility.app           Print Center.app
Console.app                     Printer Setup Utility.app
DigitalColor Meter.app          System Profiler.app
Directory Access.app            Terminal.app
Disk Utility.app                VoiceOver Utility.app
Grab.app                        X11.app
Grapher.app                     iPod Software Updater.localized
Installer.app
% []

★練習問題(116) 環境変数一覧表示

printenv コマンドを用いて、どのような環境変数が設定されているかをしらべ なさい。
% printenv [←]

★練習問題(117) 環境変数の一部の表示

printenv コマンド、または、echo コマンドを使って環境変数を1つだけ表示 しなさい。

例:

% printenv HOME [←]
% echo $HOME [←]
その他に、SHELL, TERM, NNTPSERVER, PRINTER 等の値を表示しなさい。

★練習問題(118) pathとPATH

シェル変数 path (環境変数 PATH) には、コマンドを検索するためのディレク トリ名が含まれている。どのようなディレクトリが含まれているか調べなさい。

% echo $path [←]
% echo $PATH [←]
% ls -ld $path [←]
利用可能なコマンドの一覧を表示しなさい。
% ls $path > commands [←]
% lv commands [←]
% ls $path | lv [←]
存在しないディレクトリについてのエラー・メッセージは、標準エラー出力に 出力され、ファイルやパイプには現れない。

★練習問題(119) historyコマンド

history コマンドで、どのようなコマンドを打ち込んできたかを調べなさい。
% history [←]
次の方法で再実行してみないさい。

★練習問題(120) cutコマンド

cut コマンドを使うと、行の一部を文字単位で切り出すことができる。
% ps uxw [←]
USER   PID %CPU %MEM      VSZ    RSS  TT  STAT STARTED      TIME COMMAND
yas  12144   0.0 -0.0    27396    520  p0  S     8:38AM   0:00.17 grotty
yas  10897   0.0 -0.1    31872   1148  p0  Ss   10:42PM   0:02.05 -tcsh
yas  11759   0.0 -0.1    31896   1200  p1  Ss+   6:22AM   0:00.50 -csh
yas  12137   0.0 -0.0    27292    436  p0  S     8:38AM   0:00.04 man tcsh
yas  12138   0.0 -0.0    27804    556  p0  S     8:38AM   0:00.01 sh -c (cd /usr/share/man && /usr/bin/tbl /usr/share/man/man1/tcsh.
yas  12139   0.0 -0.0    27804    388  p0  S     8:38AM   0:00.01 sh -c (cd /usr/share/man && /usr/bin/tbl /usr/share/man/man1/tcsh.
yas  12140   0.0 -0.0    27360    392  p0  S     8:38AM   0:00.02 /usr/bin/tbl /usr/share/man/man1/tcsh.1
yas  12141   0.0 -0.0    27320    388  p0  S     8:38AM   0:00.01 /usr/bin/groff -Wall -mtty-char -Tascii -mandoc -c
yas  12142   0.0 -0.0    27344    612  p0  S     8:38AM   0:00.10 /usr/bin/less -is
yas  12143   0.0 -0.1    27800   1388  p0  S     8:38AM   0:00.38 troff -Wall -mtty-char -mandoc -c -Tascii
yas  10895   0.0 -0.0    30716    600  ??  S    10:42PM   0:01.79 /usr/sbin/sshd -i
% ps uxw | cut -c 1-10,65- [←]
USER   PID COMMAND
yas  108976 -tcsh
yas  108959 /usr/sbin/sshd -i
yas  121374 man tcsh
yas  121381 sh -c (cd /usr/share/man && /usr/bin/tbl /usr/share/man/man1/tcsh.
yas  121391 sh -c (cd /usr/share/man && /usr/bin/tbl /usr/share/man/man1/tcsh.
yas  121402 /usr/bin/tbl /usr/share/man/man1/tcsh.1
yas  121411 /usr/bin/groff -Wall -mtty-char -Tascii -mandoc -c
yas  121420 /usr/bin/less -is
yas  121438 troff -Wall -mtty-char -mandoc -c -Tascii
yas  121447 grotty
yas  122116 cut -c 1-10
yas  117590 -csh
% []

★練習問題(121) .parentlockの観察

Firefox 実行しなさい。そして、.parentlock というファイルが作成されるこ とを観察しなさい。この時、シェルのファイル名置換機能を使いなさい。
% ls -l ~/Library/*/Firefox/Profiles/*/.parentlock [←]
% cd ~/Library/*/Firefox/Profiles/* [←]
% pwd [←]
% ls -l .parentlock [←]

★練習問題(122) 長い名前のアプリケーションの実行

/Applications/Calculator.app は、電卓のプログラムである。これをシェルか ら実行するためには、次のように open コマンドに対してパス名を与えればよい。
% open /Applications/Calculator.app [←]
これを、次のような方法を利用して、長い文字列をキーボードから打たないで 実行しなさい。

★練習問題(123) シェル変数 prompt

シェル変数 prompt を表示しなさい。
% echo "$prompt" [←]
この時、ダブルクォート "" を付けないとうまく表示できないことがある。この理由を考えなさい。
% echo $prompt [←]
シェル変数 prompt は、シェルのプロンプトを保持している。 これを変更してみなさい。

マニュアル man tcsh で、prompt 変数の中で次のような表現がどのような意味 を持っているかを調べなさい。

man tcsh の中では、ページャの / による検索が便利である。

◆課題8 シェル

締め切りは、2006年5月15日火曜日 23:59:59 とする。

以下の問題について、問題、および、回答をテキスト・ファイルに記述し、 レポート提出ページから提出しなさい。 端末の表示(コマンドの実行結果)は、コピー&ペースト等の機能を使って提出 するファイルに含めなさい。

(1) シェルのファイル名置換機能を使って /usr/bin にある次のようなファイ ルをすべて表示しなさい。結果は、ls または echo コマンドで表示し、コマン ドラインを含めてその結果をレポートに含めなさい。

(2) echo コマンドを使って、次の文字列を画面に表示しなさい。

注意:これは、メタキャラクタをエスケープする課題である。単に echo コマ ンドに対してこのような文字列を与えればよいということでない。

(3) 次のファイル名(ディレクトリ名も含めたすべて)を、シェル変数やファイ ル名置換を使って短く表現しなさい。最後に ls -ld で表示しなさい。

(4) tcsh の補完機能を使って、次のファイル名を打ち込み、ls -ld で表示し なさい。この時、どのようなキー操作を行ったかを書きなさい。

(5) [加点] /usr/bin にあるファイルのうち、ファイルファイルのサイズが大 きいもの5 個を表示する方法を示しなさい。

最終的に次のような結果が得られるはずである。

% <回答> [←]
 30703212 emacs-21.2.1
 30703212 emacs
  3976096 php
  2455700 jikes
  1850988 emacs-undumped
% []

(7) The Unix Supr Text の 28.6 節、および、28.8節を読みなさい。そして、 HTML で記述できる文書の構造について3-10行でまとめなさい。

(8) The Unix Supr Text の 28.6 節、および、28.8節を読みなさい。そして、 アンカーについて3-10行でまとめなさい。


Last updated: 2007/06/21 17:24:00
Yasushi Shinjo / <yas@is.tsukuba.ac.jp>