UNIX のコマンドとファイル
1 UNIX の実習について
今回以降,この授業では UNIX (ユニックス) というオペレーティングシステ
ム (OS) を利用した実習を行います1。
UNIX とか OS とか,何のことだか,まだわからないかもしれませんが,とり
あえず Windows ではないものが動いているコンピュータを使うと考えておい
てください。
さて,UNIX は大学等の学術機関や研究所などに普及している OS です。
企業では Web やデータベース等のサーバとしても多く採用されています。
したがって,
UNIX の利用法やその基礎的概念を学べば,
コンピュータに関する技術や知識の幅を広げられるのに加え,
それらは,将来,直接役に立つかもしれません。
もっと身近な UNIX 習得の必要性は,
情報科学専攻に
UNIX の基本的な使い方の習得を前提とする授業があるという点にあります。
また,卒業研究で必要となることもあります。
UNIX では利用開始にあたり「自分は誰であるか」を計算機に伝え,「この装
置を利用する許可が与えられているか」を認証します。このことを UNIX では
ログイン (login)と呼びます。
これに対して利用終了のことをログアウト (logout)と呼びます。
この授業では,Windows が動作しているコンピュータから,UNIX 機に遠隔
ログイン (remote login) して,UNIX の実習を行います。
その方法については,
第5回テキスト
を参照してください。
ログアウト時には,必ず exit コマンドを実行してください。
この授業で利用するコンピュータで
パスワードを変更するには passwd コマンドを実行します。
passwd コマンドでは,入力したパスワードは画面には表示されませんが,
入力は行われていますので,作業はそのまま続行してください。
パスワードの入力後には を押してください。
- キーボードから入力できない。
CTRL-q を押してみてください。CTRL-q とは Ctrl キーを押しな
がら q キーを押すことを意味します。
- プロンプトが出ない。
CTRL-d を押してみてください。それでもだめなら CTRL-c を押し
てみてください。CTRL-c は現在実行しているコマンドを強制終了
します。
- たのしい UNIX -- UNIX への招待 --。坂本文。アスキー出版局。
- 続・たのしい UNIX -- シェルへの招待 --。坂本文。アスキー出版
局。
- UNIX プログラミング環境。B. W. Kernighan & R. Pike 著。アスキー出版局。
- プロンプトに引き続いてキーボードからコマンドを入力し,
最後に (矢印がついた大きなキー)を押すことによってコマ
ンドを実行します。
入力を間違えたら (Backspace キー) で修正できます。
- UNIX では大文字と小文字は区別されます。
- ほとんどのコマンドには引数をつけることができます。コマンドと引
数,および複数の引数の間は空白で区切ります。
- 画面をながめてみてください。
画面には konno@ski2[1] などと表示されているはずです。こ
れを
プロンプト (prompt)と呼びます2。
- ここで date と打ち込んでください。
間違えたときには (Backspace キー)で文字を削除できます。
続いて (矢印がついている大きなキー)を押してください。
現在の日付と時刻が表示されましたか。
UNIX ではプロンプトに引き続いてコマンド (command)を入力
します。
コマンドを実行するには を押します。date は現在の日付
と時刻を表示するように計算機に命令するコマンドです。
プロンプトが存在する行をコマンド行(command line) と呼び
ます。
- 次に大文字で DATE と入力して を押してください。
SHIFT キーを押しながら英字を入力すると大文字になります。
「コマンドが見つかりません」としかられますね。
UNIX に date コマンドはありますが,DATE コマンドはありません。
UNIX では大文字と小文字は区別されます。
- cal コマンドを実行してください。
今月のカレンダーが表示されましたか。
- 次に cal 10 1966 を実行してください。cal と入力してか
ら (スペースキー; 何も書いていない細長いキー)を押し,
さらに 10 以降を入力します。1966 年 10 月のカレンダーが表示され
ましたか。
ここで入力した 10 1966 を cal コマンドの 引数 (ひきすう;
argument)と呼びます。
cal コマンドは引数を指定されなければ今月の,指定されれば指定さ
れた月あるいは年のカレンダーを表示します。
- 次に途中の空白を入れずに cal101966 を実行してください。
cal101966 というコマンドはありません。
コマンドと引数および複数の引数を区切るには空白が必要です。
- man date を実行してください。
date コマンドのマニュアル(MANual)が表示されました。
一画面におさまりきらないため,
最終行に何やら表示されて止まっています。
を押すと次の画面に進みます。
終わりまでたどりつくか,q を打つと終了します。
- man を実行してください。
man コマンドには,調べたいコマンドの名前(コマンド名)
等を,引数として与える必要があります。
引数の必要性は,コマンドによって異なります。
- clear コマンドを実行してみましょう。
きれいになりましたか。
- echo コマンドを実行してみましょう。
何か表示されましたか。
- echo I love you. を実行してみましょう。
あなたは計算機に愛されていますか。
echo コマンドは与えられた引数を画面に表示します
3。
引数が指定されなければ何も表示されません。
3 ファイル
コンピュータで作業したことを残しておきたいときにはファイルを利用します。
ファイルを作るには,その中身に加えて,ファイルの名前(ファイル名)が必要です。
ファイルはファイル名で区別され,
ファイル名を使ってファイルの中身を見たり,中身を変更できます。
- コマンド [と引数] の後ろに「
>
ファイル名」を指定すると,コ
マンドの実行結果は画面に表示されません。その代りに,指定したファ
イル名の新しいファイルができ上がり,そこに結果が書き込まれます。
- ls コマンドは所持するファイルの名前 (ファイル名) を表示するコマン
ドです。
- 「cat ファイル名」を実行すれば,ファイルの内容が表示されま
す4。
- コマンド [と引数] の後ろに「
>>
既存ファイルの名前」を指定す
ると,コマンドの実行結果は,指定したファイルに追加されます。
上記のことを,次の操作を通じて確かめてみましょう。
- date コマンドを実行してみましょう。
現在の時刻が表示されましたね。
- date > now を実行しましょう。
何も表示されません。date コマンドの実行結果が now という名前のファ
イルに書き込まれたからです。
- ls を実行してみましょう。
作成したファイルの名前
now が表示されました。
- cat now を実行してみましょう。
予想どおりですか。
- now cat を実行してみましょう。
しかられましたね。
プロンプトに続いては,まずコマンド (cat) を打つ必要があります
5。
- 次に cat dog を実行してみましょう。
cat コマンドの引数には,既存のファイルの名前を与えなければいけません。
- date » now を実行してみましょう。
続いて ls と cat now を実行しましょう。
date コマンドの結果が追加されて,now の内容が 2 行になりましたね。
- 再度 date > now を実行してから,
ls と cat now を実行しましょう。
元の now の内容は上書きされて無くなってしまいましたね。
>
と >>
の違いに注意してください。
- UNIX では / をファイル名に含めることはできません。
- 小文字と大文字は区別されます6。UNIX では慣例として小文字のファイル
名を使います。
- .(ドットまたはピリオド)で始まるファイルは多くのコマンドで特別に
扱われます。
当面,英数字と . (ドット),_ (アンダーバー) のみを組み合わせたファイル
名の利用を推奨します。
ただし,ドットで始まるファイル名を使うのは避けた方がいいでしょう。
ファイルはファイル名で識別して操作するものですから,ファイル名はファイル
の内容を連想できるものにしましょう。
ドットやアンダーバーはファイル名を構成する単語を区切るために使うことがで
きます。
以下の操作を行って,上記のことを確認しましょう。
- date > a/b を実行してみましょう。
しかられてしまいました。
- ls を実行しましょう。
続いて date > Now を実行して,ls を実行しましょう。
何が表示されましたか。now と Now は区別されていますか。
- now と Now の内容を見比べてください。
- cal を実行してください。
次に cal > this_month を実行してください。
ファイル名に _ を含むファイルも作れましたね。
3.3 ファイル名の変更とファイルの複写・削除 -- mv, cp, rm
作成したファイルのファイル名を変更したり,
ファイルの内容を別のファイルに複写したり,
ファイルを削除したりできます。
そのためのコマンドは mv, cp, rm です。次の形式で使います。
mv file1 file2 |
file1の名前(ファイル名)をfile2に変更 |
cp file1 file2 |
file1の内容をfile2に複写
(file1と同じ内容を持つファイルfile2を作る) |
rm file |
fileで指定したファイルを削除 |
- 削除したファイルは二度と戻りません。rm コマンドを実行するときには
心を落ち着かせてから を押すことを習慣づけましょう
7。
- cp や mv の最後の引数 (上で file2 と表記したもの) に既存の
ファイルの名前を指定すると,元のファイルは上書きされて無くなりま
す8。このことは「コマンド > ファイル名」でファイルにコ
マンドの実行結果を書き込むときも同様です9。誤って必要なファイルを消さないよ
うに,既存のファイルをよく確認してから実行しましょう。
- 再び ls を実行してから cat now を実行しましょう。
- ファイル now の名前を old に変更します。mv now old を実
行してください。名前が変わったか,確認してください。 中身も見てみ
ましょう。
- old と同じ内容のファイル old.copy を作ります。cp old
old.copy を実行してください。ファイルができたか ls で確認してか
ら,old と old.copy の内容を見比べてみましょう。
- old.copy を削除します。rm old.copy を実行してください。
うまくいったか確認してください。
- 続いて old と this_month を削除してください。結果を確認してください。
ほとんどのコマンドには,その動作を変更するオプション (option) と呼ばれる
引数を指定できます。
オプションは,通常,-
か --
に続いて指定しますが,どんなオ
プションがあるかは,コマンド毎に違います。
コマンドのオプションは man コマンドを使って調べることができます。
- lsを実行してから,ls -a を実行してみましょう。
-a は ls コマンドのオプションです。 . (ドット) で始まるファイル名
を含めて表示するために使います。
オプション -a を指定して表示された . (ドット) で始まるファイル
は,皆さんがファイルを作る前から予め用意されていたもので,計算機
を正常に使うために必要なファイルです。削除したり,名前を変えたり
しないでください。
- cal を実行してみましょう。
今月のカレンダーが表示されましたか。
- cal > month を実行してみましょう。
何が表示されましたか。cal コマンドの出力はどこへ行ったのですか。
- cat month を実行して,ファイルの内容を表示してみましょ
う。
- cat -n month を実行してみましょう。
cat は -n というオプションを受け付けます。-n は行番号を付
して表示するために使います。
- ls を実行してから,
ls -l(エル)を実行してみましょう。
ls コマンドのオプション -l は,ファイルのいろいろな情報を表示し
ます。今はファイルを最終的に変更した日時がわかることだけに注目す
ることにしましょう。
- ls -a -l と ls -alを実行してみましょう。
予想どおりの結果になりましたか。
3.5 ファイルを扱ういろいろなコマンド - more, wc, sort, grep
ファイルを扱うコマンドはたくさんありますが,知っていて便利なコマンドを幾
つか紹介します。
man コマンドを使って各コマンドの概要
(NAME または「名称」欄)を確認しながら,以下を実行してみましょう。
まず,more コマンド
10
と wc コマンドを紹介します。
more はページャ (pager) という種類のコマンドの一つです。
- more month を実行してください。
cat コマンドと変わりがなさそうですね。
- cal 2005 を実行してから,
cal 2005 > year を実行してください。
cat コマンドでファイル year の中身を確認してください。
- more year を実行してください。
ファイルの最後に到達するまで キーを押してください。
- 今度は more year を実行したら,すぐに q を押してみて
ください。
- ファイル month が存在することを確認しましょう。中身も確認しましょ
う。
続いて,wc month を実行してみましょう。
- wc year を実行してみましょう。
sort コマンドはファイル内の行を並べ替え (sort) します。
- sort year を実行してください。
- 今度は sort のオプション -r を試します。
sort -r year を実行してください。
grep コマンドは引数に与えられた文字や文字列11を含む行を取り出します。
- grep 22 month を実行してください。
続いて grep 15 month を試しましょう。
- 今度は grep のオプション -v を試します。
grep -v 22 month を実行してください。
cal |
displays a calendar |
clear |
terminal capability interface |
date |
display or set date and time |
echo |
write arguments to the standard output |
exit |
おしまい |
man |
format and display the on-line manual pages |
|
|
ls |
list directory contents |
cat |
print files |
mv |
move files |
cp |
copy files |
rm |
remove directory entries |
|
|
more |
file perusal filter for crt viewing |
wc |
word, line, and byte count |
grep |
print lines matching a pattern |
sort |
sort lines of text files |
5.1 その1
UNIX のコマンドを使って以下を実行してみましょう。
- 今日は何日でしょう。
- 今月中に日曜日は何回あるでしょう。
- 今年の元日は何曜日だったでしょう。
- 自分の生まれた日は何曜日だったでしょう。
- 自分の名前を計算機から出力(表示)させてみましょう。
- 「男の人が二人」(man man) を実行したときには何が起こり
ますか。結果を予想をしてから実際に実行してみましょう。
- 「男と女」(man woman) および「女と男」(woman
man) を実行したときの出力を比較して,なぜこのように異なった出
力が得られるのかを考えましょう。
一般論として「エラーメッセージ」は注意深く読む習慣をつけましょ
う。
5.2 その2
- あなたがどのような名称のファイルを所持しているか確認してください。
- ファイル Now を削除しましょう。うまくいったか確かめましょう。
- 現在の時刻が入っているファイル Now を再び作りましょう。
- ファイル Now の内容をファイル NOW に複写しましょう。
NOW の内容を確認しましょう。
- ファイル month の内容を確認してから,month を NOW に複写してみま
しょう。NOW の内容を確認しましょう。
- ファイル month の名前を Month に変更しましょう。
うまくいったかどうか,確認しましょう。
- 今月のカレンダーが入ったファイル .month を作成してください。
ファイル名の先頭にドットをつけ忘れないように。
ls コマンドを使って,作成したファイル名を表示してください。
ファイルの中身も確認してください。
- ファイル NOW と .month を削除してください。うまくいったか確認して
ください。
- echo hakodate を実行しましょう。結果を確認したら,中身が
hakodate であるファイルを作ってください。ファイル名はお任せします。
- echo コマンドを複数回実行して,ファイルの中身が
hakodate
sapporo
asahikawa
kushiro
iwamizawa
であるファイル campus を作ってください。
- ファイル campus から,文字 k を含む行だけを表示してください。
- ファイル campus から,文字 k を含まない行だけを表示してください。
- ファイル campus の中身を,アルファベット順に並べ替えて表示してく
ださい。
- ファイル campus の中身を,アルファベットの逆順に並べ替えて表示し
てください。
- ファイル campus の中身を,アルファベット順に並べ替えて,ファイル
campus_sorted に入れてください。
- ファイル campus の各行に,行番号を付けて表示してください。
- ファイル campus をファイル campus.bak に複写してください。
- ファイル campus の内容を,元の内容に行番号をつけた内容にしてください。
- -n という名前のファイルがあったとして,このファイルの内容を cat
で表示するにはどうしたらいいでしょう?
12
少なくともこの問いの正解がわかるまでは13, - で始まる名前のファイルを作らないでください
14。
脚注
- ... を利用した実習を行います1
- 実際には UNIX の親戚である
Linux を利用します。UNIX と Linux はほぼ同じと考えて構いません。
- ... (prompt)と呼びます2
- プロンプ
トとして表示する文字列は変更できます。
- ... コマンドは与えられた引数を画面に表示します3
- 厳密にいうと違いますが,現段階では細かいことは無視し
ます。
- ... す4
- cat コマンドで内容を表示できるのは,テキストファイル
と呼ばれるファイルのみです。
- ... を打つ必要があります5
- 例外はありますが,細かなことは無視しましょう。
- ... 小文字と大文字は区別されます6
- Windows のファイルシステムで
は,ファイル名の大文字・小文字は区別されません。そのため,大文字・
小文字のみが異なる名前のファイルを同じフォルダに作ることはできません。
- ... を押すことを習慣づけましょう7
- rm 実行時,本当にファイルを削除してよいか,確認のメッセー
ジを出すように設定しているシステムもあります。
- ... す8
- cp や mv の実行時に,既存のファイルを上書きしてよいか
どうか,確認のメッセージを出すように設定されているシステムもあり
ます。
- ... マンドの実行結果を書き込むときも同様です9
- 設定によっては
上書きされないこともあります。
- ... コマンド10
-
more コマンドを実行すると,実際には more
の機能を拡張した less というプログラムが動くシステムがあります。
- ... コマンドは引数に与えられた文字や文字列11
- 文字列の「パターン」
を使うこともできます。
- ... で表示するにはどうしたらいいでしょう?12
- 通常のコマンドは - で始まる引数をオプションとして解釈し
ます。したがって,cat -n だと,-n はファイルではなくオプションと
みなされてしまいます。
- ...少なくともこの問いの正解がわかるまでは13
- 今は分からなくて
も構いません。
- ... で始まる名前のファイルを作らないでください14
- -n という名前のファイルを作ってしまった人は mv -
-n newname でファイル名を変更してください。