eil20090713

情報リテラシー実習
Exercise in Information Literacy
シェル
§11 bash入門
§39 bashプログラミング
§40 tcsh
§41 いろいろなシェル
カーネル(kernel)とユーザ
○UNIX(Linux)の核となる部分,つまりハー
・ドウェアを直接制御している部分はカーネル
・(kernel)と呼ばれ,マルチタスクやファイ
・ルシステム,仮想記憶,入出力などの機能を
・司っている
○しかし,kernelは人間と意思を疎通する機能
・を持っていない
○そこで,kernelとユーザの橋渡しをする通訳
・のような存在が必要となる
シェルとは
p. 119
○UNIX(Linux)ではシェル(shell),
・WindowsではExplorer,Mac OSでは
・Finderと呼ばれるプログラム
○shellはターミナル上で実行されるので,ター
・ミナルを起動しないと使用できない
ハードウエア
操作・命令
操作・命令
shell
kernel
ユーザ
シェルの役割
p. 119
シェルの役割は大きく分けて
①ユーザインタフェイス(コマンドインタプリ
・タ)として
・○プロンプトの表示
・○コマンドの読み込み
・○コマンドの前処理
・○コマンドの実行
②環境設定の道具
③プログラミング言語
代表的なシェル
p. 120
主要なシェルは以下のようなものがある
①sh(Bourne shell):現在利用できる最も
・古いシェル。AT&Tのベル研究所で開発され,
・開発者の1人であるSteven Bourneの名にち
・なんでいる。ほとんどのUNIXで利用できる
・標準的なシェル。
代表的なシェル
p. 120
主要なシェルは以下のようなものがある
②csh(C shell):UCBのWilliam Joyが中心
・になって開発したシェルで,C言語に似た構
・文を持つことから名づけられた.shに比べ,
・ヒストリー機能,ジョブ機能,エイリアスな
・どの機能が付加されており,対話形式で使用
・するのに便利
代表的なシェル
p. 120
主要なシェルは以下のようなものがある
③bash(Bourne-again shell): MITの
・Brian Foxが作成したシェル.shにおいて貧
・弱であった,ユーザーインターフェースとし
・ての機能を強化するために,ヒストリー機能
・やエイリアスなどが追加されている
④その他:cshの拡張版であるtcsh(TENEX
・C shell)やzsh(Z shell),ksh(Korn
・shell)などがある
利用するシェルの確認と変更方法
○現在,自分がどのシェルを使っているのかを
・調べる方法
$ ps c $$
○シェルの変更方法
$ tcsh
・シェルの名前をコマンド名として入力する.
・ただし,システムにインストールされている
・必要がある.このシェルを終了するには
% exit
シェル変数と環境変数
pp. 127~131
○シェル変数:シェルの動作を設定するために
・使用される
○環境変数:コマンドの実行環境を設定するた
・めに使用される
○コマンドを実行する際にはシェルの子プロセ
・スが起動される.このとき,環境変数は子プ
・ロセスに渡されるが,シェル変数は渡されな
・い
シェル変数の設定と参照
○シェル変数の設定(例)
$ a=kumamoto
% set a=kumamoto
○シェル変数の値の表示(例)
$ echo $a
○シェル変数とその値の一覧表示
$ set
○シェル変数の削除(例)
$ unset a
pp. 127~131
シェル変数の利用
pp. 127~131
次のようにファイルを作成・実行する
$ cat << 'EOF' > testname
#!/bin/bash
myname=Igasaki
echo "My name is $myname."
EOF
$ chmod +x testname
$ ./testname
My name is Igasaki.
環境変数の設定と参照
○環境変数の設定(例)
$ export A=KUMAMOTO
% setenv A=KUMAMOTO
○環境変数の値の表示(例)
$ echo $A
○環境変数とその値の一覧表示
$ printenv
○シェル変数の削除(例)
$ unset A
% unsetenv A
pp. 127~131
環境変数の例
○
○
○
○
○
○
○
○
PATH
HOME
USER
PAGER
EDITOR
LANG
DISPLAY
MANPATH
pp. 127~131
コマンドサーチパス
ホームディレクトリのパス名
ユーザ名
ページャの指定
テキストエディタの指定
使用する言語の指定
表示ディスプレイの指定
Manコマンドのリファレンスマ
ニュアルのディレクトリ
本日の学習項目
○whichコマンド/whereisコマンド
○キー入力の補完機能
○ワイルドカードを使ったファイルの指定
○~(チルダ)の意味とその利用
○履歴(history)の利用
○jobの管理
○コマンドの別名(alias)の利用
whichコマンド/whereisコマンド
○あるコマンドを指定した場合に,実際にはど
・このディレクトリ(コマンドサーチパス)に
・あるコマンドが実行されるのかを確認する場
・合,whichコマンドを利用
$ which vi
/bin/vi
whichコマンド/whereisコマンド
○指定したコマンドがどのディレクトリにある
・かを知るためには,whereisコマンドを利用.
・コマンドサーチパスよりも広い範囲で検索
$ whereis vi
vi: /bin/vi /usr/share/man/man
1p/vi.1p.gz
キー入力の補完機能の利用
pp. 136~137
○多くのシェルでは,コマンドラインの入力の
・際に補完機能があり,ファイル名等を完全な
・形でキー入力する必要はない。途中まで入力
・ して補完キーを入力する
・○TABキー:bashやtcshなどにおける補完
・・キー
・○ESCキー:cshにおける補完キー(set
・・filecコマンドの実行後,利用できる)
ワイルドカード
pp. 133~136
○カレントディレクトリにある「file」で始まる
・ファイルだけ「test」というディレクトリに
・移動したい
$ ls
file1 file10 file2 prog1.c pro
g2.c test/
$ mv file1 test/
$ mv file10 test/
$ mv file2 test/
ワイルドカード
pp. 133~136
$ ls
file1 file10 file2 prog1.c pro
g2.c
$ mv file1 test/
$ mv file10 test/
$ mv file2 test/
・と3回も似たようなコマンドを実行するのは
・面倒くさい.こんなときに,一度にファイル
・を指定するのがワイルドカード
ワイルドカード
pp. 133~136
○ホームディレクトリの下に練習用のディレク
・トリ「test」を作成・移動して,中身が空の
・ファイルを5つ作成する
$ mkdir test
$ cd test
$ pwd
/st/c2009/c9876/test
$ touch file1 file2 file10 pro
g1.c prog2.c
ワイルドカード
pp. 133~136
○ワイルドカードは,複数のファイルの中から,
・特定の文字列が含まれるファイルのみを抜き
・出したり,効率よく指定したい場合に有効
*
0文字以上の任意の文字列
?
任意の1文字
[] []内に指定した1文字
ハイフン(-)を使って範囲を指定可
{} {}内に指定した文字列
項目をカンマ(,)で区切って並べる
ワイルドカード
pp. 133~136
$ ls
file1 file10 file2 prog1.c pro
g2.c
○名前が「file」で始まるファイルのみを表示
$ ls file*
file1 file10 file2
○すべてのファイルを表示
$ ls *
file1 file10 file2 prog1.c pro
g2.c
ワイルドカード
pp. 133~136
$ ls
file1 file10 file2 prog1.c pro
g2.c
○名前が「file1」で始まるファイルのみを表示
$ ls file1*
file1 file10
○名前が「.c」で終わるファイルのみを表示
$ ls *.c
prog1.c prog2.c
ワイルドカード
pp. 133~136
$ ls
file1 file10 file2 prog1.c pro
g2.c
○名前が「file」で始まり,残りが1文字
$ ls file?
file1 file2
○名前が6文字のファイルを表示
$ ls ??????
file10
ワイルドカード
pp. 133~136
$ ls
file1 file10 file2 prog1.c pro
g2.c
○名前が「file」で始まり,残りの1文字が「1」
・か「2」のファイルを表示
$ ls file[12]
file1 file2
○名前が「file1」か「prog1」で始まる
$ ls {file1,prog1}*
file1 file10 prog1
ワイルドカード
pp. 133~136
使用上の注意
○ワイルドカードの意味をしっかり理解する
$ rm *
※実行禁止
・上記のコマンドを実行するとどうなるか?
○空白に注意をはらう
$ rm file*
$ rm file *
※実行禁止
・上記の2つのコマンドはまったく意味が違う
ワイルドカード
pp. 133~136
使用上の注意
○自分のホームディレクトリに,ドット(.)で
・始まるemacsの設定ファイルの一覧を表示す
・るには,どのようなコマンドを実行すればよ
・いか?
○自分のホームディレクトリにある,ドット
・(.)で始まるファイルの一覧を詳細表示する
・には,どのようなコマンドを実行すればよい
・か?
~(チルダ)の利用
○~(チルダ)はホームディレクトリを表すの
・に利用される
$ echo ~
/staff/c2009/c9876
○自分のホームディレクトリにある「file1」と
・いうファイルは「~/file1」で指定可能
○~は他のユーザのホームディレクトリを示す
・にも利用可能.igaさんのホームディレクトリ
・を指定する場合には,「~iga」のようにする
~(チルダ)の利用
○igaさんのホームディレクトリにあるファイル
・「file10」を自分のホームディレクトリに
・自分のホームディレクトリにある「file1」と
・「file100」という名前でコピーしたい場合
$ cp ~iga/file10 ~/file100
$ cp /staff/iga/file10 /satff/
iga/file100
$ cd ; cp /staff/iga/file10 ./
file100
history機能の利用
pp. 140~144
○過去に実行したコマンドを記録し,それらを
・再利用する機能
$ history
44 man bash
45 emac
46 emacs
47 history
48 history
49 history
history機能の利用
pp. 140~144
○コマンドを再利用するには
!!
直前のコマンドを実行
!n
ヒストリリスト中の番号nで示
されたコマンドを実行
!-m
m個前のコマンドを実行
!str
strで始まるコマンドで最近のもの
を実行
^str1^str2
直前のコマンドのstr1をstr2に変
更して実行
history機能の利用
pp. 140~144
○直前のコマンドを実行する
$ !!
○n番目のコマンドを実行する
$ !n
○「ca」で始まる最新のコマンドを実行
$ cal 7 2009
$ !ca
cal 7 2009
...
history機能の利用
pp. 140~144
○直前のコマンドの文字列2009を1991に変
・更して実行
$ ^2009^1991
cal 7 1991
...
job制御
pp. 137~140
○ユーザがコンピュータに行わせる仕事の単位
○bashには,1つのシェルで複数のジョブを切
・り替えながら,並行して作業を行う機能(ジ
・ョブ制御)があり,ジョブには
・○フォアグランドジョブ
・○バックグランドジョブ
・がある.この2つのジョブを制御するために,
・「bg」「jobs」「&」コマンドを使用する.
job制御
pp. 137~140
○ターミナル(シェル)で別のウィンドウを作
・成する
$ xterm &
$ xclock
・もとのシェルは新しいウィンドウ(xterm)
・をフォアグランドジョブとして実行し,時計
・を表示するコマンド(xclock)をバックグラ
・ンドジョブとして実行.xclockを終了するま
・で他のコマンドを実行できない状態
job制御
pp. 137~140
○フォアグランドジョブの停止
^Z
・「C-z」を入力
○フォアグランドジョブとバックグランドジョ
・ブを表示
$ jobs
[1]- Running xterm &
[2]+ Stopped xclock
・[]内はジョブ番号
job制御
pp. 137~140
○フォアグランドジョブとバックグランドジョ
・ブを切り替える
$ bg %2
[2]+ xclock &
○バックグランドジョブとフォアグランドジョ
・ブを切り替える
$ fg %1
xterm
alias機能の利用
pp. 144~147
○コマンドに別名を定義することができる
$ alias ls='ls -al’
% alias ls 'ls -al’
・設定後は「ls」は「ls –al」を意味することと
・なる
○現在のエイリアスの状況を知る
$ alias
○現在のエイリアスを取り消す
$ unalias ls