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

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

解説

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

ログイン
unix システムにユーザとしてアクセスして利用を開始する手続きを言う.
次に示す「ログアウト」と対になる手続きである.
一般に,ユーザを識別するために「アカウント」と「パスワード」の入力が求められる.
具体的な手続きにはログインの方法(プロトコル)によって様々な形式がある. また,unix が動いているマシンの前で直接ログインする他に ネットワークを通じて遠方からログインすることもできる.
通常は,ログインすると設定してある「シェル」とよばれるプログラムが起動し, ユーザの入出力を受け持ってくれる.
ログアウト
unix システムでユーザとしてアクセスを終了する手続きを言う.
前に示す「ログイン」と対になる手続きである.
このログアウトを行なうまでは unix にアクセス中という扱いになる.
具体的な手続きはこれまた様々な形式があり,システムによって異なるため, 未知のシステムにログインする前にログアウトについてだけは知っておく必要がある.
アカウント
システムのユーザとしての個々の名称をいい,「アカウント」の他に 「ユーザネーム」などともよばれる. メールアドレスの一部として利用されることも多い.
パスワード
あるユーザであることを証明するための秘密の合言葉が「パスワード」である.
ユーザの識別を保証する手段であるため,パスワードの漏洩は避けねばならない.
そのため,パスワードはなるべく複雑なものが推奨される. 具体的には,教育用計算機の利用の手引き 「パスワードの選び方」 などにあるように,覚えやすいく推測されにくいもの,を工夫して使うのがよい. また,こまめに変更するのがよい.

関連するコマンド,手続き

操作しても支障のなさそうな範囲で以下のコマンドを試してみよう. 具体的には,

  1. ログインする.
  2. kterm を起動.
  3. kterm 上でコマンドをタイプし,[Enter]キーを押して入力.
  4. 現れた反応をみて学習.
  5. 3 へ戻って繰り返し.
となる.

(記述なし)
ログインのための手続き.
システムやプロトコルによって異なる.
教育用計算機システムの端末に直接ログインする場合, 「利用の手引き」の「ログイン操作」(p.6) を参照してログインする.

logout, exit
ログアウトする.
通常はこれらのコマンドだが,結局はシステムによって異なる.
教育用計算機システムの端末に直接ログインしている場合, 「利用の手引き」の「ログアウト操作」(p.6) を参照してログアウトする.
確実にログアウトできるように,この手続きだけは忘れないようにすること.

passwd
パスワードを変更する.
ただし,教育用計算機システムのようにある程度大規模なシステムでは異なる方法を用意していることが多いため注意が必要.
教育用計算機システムの場合,ログインした後,「利用の手引き」の「パスワード変更」(p.8) を参照してパスワードを変更する.

id
ユーザの、ユーザ名とグループ名および各番号を表示する

last
最近ログインしたユーザの記録を表示する

uptime
システムの稼働時間,ユーザ数,平均負荷を表示する.

who, w, finger, whoami
who: 誰がログインしているかを表示する
w: ログインしているユーザとその作業内容を表示する. CPU の情報もわかる.
finger: ユーザ情報を調べる
whoami: ...
who am I: 私は誰?
… 教育用計算機システムでは finger コマンドは稼働しないようになっている.

leave
何時離席すべきかを知らせる
leave 1400 : 午後2時になったら帰らないと,という時に指定する. こうすると,午後 1:55 と 1:59, 2:00, 2:01,(1分おきでずっと) に御知らせが届く.
leave +0015 : 15分後に帰らないとという時.
… 教育用計算機システムにはこのコマンドはないようだ.

注意点


コマンド操作の基本

解説

命令(コマンド)の基本的な文法
基本的な文法は,「召使いへの英語での命令」であると思えば良く,

(氏名) (動詞) (副詞) (目的語)

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

コマンド オプション 引数

と並べる(間はスペースで区切られる). コマンド+オプションが (氏名)+(動詞) に相当し, オプション+引数が (副詞)+(目的語) に相当すると思えばよい. オプションや引数をどう解釈し扱うかはコマンドに依存するので, 後述するオンラインマニュアルで逐次調べる必要がある. しかし,一般にオプションには - (ハイフン,マイナス) を前につける慣例があるので,それは知っておいた方がよいだろう.
コマンド中でよく使われるキー
コマンドを実行したが,用が済んだので終わりたい, よく分からないので止めたい,等の時にどうしたら良いか分からないというときがある. 本来はきちんとマニュアルを読んでそれに従うべきだが,マニュアルが無い, 英語で良く分からない等の状況もあるので,そういう時は慣例としてよく用いられている次のようなキー入力を試してみるとよい. ただし,^ は「Ctrlキーを押しながら」を意味する.

オンラインマニュアル

解説

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

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

コマンド

man コマンド名
オンラインマニュアル. 与えたコマンドについてのマニュアルを表示する. 何も設定しないと,たいていは英語マニュアルになる.
jman コマンド名
日本語オンラインマニュアル(教育用計算機システムの場合). 与えたコマンドについてのマニュアルを日本語で表示する. マニュアルの日本語訳が存在しなければ英語のものを表示する. 設定によっては使えない.
(j)man man
オンラインマニュアルのマニュアル(^-^). man もコマンドなので,これはあり. マニュアルの使い方についてよく分からない場合はこれを見よ.
(j)man -k キーワード
マニュアルデータベースの中からキーワードを含むようなもののコマンドを探し出して列挙する. 良く分からないがこんな感じ,というコマンドを探したりするのに使う.
xman
Xwindow 上のオンラインマニュアル. 存在するマニュアルリストが一覧で見られるなど,結構便利だが, 日本語化はまだのようだ.

シェル

解説

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
ログインシェルの変更. 標準シェル(/etc/shells)に載っているシェルの好きなものにログインシェルを変更できる.
… 教育用計算機システムでは変更できないようになっているようだ.
alias 別名 コマンド
コマンドに別名を与える. この命令以降,コマンドを別名で呼び出すことができる.
unalias 別名
別名を解除する.
history
コマンドヒストリーリストの表示.
!!
直前のコマンド行.
!n (nは数字)
ヒストリーリストの n番のコマンド行.
!-n (nは数字)
現在より n個前のコマンド行.
!文字列
ヒストリリスト中,指定文字列が先頭にあるコマンド行で最も最近のもの
!?文字列?
ヒストリリスト中,指定文字列が含まれるコマンド行で最も最近のもの
↑,↓, ^n, ^p など
ヒストリリストを直接コマンドラインに表示して利用.

課題

  1. (j)man -a の意味を調べよ.
  2. ls のオプションを調べ,自分で最もよい設定を探し, どう良いのか等を記述せよ. また,alias を用いて lsと打つだけでそのオプションが働くようにしてみよ.
  3. コマンドライン編集に使えるキーを調べよ. (左へ行くキー,右へ行くキー,一文字削除キー,行の後ろまで削除するキー, 行の先頭に行くキー,行の最後に行くキー等々…)
  4. bash, tcsh, zsh を各々使ってみて,機能を整理したものを書き, 自分なりの感想を記せ.
    # web 等で調べてより充実したレポートを作るのが望ましい.