コンピュータを構成している機器部品(CPU,メモリ,キーボード,ディスクドライブなど)をハードウエアといい,これを操作制御するための基本ソフトウエア をオペレーティングシステム (operating system)という(単にOSともいうことがある). コンピュータという金物(ハードウエア)とそれを制御操作するOSとを区別していることに注意する. たとえば,まったく同じDOS/Vコンピュータであっても,容易に入手できるOSには,次のものがある.
演習:オブジェクト指向とは何かを調べてみよ.
UNIXでは,キーボードから(特定の)文字列を入力することによって対応するプログラムを起動する. より正確にいえば,入力されたコマンド 文字列は,直接UNIXの核心部(カーネル:kernel)に渡されるのではなく,シェル(shell)と呼ばれるコマンドを解釈する(インタープリート interpret)プログラムに渡される.
シェルの目的は,入力コマンドを読んで,これを解釈してUNIXカーネルとの仲介をすることである. シェルは
UNIXを使ってコンピュータを操作するためには,まずシェルのユーザーインターフェイス機能を知らなければならない.
UNIXは,他のOSとは異なり,ユーザーインターフェイスに位置するシェルは単なるプログラムであるために,さまざまな改良や機能を加えることが可能である. 換言すれば,シェルの使いやすさがUNIXの使いやすさを左右するという意味でシェルは極めて重要である.
シェルには,標準の
コマンドまたはファイル名の頭の何文字かを入力して
たとえば,現在居るディレクトリ内にファイル
さらに,頭の文字が同じファイル名
シェルがプログラムであれば,UNIXファイルシステムのどこかに格納されているはずである.
一般に実行可能プログラム(executable program)は,テキストファイルではなくバイナリファイルと呼ぶ.
バイナリプログラムであるコマンドは,UNIXでは
コマンドがどのディレクトリにあるかを知るためには
UNIXでは,ファイル名として事実上いくらでも長い名前を付けることができる.
ファイル名とファイル内容ができるだけ対応している適切なファイル名を付けることは,あらゆるコンピュータ利用において最も基本的で重要な情報処理技法である.
この考えを徹底するとファイル名が長くなって,キーボード入力がわずらわしくなる(このときには,シェルの補完機能を利用する).
また,先頭文字が同じファイル名が増える結果となる.
このようなとき,ファイル名を楽に指定したり,同じようなファイル名を持つファイル群を取り出すことができる.
これをシェルのファイル名展開またはファイル名置換という.
コマンドはファイル名展開をした後に起動されることに注意.
ファイル名展開を利用するためには,表の記号を使って,コマンドに渡すファイル名としてファイルパターンを指定する
(ファイル名に,これらの記号を含ませることは可能であるが,"パターン"を指定するときに工夫を要するので,これらの記号をファイル名には使わないこと).
たとえば,
"
また,"
同様に,LaTeXのコンパイル時に作成される拡張子
以下の操作は,操作結果をよく理解してからコマンドおよびファイル名展開を利用せよ.
ファイル内容を確かめた上で,不要なファイルを削除してみよ.
削除コマンドを使った後は,必ずその結果を
たとえば,"
コンピュータは,一言でいってしまえば,データを与えるとそれを処理し結果を吐き出すという出入口を備えた機械である.
データを食って"排泄"するという意味では,コンピュータは生物と何ら変わらない.
UNIX(など多くのオペレーティングシステム)では,データの出入に関して標準的な装置を設定している.
これを標準入出力装置(Standard Unput/Output Device)といい,現在では次の表のように割り当てられている
UNIXのシェルがコマンドの入力や出力を切り替えるI/Oリダイレクション機能を持っている.
UNIXでは,データの入力(書込)を標準とは別のファイル(装置)に,または標準とは別のファイル(装置)からデータを出力(書出)することができる.
これを入出力のリダイレクション(redirection)といい,UNIXコマンドに記号『
リダイレクション機能を使って,コマンドの実行結果をファイルに出力したり,コマンドにファイルから入力したり,次の処理のために使うことができる.
一般のUNIX利用者のレベルでは,I/Oリダイレクションと後で説明するパイプを組み合わせて目的とする処理を行なうことがUNIX操作の最重要事項である.
演習:以下の説明にあわせて,実際に確かめてみよ.
リダイレクションは記号『
たとえば,現在いるディレクトリのファイル・ディレクトリの一覧結果を,たとえばファイル
次のように,たとえばディレクトリ
次の例は,
ホームディレクトリおよび,その中にあるすべてのディレクトリ内のファイルを
ホームディレクトリを含むすべてのディレクトリ内のsh(Bシェル: Bourne shell),csh(Cシェル)さらに改良した:
シェルがプログラムに過ぎないことは,これがコマンドとして幾種類も用意されていることからもわかる.
tcshなどがあり,本学ではtcshを使う設定にしている.
補完機能--これは便利
cshやtcshには,キーボードからコマンドやファイル名を入力するときにそれを補完(completion)してくれる機能がある.
chではファイル名を,tcshではさらにコマンドを補完してくれる.
Tabキーを押すと
自動的に残りの文字列を補ってくれる(ファイル名補完のためには,ESCキーを押すのが一般的である).
report.texがあり,その内容をcatで表示させたい時には
まで入力してから,Tabキーを押すと,残りの文字列"
% cat rep
ort.tex"を補ってくれる.report.dvi,report.auxなどがあるときには,tabキーを押すと残りの共通する文字列"ort."までを補ってくれる.
演習:ディレクトリ
public_html内のファイルを一覧するためにtcshの補完機能を利用してみよ.
コマンドの位置を知る
binの付くディレクトリ(BINaryの意)に格納されている.
whichコマンドを次の形式で使う.
結果は,絶対パス名で表示される.
たとえば,コマンド
% which コマンド名
lsは"/bin/ls"が結果として表示される.whichはコマンドを発見した時点で探索を中止するので,同名のコマンドが未探索領域にあっても表示されない.
演習
sh,csh,tcshがどのディレクトリに格納されているかを報告せよ.
ファイル展開文字
パターン 意味
*任意の文字列
?任意の1文字
[文字列] "文字列"中の1文字.
[3-5]}なら,3,4,5がマッチ.
~ユーザーのホームディレクトリの絶対パス
{strA,strB,...}文字列パターン中で
strA},strB}等をファイル名置換したものをならべたもの
とすると,指定したファイルパターンにマッチ
(match)したファイル群だけが一覧される.
% ls パターン
ls *"は現在居るディレクトリ下のすべてのファイルおよびディレクトリを表示する(単なるlsと同じ).
"ls *.tex"は,拡張子として.texが付いたLaTeXファイルだけを一覧する.
plot?.plt"はplotに続いて任意の1文字(または0文字でも可)あり,拡張子.pltの付いたファイルを一覧する.
"ls [a-z]*"はファイル名が英小文字で始まるファイルを一覧し,"ls ~/public_html"はどのディレクトリにいようとも自分のホームディレクトリにあるpublic_htmlにあるファイル・ディレクトリを一覧する.
演習:
ファイル名展開を使って,ファイル名の末尾に記号『
~』が付いたMuleで作成・編集したバックアップファイルを一覧せよ..log,.aux,.tocおよび.dviのついたファイルを一覧せよ.\par
ファイル操作コマンドにファイル名拡張を使うと効率的である.lsで確認すること.rm *.log"で拡張子.logの付いたファイルを削除することができる.
さらに,関連するファイル群をまとめてディレクトリ管理するために,(必要ならディレクトリを作成し)目的とするディレクトリにファイル群を移動せよ.
標準入出力
出力装置 装置名称
標準入力装置 キーボード
標準出力装置 ディスプレイ
I/Oリダイレクション
<』または『 >』を使ってリダイレクション先を指定する.>』,『<』を使って標準入出力を切り替える.
使用するコマンドに入出力が伴う場合,実際には次のように使う.
たとえば,現在のワーキングディレクトリ内のファイルおよびディレクトリの一覧結果を標準出力装置へ出力するコマンド
コマンド > ファイル
コマンド < ファイル
lsの結果を,指定したファイルへリダイレクトするには,次のようにする.
% ls > ファイル名
catは標準入力装置から入力された文字列を標準出力装置へ出力するコマンドである.
通常は,
のように,標準入力装置への入力はリダイレクトされテキストファイルから入力されて,その結果を標準出力装置へ出力する.
この場合,入力の切り替えのリダイレクト記号『
% cat < ファイル名
<』は省略される.
listに書き出し,その内容をモニタに表示するには次のようにする.
このとき,『コマンド
% ls > list
% cat < list
lsの結果を標準出力(モニタ)からファイルlistに
リダイレクションする』,『コマンドcatへの入力を標準入力(キーボード)に代わってファイルからのリダイレクションで行なう』という.
catは,実際にはファイルの並びを連接して(concatenate),その結果を標準出力装置に出力することができる(そのようにプログラムされている).
つまり,次ぎのようにファイルfile1,file2,file3をならべてcatに渡すと,それらが連接されて出力される.
この例では,その結果をファイルmergeにリダイレクトしている.
こうして,多数のファイル内容をつなげて1つのファイルにすることが極めて容易である.
% cat file1 file2 file3 > merge
演習:
適当なファイルを2つ以上連接して1つのファイルにまとめ,その内容を実際に表示して,連接されていることを確かめよ.
ファイルへの追加リダイレクション
/home内のファイル・ディレクトリの一覧結果を既に存在しているファイルにリダイレクションしてみる.
すると,ファイル
% ls /home > list
% cat < list
listに先に書き込まれていた内容は消え去り,新しくリダイレクションされた結果だけがファイル内容となっている(シェルによっては,"上書き"の警告を出してくれる場合がある).
リダイレクション先のファイル名は既存のファイル名と重複しないように十分気をつけること.
一方,標準出力へ出力をリダイレクションしてファイルの末尾に追加して書き出す場合には『>>』を使う.
たとえば,既に書き込まれたファイルの末尾にlsの結果を追加するには次のようにする.
% ls >> list
% cat < list
Here Document
catを使って,エディタを使わないでキーボードから入力された文字列を"ファイル名"で指定されるファイルに書き出す例である.
このような方法による直接的にファイルを書き出すことをHere Documentという.catに入力されるファイル名が省略されていること,および標準出力装置への表示がファイルへリダイレクトされていることに注意する.
入力ファイル(装置)が省略されたために,
% cat > ファイル名
キーボード入力
^d
catコマンドへの本来の入力装置である標準入力装置(キーボード)からデータがcatへ入力される.
そのために,キーボード入力を待っている状態になる.
キーボードから文字列を入力し,最後に入力の終わりを知らせる^d
を押すと,その結果catの標準出力への書出)が"ファイル名"で指定されたファイルにリダイレクションされる.
Here Documentは,次のようにして,標準入力として^dはControlキーを押しながら小文字のdキーを同時に押すことを意味する.C-dとも書くことがある.
endstrが出現するまで入力することによっても行なえる.
<< endstr
.....標準入力
endstr
<<の後に,入力したいデータの中にはない文字列
endstrをかき,"入力の終わり"の印とする.
たとえば,次のように使う.
すると,指定したファイル名に入力文字列が書き込まれる.
% cat
<<EOF > ファイル名
This is a Here Document.
Without Editor, we can make any files!
EOF
演習:
実際に,Here Documentを作成し,その内容を表示せよ.
提出課題
lsで一覧した結果をディレクトリ名を添えて,次の要領でLaTeX文書にまとめて報告せよ(Mail/とNews/ディレクトリ内を除く).
ただし,先の演習で行なったように,不要なファイル群は削除され,すべてのファイルは適切なディレクトリ内に格納されていることが前提条件である.
ls -l(-lオプション付き:"エル"である)によるファイル一覧結果を適当なファイルにリダイレクションし,ディレクトリ名を添えてその内容を次のようにしてLaTeX文書内に取り込め.
C-x i(Ctrlキーを押しながらxを押してから,iを押す)でモード行に読み込みたいファイル名を指定すると,カーソル位置に目的のファイル内容が挿入される.
lsの標準出力結果と同じようであるために,読み込んだファイル内容の前後に\begin{verbatim}と\end{verbatim}で挟んで
のようにせよ.
このようにverbatim環境を使うと,フォントはタイプライター体となり,テキストを配置したようにそのままタイプ印刷したように出力される.
\begin{verbatim}
リダイレクトしたファイルから読み込んだlsの結果
(ファイル・ディレクトリ群の一覧)
\end{verbatim}
情報処理概論目次