第 1 回 (2006.04.15) -- ログイン,コマンド操作の基本,マニュアル, シェル

マルチユーザシステムとしての unix

解説

unix は「複数の人間が同時に同じシステムを使う」ために設計された OS であり, こうしたシステムをマルチユーザシステムとよぶ.
こうしたシステムでは,ユーザを識別したり,ユーザの行動や資源を個別に制限するための仕組みがある. また,「人間ではないユーザ」を用いて適切な作業をさせる等,この仕組みは様々な使い方がされている.
unix では, ユーザは事前に登録され, ログインによってアクセスを開始し, アクセス中は適切なコマンドによって作業を行ない, ログアウトでアクセスを終了する,という使い方が基本である.
こういった内容に関して,まずは最も最初から必要となるアカウントやパスワードと いったものやログイン,ログアウト操作について知る.

ログイン
unix システムにユーザとしてアクセスして利用を開始する手続きを言う.
次に示す「ログアウト」と対になる手続きである.
一般に,ユーザを識別するために「アカウント」と「パスワード」の入力が求められる.
具体的な手続きにはログインの方法 (プロトコル) によって様々な形式がある. また,unix が動いているマシンの前で直接ログインする他に ネットワークを通じて遠方からログインすることもできる.
通常は,ログインすると設定してある「シェル」とよばれるプログラムが起動し, ユーザの入出力を受け持ってくれる.

ログアウト
unix システムでユーザとしてアクセスを終了する手続きを言う.
前に示す「ログイン」と対になる手続きである.
このログアウトを行なうまでは unix にアクセス中という扱いになる.
具体的な手続きはこれまた様々な形式があり,システムによって異なるため, 未知のシステムにログインする前にログアウトについてだけは知っておく必要がある.

アカウント
システムのユーザとしての個々の名称をいい,「アカウント」の他に 「ユーザネーム」などともよばれる. メールアドレスの一部として利用されることも多い.

パスワード
あるユーザであることを証明するための秘密の合言葉が「パスワード」である.
ユーザの識別を保証する手段であるため,パスワードの漏洩は避けねばならない.
そのため,パスワードはなるべく複雑なものが推奨される. 覚えやすいく推測されにくいもの,を工夫して使うのがよい. また,こまめに変更するのがよい.

警告: ログインに関するセキュリティについて

ログイン & ログアウトに関して
パスワードに関して

ログイン,ログアウト等に関連するコマンドや手続きについて

ログイン周りはセキュリティ問題に強く関係するため, システムによって拡張されたり制限が加わっていたりすることが多い.
それは阪大教育用計算機システムでも同様であり, 一般論がそのまま適用できない場面が多くなっている.

しかし,まずは基礎から,ということでここではなるべく古典的かつ一般的なものを解説する.
なお,セキュリティに関しては遠隔ログイン等を紹介する際に詳しく説明する.

■ ログイン,ログアウト等に関連するコマンド,手続き ■
コマンド等 機能等解説 (一般の場合) 阪大教育用計算機システムでは
(略) ログインのための手続き.
システムやプロトコルによってかなり異なるが,通常はコンソール前に座れば一目瞭然なことが多いだろう.
「利用の手引き」の「ログイン操作」を参照のこと.
logout, exit ログアウトする.
これもシステムによってかなり異なる.
(X を使っている場合) このコマンドは用いないこと.
「利用の手引き」の「ログアウト操作」を参照.
確実にログアウトできるように,この手続きだけは忘れないようにすること.
passwd, yppasswd パスワードを変更する. これのコマンドではパスワードは変更できない. 「利用の手引き」の「パスワード変更」を参照.
id ユーザの、ユーザ名とグループ名および各番号を表示する. 利用できる.
last 最近ログインしたユーザのリストを表示する. 利用できる.
uptime システムの稼働時間,ユーザ数,平均負荷を表示する. 利用できる.
who, w, finger, whoami who: 誰がログインしているかを表示する
w: ログインしているユーザとその作業内容を表示する. CPU の情報もわかる.
finger: ユーザ情報を調べる
whoami: ...
who am I: 私は誰?
finger を除いてだいたい利用できる.
date, cal date: 日時を表示
cal: カレンダーを表示する.
利用できる.
leave 何時離席すべきかを知らせる
leave 1400 : 午後2時になったら帰らないと,という時に指定する.
こうすると,午後 1:55 と 1:59, 2:00, 2:01, (1分おきでずっと) に御知らせが届く.
leave +0015 : 15分後に帰らないとという時.
利用できない.


コマンド操作の基本

解説

さて,unix の cui 上で操作を行うということはどういうことか解説しておこう.
その仕組みについては後述するが,cui での操作はコンピュータに対して 「コマンド」を用いて命令することで行われる.
このコマンドには,大ざっぱな文法構造があるので,それを事前に理解しておくとこれからの学習に大いに助けになろう.
以下,そのコマンドの文法等について説明する.

命令 (コマンド) の基本的な文法

基本的な文法は,「召使いへの英語での命令」であると思えば良い. 具体的には,

(命令形の動詞) (副詞) (目的語)

と並べて命令文を作る,と思えばよい. 実際には,

コマンド オプション 引数

と並べる (間はスペースで区切られる).

オプションとは,コマンドの「動作に変更を加えるためのもの」であり,
引数とは,コマンドが「作用する対象」である.

つまり, コマンドが (命令形の動詞) に相当し, オプションが (副詞) に相当し, 引数が (目的語) に相当すると思えばよい.
オプションや引数をどう解釈し扱うかはコマンドに依存するので, 後述するオンラインマニュアルで逐次調べる必要がある. しかし,一般にオプションには - (ハイフン,マイナス) を前につける慣例があるので,それは知っておいた方がよいだろう.

コマンド中でよく使われるキー

コマンドを実行したが,用が済んだので終わりたい, よく分からないので止めたい,等の時にどうしたら良いか分からないというときがある. 本来はきちんとマニュアルを読んでそれに従うべきだが,マニュアルが無い, 英語で良く分からない等の状況もあるので,そういう時は慣例としてよく用いられている次のようなキー入力を試してみるとよい. ただし,^ は「Ctrlキーを押しながら」を意味する.

実習

操作しても支障のなさそうな範囲で, 先に出てきたコマンドを試してみて, コマンド操作の雰囲気をつかんでみる. 具体的には,次の手順で行う.
なお,この手順はこの授業での実習の基本なので,kterm (漢字端末エミュレータ) などの扱いには慣れておくべし.

  1. 端末エミュレータを起動.
  2. その上でコマンドをタイプし,[Enter] キーを押して入力.
  3. 現れた反応をみて学習.
  4. 以下繰り返し.

ちなみに…

kterm をはじめとする端末エミュレータとは,文字端末と呼ばれる文字しか扱わない端末の 「エミュレータ=動作模倣ソフトウェア」の一種である (kterm = Kanji TERMinal emulator).
cui 環境を体感するには端末エミュレータは最も手軽な手段であるので,これからも良く用いる.
同様の文字端末エミュレータには,xterm, rvxt, gnome端末など数多くがあるので,自分の好みのものを使うとよいだろう.
なお,より「本格的な」cui 環境については第3回の授業で解説する.

「自分で調べるための」オンラインマニュアル

解説

unix というシステムの持つ文化には,「何事も自分で調べよ」という大人な部分がある.
そのため,コマンドには基本的にオンラインのマニュアルが用意されており, そのマニュアルを参照することで使いこなせるようになることが期待される.

また,unix のコマンドは長い歴史の中で大勢の開発者が少しづつ追加,改良してきたものなので その名前から使い方,オプション等はかなり違う (要するにバラバラ).
そうした意味でも,各コマンドの目的,動作の詳細, オプションや各種設定の仕方等をオンラインマニュアルから読んでから ユーザはコマンドを使うという「流れ」が unix cui 操作の大前提となっている.

オンラインマニュアルで見られるものは,

という感じになっている.
わからなかったらまずマニュアル,という癖をつけておくのが上達への第一歩である. (第二歩目は,「unix に詳しくて教えてくれる知人を見つける」である(^-^)).

オンラインマニュアルに関連するコマンドや手続きについて

■ オンラインマニュアルに関連するコマンド,手続き ■
コマンド等 機能等解説
man コマンド名 オンラインマニュアル.
与えたコマンドについてのマニュアルを表示する. 何も設定しないと,たいていは英語マニュアルだ.
jman コマンド名 日本語オンラインマニュアル.
与えたコマンドについてのマニュアルを日本語で表示する. マニュアルの日本語訳が存在しなければ英語のものを表示する. 設定によっては使えない.
(j)man man オンラインマニュアルのマニュアル(^-^).
man もコマンドなので,これはアリなのだ. マニュアルの使い方についてよく分からない場合はこれを見よ.
(j)man -k キーワード マニュアルデータベースの中からキーワードを含むようなもののコマンドを探し出して列挙する.
良く分からないがこんな感じ,というコマンドを探したりするのに使う.
xman Xwindow 上のオンラインマニュアル.
存在するマニュアルリストが一覧で見られるなど,結構便利だが, 英語表示のみなことが多い.
info オンラインマニュアル.
man 系統で見られるマニュアルは主に「システム管理者によって用意された」 ものであるが, info でみられるマニュアルはユーザが主に用意するものである, という違いがユーザからみたときに一番わかりやすい違いか.
操作方法が一種独特. 一種のハイパーテキストなので,うまく作られていれば非常に強力なマニュアルとなる… が,そうした用途には web document が主として使われるようになってしまった.

ちなみに…

(j)man などのコマンドでオンラインマニュアルを画面に出力したはいいが, その後どうやって操作したらよいかがわからないかもしれない.
実は,こうした画面出力では通常は less というコマンドが用いられているので, このコマンドの操作方法を調べておけばよい.
具体的には, (j)man less などとせよ.

実習

オンラインマニュアルコマンドを試してみる.
先に出てきた, ログイン関連のコマンドを対象としてマニュアルを調べてみるとよいだろう.

シェル

解説

human - shell - unix os unix で cui 操作をしようとすると,実はそこには「シェル」というソフトウェアが既に起動していて,人間の命令 (コマンド) を待ち構えている. 具体的には,kterm を起動したとき,

> $

などという表示がでるが, あれはシェルが「何か入力してください」とコマンド入力を待ち受けていることを示している.

基本的に,この「シェル」 プログラムを通して人間の文字入力を命令としてコンピュータに伝えるのが unix での cui 操作である. つまり,unix os と人間の間に,シェルが入って両方の橋渡しをしてくれるのである. イメージとしては,シェルは「同時通訳者」もしくは人間の「執事,召使い」 と思えばよい. 実際,シェルは細かいことを人間の代わりに覚えておいてくれたり, 探し物をしてくれたり,間違ったコマンドを直してくれたり,とまさによくできた召使いといってよい.
結局,unix での cui 操作に慣れるというのは, 召使いであるシェルへの命令の仕方に慣れる ということであるともいえる.
ちなみに,シェルにはいろいろな種類があり,好みに応じて好きなものをを選ぶことができる.
これ以上の詳しい解説はシェルスクリプトを学習するときに行なう.

さて,こうした「二段階を経ての命令」には便利さとは逆に問題も存在する. それは,unix cui での操作には,

という二つのファクターが入ってくるので, この二つのファクターに関する知識が要求されること, 問題が起きたとき (特に初心者は) 混乱しやすいという点である.
これは,意識して区別するようにしていけばすぐ分かるようになる. よく分からないときは,自分が困っている原因がどこにあるのかをまずはっきりさせるようにすると解決が早いだろう.

シェルの種類
シェルは数多くあるが,大きく分けて [sh系] と [csh系] との二つに分類できる.

[sh系] は sh という最もシンプルかつ古いシェルに端を発するもので, シェルスクリプト (簡単なプログラム) が組みやすい反面, 対話的処理がやや分かりにくいという性質を持つ. [csh系] は C 言語に似た文法を採用した csh というシェルから始まるもので, 対話的には使いやすいが,シェルスクリプトでやや問題が生じやすい.
[sh系] の比較的新しいものに bash, [csh系] の比較的新しいものに tcsh があるので,そのどちらかを使っておけば良いだろう. また,zsh という非常に強力なシェルも存在するので,興味あるものは一度調べておくのがよい.

(注) 教育用計算機システムで sh と称されているものの実体は bash であるので, sh の機能が制限されていることの体感は難しい(^-^).

シェルの一時変更
シェルも一つのソフトであるので,普通のコマンドとして起動できる. よって,一時的に異なるシェルを使いたいという場合は素直にコマンドとして入力すればよい. その時点から終了させるまで新しいシェルの上で作業ができる. 使っているシェルを終了するには,exit コマンドを使う.
イメージとしては,シェルの上でさらにシェルが動く,という感じだ.

ログインシェルの変更
ログインすると自動的にあるシェルがユーザ用に起動し,それ以降ユーザと unix システムの橋渡しをする. これをログインシェルと呼ぶ. ログインシェルはシステムの標準シェルの中から自分の好みのものを選択して変更することができる. ただし,標準シェルとは /etc/shells に登録されているものをいう.
変更方法については後述する.

シェルの機能

シェルスクリプトに関しては後日の講義で解説するので, ここではシェルの対話的利用に関する説明を行なう. また,パスに関しては利用環境のカスタマイズ等の講義で教える.
機能に関しては,各種シェルにより使えたり使えなかったりするうえ, コマンドも異なるため,詳細は調べてから利用するように.

コマンドの入力
シェルへのコマンド入力は,行単位で行なわれる. つまり,キーボードから入力した文字列は,最後に [Enterキー] を押すことでシェルに伝わるのである. 言い換えると,[Enterキー] を押すまではいろいろできるということだ.

連続実行,grouping
コマンド入力の基本は 1行で1コマンド であるが, 連続するコマンドを同じ行に続けて書くこともできる. 具体的には,
コマンド ; コマンド ; …
とコマンドの間に ; (セミコロン) を挟むだけでよい. こうすると,次のヒストリーとのからみで便利なことがある.
また,こうした連続実行するコマンドを ( ) で一つのグループにまとめて
(コマンド ; コマンド)
等とすることができる. グループ化された複数コマンドはシェルからは一つのコマンドとして扱われるので, ジョブ制御等での動作が変わってくる.

ヒストリー
これまで入力したコマンドを (設定した数だけ) 覚えている機能. 何回も同じコマンドをキーボードから打つより,昔のコマンドを呼び出す方が楽.
使い方は history コマンドや ! 関連を見よ.

コマンドラインの編集
[Enterキー] を押す前なら,入力行を適当に編集できる. どのキーがどのように使えるかはシェルによって異なるが, おそらく矢印キーや emacs キーバインディングは使えるものが多いだろう.

補完
コマンド名やファイル名を入力している時,あるキーを押すと 途中で残りの部分をシェルが補ってくれる機能である. 対応するコマンドやファイル名が一つしかない場合はそれ自体で補完し, 候補が複数ある場合は共通部分まで補完してくれる. さらにキーをもう一度押すと一覧表が表示されたりする.
ただし,この機能はシェルによってかなり働きが違う. 上の「あるキー」は [Tabキー] か [Escキー] , ^d などになる (シェルによって異なる) が,まずは [Tabキー] を試してみるのが良いだろう.

別名 (alias)
自分で決めたコマンド名で異なるコマンドを呼び出すことができる. いつも同じオプションをつけておきたい, コマンドが長すぎるので短いものにしたい, 分かりやすい名前にしたい,などの要望に応える機能である.
使い方は alias コマンドを見よ.

ファイル名生成 (ワイルドカード展開)
コマンド中で対応するファイル名を一々全て入力するのではなく, あるパターンを記述することで該当するファイルを指定することができる. 非常に便利なので,是非とも使いこなせるようになるべし.
このパターンを作るための文字とその役割は以下の通りである.


ただし,ファイル名の先頭にある . (ピリオド) だけは . で直接指定しないと反応しないので注意が必要だ (例外).

ワイルドカード展開の例
      > ls -Fa    ← man で調べておくこと.
      ./              .a              00.c            a.txt           b               z.txt
      ../             .b              a               abc             dummy.html

      > echo ???  ← man で調べておくこと.
      abc

      > echo [a-c]*
      a a.txt abc b

      > echo {a,z}.txt
      a.txt z.txt

      > echo *.*    ← 途中にピリオドのあるもの. ファイル名先頭の . には対応しない.
      00.c a.txt dummy.html z.txt

      > echo *      ← 全て… と言いたいがファイル名先頭の . には対応しない.
      00.c a a.txt abc b dummy.html z.txt

      > echo .* *   ← 全て… と言いたいがディレクトリの . .. にも反応してしまう.
      .    ..     .a     .b 00.c a a.txt abc b dummy.html z.txt
      

シェルに関連するコマンドや手続きについて

これ以降,詳細は man コマンドで調べるのが前提である. 忘れないように.

■ シェルに関連するコマンド,手続き ■
コマンド等 機能等解説
chsh, ypchsh 等 ログインシェルの変更.
標準シェル (/etc/shells) に載っているシェルの好きなものにログインシェルを変更できる.
阪大教育用計算機システムでは ypchsh が使える.
alias 別名 コマンド コマンドに別名を与える.
このコマンドを実行以降,指定したコマンドを別名で呼び出すことができる.
unalias 別名 別名を解除する.
history これまでに実行したコマンドの履歴リストの表示.
リストの長さには制限があるので,正確には 「直前までのコマンド履歴の一部」であるが…
!! 直前のコマンド行の再実行.
時に便利だ.
!n (nは数字) コマンド履歴リストの n番のコマンド行.
これもなかなか便利.
!-n (nは数字) 現在より n行前のコマンド行.
同じく便利.
!文字列 コマンド履歴リスト中,指定文字列が先頭にあるコマンド行で最も最近のもの.
とても便利だ. 是非とも使いこなそう.
!?文字列? コマンド履歴リスト中,指定文字列が含まれるコマンド行で最も最近のもの
便利なのだが,(人間が) 勘違いして違う行を呼び出してしまうことがあるので,使うときは注意をするべし.
↑,↓, ^n, ^p など コマンド履歴リストを直接コマンドラインに表示して利用.
無意識に使っている人も多い.

実習

上に出てきたシェルの機能,コマンド等を一つ一つ確かめてみよ.
良く分からない概念などがたぶんあるだろうから,そうした際は教官や TA に遠慮無く聞くこと.


レポート課題 (20点満点)

以下の課題について,あたうかぎり賢明な調査と考察を行い,

AppliedMath-Report-01

という題名をつけて e-mail にて教官宛にレポートとして提出せよ. なお,提出先のメールアドレスは 担当教官,TA および口頭で伝達される.
なお,レポートを e-mail の代わりに TeX で作成した書面にて提出してもよい.

  1. (j)man -a の意味を調べよ.

  2. cal を用いて,10年後の自分の誕生日が何曜日か調べよ.

  3. ls のオプションを調べ,自分で最もよい設定を探し, どう良いのか等を記述せよ. また,alias を用いて lsと打つだけでそのオプションが働くようにしてみよ.

  4. コマンドライン編集に使えるキーを調べよ. (左へ行くキー,右へ行くキー,一文字削除キー,行の後ろまで削除するキー, 行の先頭に行くキー,行の最後に行くキー等々…)

  5. 上に記した「以外の」便利なシェルの機能がないか,調べて報告せよ.
    # web 等で調べれば数多く見つかるだろう.

  6. bash, tcsh, zsh の違いを書籍ないしは web 等の資料をもとに調べよ. さらに,各々のシェルを実際に使ってみて,その違いを体験して, 自分なりの感想を記せ.




最終更新日 … $Date: 2006-04-14 00:35:17+09 $
Valid CSS! Valid XHTML 1.1!