(1) 04/17の授業内容:UNIXの操作

ログインとログアウト

101/102教室のUNIX端末を利用する際には、204/205教室のWindowsマシンを利用する場合と同様に、ログインログアウトが必要になる。ログインするためにはユーザー名とパスワードを入力する必要がある。

  • ユーザー名:チェックディジットを除いた学籍番号
  • パスワード:これから配布する用紙に記載

パスワードはランダムに生成された文字列であり、こちらでも誰にどのようなパスワードが割り当てられているか把握していない。「忘れたから教えてほしい」といわれても教えることはできないので忘れないようにしよう。

用紙を受け取ったら実際にログインを行うことになる。最初の1回だけはオプションからセッションでFVWMウィンドマネージャーを選択後、ユーザ名[Return]、パスワード[Return]を入力する。初期画面ではウィンドウが左図のようになっているが、FVWMウィンドマネージャーを選択すると右図のようになる。この操作は一度行うと記憶されるので、次回以降はユーザー名とパスワードを入力するだけでよい。

オプションからセッションを選びFVWMウィンドマネージャーを選ぶ するとウィンドウ右側の絵が変わる

なお、パスワードは入力しても画面に表示されないので、間違えないようにしよう。パスワードを正しく入力して[Return]キーを押すとログインすることができる。ログインすると、デスクトップには3つのウィンドウが自動的に起動する。各ウィンドウの名称と働きはそれぞれ下記の通りである。

  • kterm:ファイルのコピーや移動、これから学ぶRubyプログラムの実行操作などを行う。
  • emacs:1年生の授業で使用していたものと同じ。Mew(メール)やプログラムの作成に使用する。
  • console:ログアウトのときに使用する。

まずは、ログアウトをしてみよう。ログアウトする時に使うのはconsoleなので、ウィンドウの上部のバーをマウスでクリックしてconsoleを前面に出そう。すると、以下のような文字が書かれているはずである({naoya}の部分は自分の学籍番号)。この文字列をプロンプトと呼び、ユーザーからの命令を待っている状態であることをあらわす(ktermも同じ)。

irsv{naoya}%

ログアウトは利用を終了する際に必ず行わなければならない操作で、もしも実施しないまま席を離れると、作成したファイルを第三者に削除されたり、場合によってはあなたの名前でいろいろな人にメールを送ることが可能になってしまう。ログアウトを行うためには、consoleで、logout[Return]もしくはexit[Return]と入力する。正しく入力すれば、初期のログイン画面に戻る。

irsv{naoya}% exit[Return]

キーボードから入力を行う際にはフォーカスに注意する必要がある。マウスで3つのウィンドウのうちのどれかにカーソルを合わせると、ウィンドウの枠の色が変わる。このウィンドウをフォーカスの合ったウィンドウと呼び、キーボードからの入力は、このウィンドウに対して行われる。ウィンドウを前面に出したい時は、ウィンドウのタイトルバーをマウスで左クリックする。なお、ウィンドウが背面にあってもフォーカスがあっていれば入力することができる。なおウィンドウの切り替えはショートカットキーでも行うことができる。ショートカットキーを使って切り替えると、切り替えたウィンドウに必ずフォーカスが合うので便利である。

  • Ctrl-1:emacsが前面に出る(フォーカスも合う)
  • Ctrl-2:ktermが前面に出る(フォーカスも合う)
  • Ctrl-3:consoleが前面に出る(フォーカスも合う)

注:Ctrl-1はCtrlキーを押しながら1を押すという意味

コマンド入力でコンピュータを操作する

ファイルのコピーやプログラムの実行を行う場合、Windowsではマウスでアイコンをドラッグしたり、ダブルクリックしたりする。一方、このコンピュータでは、kterm上でコマンドを入力することでこれらの操作を行う。難しい言葉で前者をGUI(Graphical User Interface)、後者をCUI(Charactor User Interface)という。

コマンドとは、コンピュータに対して行う命令であり、あらかじめ規定の文字列が定められている。たとえば、現在の日時を表示するdateコマンドを入力してみる。ktermでdate[Return]のように、コマンド+[Return]を押すと、そのコマンドが実行される。dateコマンドを実行すると、以下のように現在時刻が表示される。

irsv{naoya}% date[Return]
2006年4月11日(月)12時19分31秒JST

次にlsコマンドを使ってみよう。lsはlistの略で現在のディレクトリ(カレントディレクトリと呼ぶ)の中身を表示するコマンドである。ディレクトリはWindowsでいうフォルダのことである。Windowsではフォルダの中身はフォルダを開いている限りいつでも参照可能であるが、CUIではコマンドを入力しなければ確認することができない。コマンドを実行する場合はコマンド+[Return]なので、この場合もls[Return]と入力する

irsv{naoya}% ls[Return]
Mail/ maildir/ public_html/
Windows/ msmail/ script/

表示されたリストにはMail/のように/がついているものがある。これはファイルではなく、ディレクトリ(フォルダ)をあらわす。つまり上記では、Mail/maildir/public_html/Windows/msmail/script/の6つのディレクトリ(フォルダ)があり、ファイルはひとつもないことになる。なお、これらのディレクトリは削除したり移動したりしないこと。削除や移動をすると、メールが読めなくなったり、Windowsでzドライブに保存したデータが消えたり、1年生のときに作成したWebページが消えることになる。

なお、UNIXでは大文字と小文字を区別する。例えば、lsのかわりにLSと入力すると、「そんなコマンドは見つからない」と表示され、コマンドは実行されない。

irsv{naoya}% LS[Return]
zsh: command not found: LS

ファイル·ディレクトリ

作成した文書やプログラムはファイルとして保存される。1つのファイルには必ず1つのファイル名がつく(Windowsと同じ)。コマンドの場合と同様、大文字と小文字は区別される。ファイルの中身を表示するコマンドであるcatコマンドを用いて、message.txtの中身を確認するという例を以下に示す(皆さんはmessage.txtというファイルを作成していないので、以下をそのまま入力しても同じ結果にはならない)。なお、以下の例で黄色の文字は補足説明をあらわす。

irsv{naoya}% cat message.txt[Return] #=>cat+中を見たいファイル名
こんにちは #=>ファイルの中身が表示されている
irsv{naoya}% cat MESSAGE.TXT[Return]
MESSAGE.TXT: No such file or directory
#=>ファイル名を大文字にすると「そんなファイルはない」といわれる

次に、ディレクトリについて考えよう。ディレクトリはファイルを整理するための箱である。ディレクトリ=フォルダなので、Windowsでフォルダを作ってその中にファイルを入れるのと同じことである。まずはディレクトリを作ろう。ここでは、今後授業の中で作成するプログラムを保存するrubyディレクトリを作成する。ディレクトリ作成のコマンドはmkdirであり、スペースに続けて作成したいディレクトリ名を入力する(その後[Return])。

irsv{naoya}% mkdir ruby[Return]
#=>mkdir+作成したいディレクトリ名

[Return]を押しても何も起こらない。実際にはディレクトリは作成されているのだが、mkdirコマンドは単に作成するだけのコマンドなので、出来ているかどうかを確認するためにはlsコマンドを入力する必要がある。lsコマンドを実行するとruby/というディレクトリが新しくできていることがわかる

irsv{naoya}% ls[Return]
Mail/ ruby/ maildir/ public_html/
Windows/ msmail/ script/

次に、今作成したrubyディレクトリに移動しよう。Windowsであればフォルダをダブルクリックすればよいが、ここではcdコマンドを利用する。cdはchange directoryの略である。cdの後に移動したいディレクトリ名を入力し[Return]で移動が完了する。cdとディレクトリ名の間にはスペースが必要である。ktermには現在のディレクトリが右端に表示されるので、正しく移動することができたかどうかを確認ができる。ちなみに最初の段階では[~]と表示されているが、これは各ユーザーが自分のデータをおくことが出来る最上層のディレクトリをあらわし、ホームディレクトリと呼ぶ。ログイン直後はかならずホームディレクトリに位置することになる。mkdirコマンドで作成した先ほどのrubyディレクトリは、ホームディレクトリの中に作成したことになる。以下では、作成したばかりのrubyディレクトリに移動している。移動をすると[~/ruby]と表示されるはずである。続けてlsコマンドを実行しているが、rubyディレクトリの中は空なので何も表示されないことが確認できる。

irsv{naoya}% cd ruby[Return]
irsv{naoya}% ls[Return]
irsv{naoya}%

今度はもとにいたディレクトリに戻ってみよう。Windowsの場合は「戻る」ボタンや「上へ」ボタンをクリックすれば元のフォルダに戻ることができた。しかし、今はこれらのボタンは利用できない。ここでもcdコマンドを利用する。下のWindowsの例を使いながら説明すると、左側がホームディレクトリ、右側がrubyディレクトリとなる。rubyディレクトリはホームディレクトリの中にあるので、もとのディレクトリに戻るというのは、1つ上のディレクトリに戻るということになる。1つ上のディレクトリは..(ピリオド2つ)と表現する。

Windowsの場合は「戻る」ボタンや「上へ」ボタンで元のディレクトリに戻ることができる

したがって、cd ..[Return]で1つ上のホームディレクトリに戻ることが出来る。ktermの右側の現在のディレクトリ表示が[~]に戻っているか確認しよう。

irsv{naoya}% cd ..[Return]
irsv{naoya}% ls[Return]
Mail/ ruby/ maildir/ public_html/
Windows/ msmail/ script/

絶対パス指定と相対パス指定

ひとつ上のディレクトリに移動するためにはcd ..と入力すると書いたが、この際には現在のディレクトリが基準となっている。現在自分が作業をしているディレクトリをカレントディレクトリと呼ぶ。カレントディレクトリを基準として指定をする方法を相対パス指定という。

下図はディレクトリの構造を概念的に示したものである。~/で表記されるホームディレクトリの中に、Mail/、maildir/、public_html/、Windows/、nsmail/、script/、ruby/の7つのディレクトリがあり、ruby/ディレクトリの中に、さらにkadai/ディレクトリと、hello.txt、test.rbという2つのファイルがある。kadai/がカレントディレクトリであると仮定すると、ruby/ディレクトリは1つ上の階層、ホームディレクトリは2つ上の階層となる。カレントディレクトリから1つ上の階層に移動するためにはcd ..と入力すればよかった。では、2つ上のホームディレクトリに移動するためにはどうしたらよいだろうか

ホームディレクトリとカレントディレクトリについて

このためには幾つかの方法がある。まずはcd ..と入力して1つ上のruby/ディレクトリに移動し,再度cd ..と入力して1つ上のホームディレクトリに移動するというものである。

irsv{naoya}% cd ..[Return]
irsv{naoya}% ls[Return]
kadai/	hello.txt	test.rb #=>1つ上のrubyディレクトリに移動している
irsv{naoya}% cd ..[Return]
irsv{naoya}% ls[Return]
Mail/ ruby/ maildir/ public_html/
Windows/ msmail/ script/ #=>さらに1つ上のホームディレクトリに移動している

一度に2つ上のディレクトリに移動する方法もある。cd ../../もしくはcd ../..と入力すると2つ上のディレクトリに移動する。ディレクトリやファイルを指定するときは/でつなぐことができる

irsv{naoya}% cd ../..[Return]
irsv{naoya}% ls[Return]
Mail/ kadai/ maildir/ public_html/
Windows/ msmail/ script/ #=>一度に2つ上のホームディレクトリに移動している

上記は、下のディレクトリから上のディレクトリに移動しているが、上のディレクトリから下のディレクトリに移動する際も/でつなぐことで複数の階層を一気に移動することができる。以下は、ホームディレクトリがカレントディレクトリである場合に、2つ下のkadaiディレクトリに一度の操作で移動している例である。

irsv{naoya}% cd ruby/kadai[Return]
irsv{naoya}% ls[Return]
ar.txt	pict.gif #=>一度に2つ下のkadaiディレクトリに移動している

なおカレントディレクトリがどこであっても、単にcdと入力するとホームディレクトリに戻る

絶対パス指定は先頭のディレクトリから必ず指定するというものであり、ここでは詳しく説明しない。2つだけ例をあげると、上記の図でkadaiディレクトリからpublic_htmlディレクトリに移動する場合、cd ~/public_htmlとなり、Mailディレクトリからkadaiディレクトリに移動する際には、cd ~/ruby/kadaiとなる。いずれもホームディレクトリを起点として記述しており、カレントディレクトリがどこであるかは絶対パス指定の場合には重要ではなくなる。

練習

下記のようなディレクトリ構造を仮定する。カレントディレクトリをsecond/とした場合に「image/」、「memo/」、「program/」の各ディレクトリに相対パス指定で移動するためにはcdコマンドを使用して、どのように指定すればよいだろうか。 cd ..を複数回繰り返すのではなく、1行で入力してみよう

練習 相対パス指定を身につけよう

解答は以下に白色で書かれているので、わかったらマウスで文字色を反転させて確認しよう。考える前に解答を見ないようにしよう。

  • image/:cd ../image
  • memo/:cd ../../memo
  • program/:cd ../../report/program

よく使うコマンド(1):ディレクトリの中身の表示(lsコマンド)

カレントディレクトリ内にあるファイルやディレクトリを表示する

irsv{naoya}% ls[Return]
Mail/ maildir/ public_html/
Windows/ msmail/ script/

よく使うコマンド(2):ディレクトリの移動(cdコマンド)

cd+ディレクトリ名で指定したディレクトリに移動する。1つ上のディレクトリに移動する場合はcd ..

irsv{naoya}% cd ruby/[Return]
irsv{naoya}% ls[Return]
kadai/
irsv{naoya}% cd ..[Return]
irsv{naoya}% ls[Return]
Mail/ maildir/ public_html/
Windows/ msmail/ script/

よく使うコマンド(3):ファイルの中身の表示(catコマンド、lessコマンド)

cat+ファイル名もしくはless+ファイル名でファイルの中身が表示される。catコマンドは自動的にスクロールしてしまうので長い文章の場合には上の方の部分が消えてしまい読むことができない。lessコマンドは手動での行送りが可能であり、[Return]キーを押すと1行下が表示される。lessコマンドを使用した場合はqを押して終了しないと、次のコマンドを入力することができない。

irsv{naoya}% cat hello.txt[Return]
こんにちは #=>ファイルの中身が表示される

よく使うコマンド(4):ディレクトリの作成(mkdirコマンド)

新規にディレクトリを作成する

irsv{naoya}% ls[Return]
irsv{naoya}% #=>最初は何もないが
irsv{naoya}% mkdir ruby[Return]
irsv{naoya}% ls[Return]
ruby/ #=>mkdirコマンドを使うとディレクトリが作成されている

よく使うコマンド(5):ディレクトリの削除(rmdirコマンド)

中が空なディレクトリを削除する。空でない場合は削除することができない

irsv{naoya}% ls[Return]
ruby/#=>最初はruby/ディレクトリがあるが
irsv{naoya}% rmdir ruby[Return]
irsv{naoya}% ls[Return]
irsv{naoya}%#=>rmdirコマンドを使うとディレクトリがなくなっている

中が空でないディレクトリを削除しようとした場合は下記のようなメッセージが表示される

irsv{naoya}% rmdir ruby[Return]
rmdir: ディレクトリ"ruby": ディレクトリが空ではありません

よく使うコマンド(6):ファイルのコピー(cpコマンド)

ファイルの複製を作る。書式はcp コピー元のファイル名 コピー先となる。コピー先の指定方法により異なる動作が行われる。

irsv{naoya}% cp memo.txt ruby[Return] #=>コピー先が既存のディレクトリの場合
irsv{naoya}% ls[Return]
memo.txt #=>コピー元のファイルはなくならない
irsv{naoya}% cd ruby[Return]
irsv{naoya}% ls[Return]
memo.txt #=>rubyディレクトリ内にも同一ファイルがコピーされる
irsv{naoya}% cat message.txt[Return]
こんにちは #=>message.txtという既存のファイルがあったとする
irsv{naoya}% cp memo.txt message.txt[Return] #=>コピー先が既存のファイルの場合
irsv{naoya}% cat message.txt[Return]
Hello #=>ファイルが上書きされている。コピー元のファイルはなくならない
irsv{naoya}% cp memo.txt report.txt[Return] #=>report.txtが存在しないファイルの場合
irsv{naoya}% cat memo.txt[Return]
Hello
irsv{naoya}% cat report.txt[Return]
Hello #=>同一内容のファイルの複製が作られる

さまざまなコマンド(7):ファイルの移動およびファイル名の変更(mvコマンド)

書式はmv 元のファイル名 移動先となる。移動先の指定方法により、ファイルの移動、ファイルの名称変更、ファイル名を変更して移動などの働きをもつ。

irsv{naoya}% mv memo.txt ruby[Return] #=>移動先が既存のディレクトリの場合
irsv{naoya}% ls[Return]
irsv{naoya}% #=>元のファイルはなくなっている
irsv{naoya}% cd ruby[Return]
irsv{naoya}% ls[Return]
memo.txt #=>rubyディレクトリ内にmemo.txtが移動している
irsv{naoya}% mv memo.txt report.txt[Return] #=>report.txtは存在しないファイル
irsv{naoya}% cat memo.txt[Return]
memo.txt: No such file or dirctory #=>元のファイルはなくなっている
irsv{naoya}% cat report.txt[Return] 
Hello #=>ファイル名が変更されている
irsv{naoya}% cat message.txt[Return]
こんにちは #=>message.txtという既存のファイルがあったとする
irsv{naoya}% mv memo.txt message.txt[Return] #=>移動先が既存のファイルの場合
irsv{naoya}% cat message.txt[Return]
Hello #=>ファイルが上書きされている
irsv{naoya}% cat memo.txt[Return]
memo.txt: No such file or dirctory #=>元のファイルは削除されている
irsv{naoya}% mv memo.txt ruby/message.txt[Return] #=>移動先が既存のディレクトリの場合
irsv{naoya}% ls[Return]
irsv{naoya}% #=>元のファイルはなくなっている
irsv{naoya}% cd ruby[Return]
irsv{naoya}% ls[Return]
message.txt #=>rubyディレクトリ内に名称変更して移動している

さまざまなコマンド(8):ファイルの削除(rmコマンド)

書式はrm 削除するファイル名となる。一度削除したファイルは元に戻すことはできないので削除する前によく確認すること。

irsv{naoya}% ls[Return]
memo.txt
irsv{naoya}% rm memo.txt[Return]
irsv{naoya}% ls[Return]
irsv{naoya}% #=>memo.txtは削除されている

課題

いろいろなコマンドを使った感想をメールで送る。提出時の要領は下記の通り

  • 提出先:naoya@e.koeki-u.ac.jp
  • Subject:学籍番号-ruby01
  • 本文:1行目に学籍番号と氏名を記載すること
  • 提出期限:本日中とする

採点:本日は出席点のみです

Tips:emacsでの日本語入力のオンオフはCtrl-oです

Tips:Mewによるメールの送り方はMewコマンドを参照