UNIXコマンドの初歩とファイル操作

コンピュータを操作して何かの作業を行うためには,使っている人間からコンピュータに「指示をする」(何をどうしろこうしろ....)必要がある.この指示を出すのにマウス(トラックパッド)を使う事で,コンピュータに不慣れな者でも画面を見ながら操作出来るようにしているのがGUIであり,キーボードからコマンドと呼ばれる文字入力で操作するのがCUIである. Mac OS Xをコンピュータのプロフェッショナルとして使いこなすには,このCUI操作が出来ないとMac OS XのUNIX的機能を十分に引き出す事は出来ない.

ここでは,まず基本的なコマンド操作の考え方を学ぶ.

キーボード入力操作

キーボード上の「キー」を押してコンピュータへの指示として文字を与える事を「タイプ/タイピング」とか「打ち込み」などと呼ぶ.その基本操作は次のようになる.

キータイプの基本

キータイプ表記

本演習資料では,キー操作に関して次のような表記を使うものとする.

表記 意味
<Return> リターンキーをタイプ
<Delete> 一文字削除を表す.MacBookではdeleteキーに相当する.コンピュータの機種によっては,BackSpace (BS)キーが該当する事もある.
<Space> 空白キーを表す.
<Tab> タブ(TAB)キーを表す.タブキーはアルファベットQキーの隣にある.
<ESC> エスケープキーを表す.
<Control> X コントロールキーを押しながら,何かXというキーをタイプする.Ctrl-XやC-Xと表記する事もある.
<ESC> X エスケープキーを押してから,離した後に何かXというキーをタイプする事を表す.
M-X メタキー(通常はエスケープキー)を押してから,離した後に何かXというキーをタイプする事を表す.

カーソル

では,ここでターミナルを起動してみよう.

Mac OS Xの標準状態では,ターミナル.appは,アプリケーション -> ユーティリティフォルダに置いてある.今後,良く使うと思われるのでDockに登録しておくと良いだろう.

ターミナルはMac OS Xがキーボードからの文字入力をコマンドとして受け取って,しかるべき動作を行う役割を果たすソフトウェアである.(同様の機能はMac OS X以外のUNIXやWindowsにも用意されている.)ターミナル上には黒い■記号が出ているのが見える.ターミナル上でタイピングすると入力された文字はこの■のところに表示されてゆく.この■はタイプされた文字が入力される位置を判り易くするために表示されているものであり,これを「カーソル (cursor)」と呼ぶ.カーソルは黒い■だったり縦棒 | だったり,或いは,点滅していたりする場合もある.

UNIXコマンド

コマンド (Command, 命令)とは,コンピュータに用意された様々な機能(ソフトウェア)に「名前」を付けて,その名前を文字としてタイプすることで動作させる考え方である.キーボードからコマンドを打ち込むと該当のプログラムや機能が応答して動いてくれる.UNIXシステムでコマンドによりコンピュータを操作するとは,

  1. コンピュータがコマンドを待ち受ける.
  2. 利用者はコマンド文字列を打ち込む.コマンド文字列の末尾は<Return>をタイプする.
  3. コマンドに対応した処理が動作し,結果が表示される.
  4. 1へ戻る.

という繰り返しになる.

プロンプト

この時,コンピュータがコマンドを待ち受けている状態にあることを示しているのが,ターミナル上の

mkbka001(501)$ 

という表示である.これをプロンプト (prompt,入力促進の意)と呼ぶ.このプロンプトが出ている時,コンピュータは利用者にコマンド入力操作を促している.

尚,プロンプト表示の見掛けはコンピュータの機種や設定により異なる.

簡単なコマンド

それでは,まず手始めに次のコマンドを実行してみよう.各コマンドを入力するには最後にリターンキーをタイプする.

以下の記述にて<Return>とは,リターンキーをタイプするという意味だ.

mkbka001(502)$ date<Return>
2012年 5月20日 火曜日 13時57分25秒 JST
mkbka001(503)$ 

dateコマンドは日付情報を画面に表示するコマンドである.指示するコマンド名を間違えると「エラーメッセージ」が出る.試しdataというコマンド(このようなコマンドは実際には無い)を与えてみよう.

mkbka001(503)$ data
-bash: data: command not found
mkbka001(504)$ 

ここで"command not found"というのがエラーメッセージである.エラーメッセージとは,「指示されたコマンドを実行しようとしたが駄目だった」場合に表示される警告を意味する.(Mac OS Xではエラーメッセージは英語で表示されるが,殆どは極く簡単な英語なので,恐れずにとりあえず読んで意味を考えてみよう.)

さらにcalコマンドを実行してみよう.

mkbka001(504)$ cal
      5月 2013
日 月 火 水 木 金 土
          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

mkbka001(505)$ 

calコマンドは,普通に実行すると「今月のカレンダー」を表示する.(今日では,あまり役立ちそうにないが,UNIXが生まれた20年以上前は十分役立ったのだ.)

引数とオプション

calコマンドは月年を与える事で該当年月のカレンダーを表示出来る.

mkbka001(505)$ cal 7 1999
      7月 1999
日 月 火 水 木 金 土
             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

mkbka001(506)$ 

このように,コマンド名に続けてコマンドの動作に必要な情報を与える場合があり,これを「引数(ひきすう)」と呼ぶ.上記の例では"7"と"1999"という2つの引数を与えている.どのような引数を幾つ与える事が出来るかは,コマンド毎にそれぞれ異なる.

練習

各自の生まれた年月のカレンダーを表示してみよう.(平成6年は西暦1994年)

オプション

ここで,calコマンドに-yというオプションを加えてみよう.

mkbka001(506)$ cal -y

calコマンドに-yを指示すると,表示の仕方が少し変わり一年分のカレンダーが表示される.このように,コマンドの動作の仕方を少し(時には大幅に)変える指示の事をオプション(又はコマンドオプション)と呼び,-記号(ハイフン)に続けてアルファベット英文字を並べる事で指示する.

対話的コマンド

bcコマンドは簡単な電卓機能を使うコマンドである.

mkbka001(507)$ 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'.
1 + 2 + 3 * 4
15
quit
mkbka001(508)$ 

bcコマンドを実行すると,数式の入力待ち状態となる.計算したい数式を入力して<Return>で計算結果が表示されて,再度,数式待ち状態となることを繰り返す.この状態が抜け出すにはquitをタイプすると元のコマンドプロンプトへ戻る.

このように,コマンド実行中に更に指示を待ち受けるような作りになっているコマンドもあり,これらを「対話的コマンド」などと称する.

コマンドの使い方を調べる(オンラインマニュアル)

コマンドの機能や使い方,どのような引数やオプションを与える事が出来るかなどを調べる場合にはmanコマンドを使う.引数には調べたいコマンド名を与える.例えばcalコマンドの使い方を調べて見よう.

mkbka001(508)$ man cal
CAL(1)                    BSD General Commands Manual                   CAL(1)

NAME
     cal -- displays a calendar

SYNOPSIS
     cal [-jy] [[month]  year]

DESCRIPTION
     cal displays a simple calendar.  If arguments are not specified, the cur-
     rent month is displayed.  The options are as follows:

     -j      Display julian dates (days one-based, numbered from January 1).

     -y      Display a calendar for the current year.

     A single parameter specifies the year (1 - 9999) to be displayed; note
     the year must be fully specified: ``cal 89'' will not display a calendar
     for 1989.  Two parameters denote the month (1 - 12) and year.  If no
     parameters are specified, the current month's calendar is displayed.

     A year starts on Jan 1.
.......

マニュアル表示は一画面では収まらないので,一ページ毎に区切られて表示される.ページを送るには<space>, ページを戻すには b をタイプする.また<Return>で一行づつ送ることも出来る.さらに,全てのページを表示し切った場合は (END) と表示されるので,そこでqをタイプするとmanコマンドの表示を終了する.

Mac OS Xの場合,manコマンドのオンラインマニュアルは英語版しか無いので頑張って慣れるようにして欲しい.

トラブルから脱出

コマンド操作をしていると気がつかないうちに間違えていて,どうにもおかしな状態に迷い込んでしまうことがある.その場合のトラブル脱出の手順を示す.

シェル

Mac OS Xを含むUNIX/Linuxで,ターミナルを利用しているとき,ユーザは何らかの操作を行う為の「コマンド」をタイプし,その実行結果を見た上で,また次のコマンドを実行するという繰り返し作業を行う.まるで「ユーザがコンピュータに指示を出すと,コンピュータが答える」といったように利用者とコンピュータが対話しているかのような操作になるので,これを「対話的操作 (interactive operation)」と呼ぶ.

コマンドの実行とは,すなわちプログラムの実行であるが,UNIXシステムでプログラムの実行処理を制御している中核は「カーネル (kernel)」と呼ばれる.しかし,カーネルはユーザと直接に対話する能力を持っていないので,カーネルとユーザの間を取り持つ特別のプログラムが存在しており,それがシェル (shell)と呼ばれる.シェルは,ユーザからのキーボード入力を受け取って解釈してカーネルがプログラムを実行するお膳立てを整え,カーネルによって実行されたプログラムの結果を受け取って画面表示するといった処理を行う.

シェルには,sh, csh, ksh, zshなど様々な種類のものがあるが,Mac OS XやLinuxではbashが標準で利用される.bashの使いこなし方の解説については,Linuxに関連した書籍や情報が沢山手に入るので,そこでの記述はMac OS X環境でのbashにも概ね通用する.

ちなみに,「ユーザの操作を受け取り,それを解釈してプログラムを起動する」という点では,Mac OS XのFinderやWindowsのExplorerも「マウス操作を受け取り,該当するプログラムを起動する」機能を提供しているので,シェルの一種と考える事が出来る.このようなタイプのシェルをビジュアルシェル (visual shell)などと呼ぶ場合もある.

シェルの基本機能

入力コマンドの解釈と実行

既に幾つかのコマンドをターミナルからタイプして実行して試して見ているはずだが,その操作では,

という繰り返しになっている.

シェルの最も基本的な役割は「ユーザからの操作を解釈してプログラムを起動する」ことであり,これを「コマンドインタープリタ (command interpreter)」と呼ぶ.

コマンド履歴(ヒストリ)

シェルは,過去に入力・実行したコマンドの履歴を記録する機能を持っており,これをヒストリ機能と呼ぶ.その記録されたコマンド一覧を確認するにはhistoryコマンドを用いる.次を実行して確認してみよう.

mkbka001(509)$ history

コマンド入力編集

コマンド列の再呼び出し

ヒストリ機能で記録されたコマンドは以下のキー操作で呼び出す事が出来る.

一つ前のコマンド Ctrl-p (又は↑キー)
一つ次のコマンド Ctrl-n (又は↓キー)

これで,過去に入力した長いコマンド列を再度タイプする手間を省く事が出来る.

個人的には,矢印キーを使わずにCtrlキーを使うのが「凄く出来そうな雰囲気」が出てカッコいい....と思う.

練習として,既に実行したcalコマンドを再び呼び出して実行してみよう

コマンドラインの編集

今現在,入力中のコマンドライン(コマンド列)はカーソルを移動して編集(修正)してから実行する事が出来る.

カーソル移動のキー操作は次の通り.

キー操作 アクション
C-b (←) 一文字左へ (backword)
C-f (→) 一文字右へ (forward)
Esc-b 一単語左へ
Esc-f 一単語右へ
C-a 行頭へ (ahead)
C-e 行末へ (end)

コマンド行の編集(修正)操作は次の通り.

キー動作 アクション
delete カーソルの左側を一文字削除
C-d カーソル上を一文字削除
C-k カーソルから行末まで削除

尚,このキー操作(キーバインド)は,Emacsテキストエディタ(後日説明)と同じになっている.

練習

既にcalコマンドで実行した自分の生まれ年月のカレンダー表示を行った.ヒストリ機能とコマンドライン編集を使って,その前月・翌月のカレンダー表示を行ってみよう.

ファイル操作の基本

ファイルとは

「ファイル」とは,電子的に表現された文字情報や各種データ(画像やデジタル音声やワープロ文書など)やプログラム等をコンピュータ内部で保存しているものを表す用語(概念)である. プログラミング演習の授業中に様々な文書やプログラムを作成・編集・保存するということは, ファイルを作成・編集・保存することを意味する.

これまで,あまり詳しくは説明しなかったが,Finderウィンドウ上ではファイルは「アイコン(絵文字)」として表示されている.

ファイルの例とファイル名

皆に身近なCDを考えてみよう.これらの「記憶媒体(メディア)」には,音楽や映像の情報がデジタルデータとして記録されており,これらを読み出すことで再生して楽しむことが出来る.また,Macに標準装備のiTunesを使えば,CDの音楽情報を読み取ってパソコンに取り込み,その音楽データをiPodに転送して楽しむことも出来る.

これらの音楽データは楽曲毎にCDやiPod内部でそれぞれ区別して管理されており,自由自在に選曲して再生できるのは良く知っているだろう.実は,これらの音楽データはCDメディア上やiPod内部において,それぞれ「ファイル」として記録されている.つまり,「ファイル」とはコンピュータやコンピュータ用記憶媒体において,ひとかたまりのデータ(例えば,音楽一曲分)を記録する単位であり,それらには「名前」を付ける事により,たとえ数千・数万のファイルが記録されていても,それぞれ区別して取り出して利用することが出来る.

現在,一般に入手可能な殆どのコンピュータでは,情報(データ)を記録する単位として「ファイル」を用いている.WindowsやMac OS XなどOSの違いにより,ファイルの実現方法の詳細は異なっているが,基本的な考え方として

というのは,ほぼ共通している.

技術的には,ファイル名として漢字を含む殆どの文字を利用することが出来るが,例えば,WindowsからMac OS X,或いは,Mac OS XからLinuxなど,異なるOSの間でファイルを交換して利用しようとすると,日本語(漢字・ひらがな・カタカナや記号など)をファイル名に使うと,正常に画面表示されないなど様々なトラブルに巻き込まれる可能性が極めて高い.そのため,ファイル名には英数字(英数キーを押して英語モードで入力される文字)をファイル名に使う事を強く勧める.

また,英数字の中でも記号類はトラブルに繋がる可能性があるので,ファイル名として使える安全な文字は,アルファベット大文字と小文字,数字,アンダースコア,ハイフン,ピリオドだけと知っておくこと.また,ファイル名の長さはMac OS Xでは255文字(漢字の場合は,その半分)である.

ファイル名の確認

ターミナルで作業中にファイル名一覧を確認するのは ls コマンドである.

ターミナルを開いて,そこで

mkbka001(510)$ ls<Return>

とタイプして,そこにあるファイル名を確認してみよう.

自分では作成したつもりはなくても,既にcse環境にユーザ登録された時点で幾つかのファイルが作成済みである.

ファイルを作成してみる

ここで試しに一つのファイルを作成してみよう.ファイルの目的の一つは,何らかの情報を「記録する」ことであるので,その一例としてターミナル上でコマンドを実行した結果をファイルとして記録してみよう.

UNIXには,scriptコマンドと呼ばれる,ターミナルウィンドウ上に表示された文字をファイルとしてコマンドが用意されている.scriptコマンドを起動する際には,引数として記録として残したいファイルの名前を与えて実行する.ここでは,日付を表示するdateコマンド,利用しているUNIXの種類を表示するunameコマンド,暦を表示するcalコマンドをそれぞれ実行した結果をファイル名testというファイルとして記録してみる.また,scriptコマンドの記録を終えて終了するにはexitコマンドを実行する.

ここでは,ターミナル上で

script test <Return> date <Return> uname <Return> cal 12 2008 <Return> exit <Return>

とタイプすればtestというファイルが出来るはずである.

無事,testというファイルが出来ていることを確認してみよう.ファイル名の確認をするには

mkbka001(511)$ ls<Rerutn>

を実行する.

(注:今後,課題提出などのため,プログラムの実行結果を記録する必要が出てくる.その場合に,このscriptコマンドは役に立つだろう.)

ファイル内容の表示

ファイルの中身を確認するには cat (catenate)コマンドを用いて

cat ファイル名<Return>

と実行する.(ちなみに,本来,catコマンドはファイル内容の表示用コマンドではなく,複数のファイルを連結(concatenate)するためのコマンドである.)

長いファイル内容の表示

一画面に収まり切らない長いファイルを表示させて確認したい場合,どんどんスクロールして過ぎ去ってしまう.このような場合には more コマンドを用いて

more ファイル名<Return>

と実行する.

moreコマンドはターミナルの一画面づつ区切りながら長いファイルを順次表示してくれる.一画面分表示すると一旦停止するので,その時に以下のキー操作で様々なアクションを指示できる.

ファイル名の変更

ファイル名は必要に応じて変更することが出来る.ファイル名を変えるにはmv (move)コマンドを用いる.

mv 元ファイル名 新ファイル名

例えば,testというファイルをlogというファイル名に変更するには,

mkbka001(514)$ mv test log

と実行する.

無事,名前が変更できたかどうか ls コマンドを実行して確認してみよう.

ファイルの複製

ファイルは,コンピュータ内部に記録された電子的データであり,簡単に寸分たがわず複製出来ることが特徴である.ファイルを複製するには cp (copy)コマンドを用いて

cp 元ファイル名 複製先ファイル名

と実行する.

例えば,ファイル log を log2 に複製するには

mkbka001(515)$ cp log log2

と実行する.

ファイルの削除(消去)

ファイルは削除(或いは消去)することが出来る.また,作成したファイルは削除しない限り残り続ける.一般にファイルを作成できる容量は有限であり,また,cse環境では全員が一つのファイルサーバと呼ばれるコンピュータ上にファイルを保管しているので,一人一人があまりに過剰にファイルを作成したまま放置すると容量が足りなくなってしまう.そのため,不要になったファイルはこまめに削除するように心がけよう.

ファイルを削除する為のコマンドは rm (remove)コマンドであり,

rm 削除するファイル名

と実行する.

ここでは,log2というファイルを削除してみよう.

mkbka001(516)$ rm log2

無事,削除出来たかどうか ls コマンドで確認してみよう.

mkbka001(517)$ ls

補足: Finder上のGUIによるファイル操作

既に自宅でMac OS Xをある程度使い込んでいる者,或いは,Windowsの操作に慣れている者は,上記のコマンド操作と同等の操作(ファイル名変更・複製・削除)が,Mac OS XのFinder上(又は,WindowsのExplorer上)でマウス操作を用いて簡単に出来る事に気がついているだろう.確かに,この程度のファイル操作であればGUIを用いた手軽で優れているように思える.

しかし,良くある誤解(特にパソコン操作が既にある程度出来る者が陥る誤解)は,「CUIは色々覚えなくちゃいけないから面倒だ.マウスを使ったGUIの方が簡単で慣れているから,それで十分さ.」というものである.既に説明した通り,GUI操作は比較的簡単なパソコン操作を素人でも直ぐに出来るようにするためのものであり,ちょっと複雑な操作,或いは,ネットワークを介した遠隔操作ではGUIは役に立たない.

少し難しいと思えるかも知れないが,ここでしっかりとコマンドによるファイル操作が出来るようになる必要がある.尚,ここで手を抜いてコマンド操作から逃げる者は,後で痛い目に遭う.

ファイル操作に関する練習課題

  1. scriptコマンドを用いてファイルtestを作成して,catコマンド及びmoreコマンドで内容を確認せよ.
  2. mv コマンドを用いて,ファイルtestの名前を変更し log という名前にしてみよ.
  3. cp コマンドを用いて,ファイル log を複製(コピー)して log2 というファイルを作成せよ.
  4. rm コマンドを用いて log2 を削除してみよ.

ここで,色々なコマンドを操作していて,良く分からない状態になってしまった場合には,安易に誰かに助けを求める前に, 自力でもトラブルから脱出できることが多いことを覚えておくこと. 特に殆どのコマンド操作の場合,Ctrl-Cでプロンプトが表示された状態に 戻れることが多い.

基礎プログラミング演習Iの表紙ページへ戻る