コマンドでの操作の基本

端末エミュレータ(コマンドを操作するためのソフトウェア)を起動

しばらくは,阪大の情報教育システムへ遠隔ログインして CentOS7 を使うという想定で授業資料を用意する. もちろん他の環境でも問題ないので(cygwin はできないことがやや多いかな),適宜,読み替えて資料を読み込もう.

さて,まずは unix (centos7 など)そのものを起動しよう. そして, ここで,左上の「アプリケーション」→「お気に入り」→「端末」とたどってクリックする

cenos7-to-launch-terminal

すると,下の画面のように,「コマンド」を打ち込んだり,応答を得たりすることのできるソフトウェアが起動する. あとでこれを使うので,そのままにして,先に進もう.

aa

また,これから授業が進むにあたり,まあしばらくはこの「端末」ソフトの上で作業を行うのでそう思っておこう. 最初は,とにかくキーボードから入力をして,応答を眺める,という感じになるだろう.

ちなみに,他の OS や環境でも,「端末エミュレータ」とか「terminal」というような名前で似たようなアイコンがあるだろうから探して起動しよう.

コマンド操作の基本

さて,すこしばかりお勉強の時間だ.

unix の cui 上で操作を行うということはどういうことか解説しておこう.

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

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

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

命令形の動詞 副詞 目的語

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

コマンド オプション 引数

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

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

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

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

キー 解説
^c 実行中のコマンドを停止する,かもしれない.
^d
or
.(ピリオド)のあとに Enterキー
コマンドが入力を求めているとき,「入力はもう終り」を意味する.
なお、シェルも「入力を求めるプログラム」であるので,
設定によってはこのキー入力でシェル自身が終了してしまうので注意すること.
^g 編集系の実行中コマンドを停止する,かもしれない.
^] 通信系の実行中コマンドの対話実行を停止する,かもしれない.

^ や C- は「Ctrl キーを押しながら」,  M- は「Esc キーを一旦押して離してから」という意味

Unix でよく使われる特別なキー操作に、
「Ctrl キーを押しながら」, 「Esc キーを一回押して離してから」
というものがある.それぞれ、 ^, M- という記号で書かれることが多いぞ.
また、^ の代わりに C- と書くこともあるぞ.いずれにしても頻出するので、覚えておこう.

  実習のお時間だ.操作しても支障のなさそうな範囲で, 初心者ガイドなどに出てきたコマンドを試してみて,コマンド操作の雰囲気をつかんでみよう. 具体的には,次の手順で行うと良い. なお,この手順はこの授業での実習の基本なので,「端末」ソフト(端末エミュレータなどと呼ぶ)の扱いには慣れておくべし.

  1. 「端末」ソフト(端末エミュレータ)を起動する(もうやってるはずだね).
  2. その上で,初心者ガイドに出てきた無難そうなコマンド(ls とか pwd とか,w とか)をタイプし,[Enter] キーを押して入力.
  3. 現れた反応をみて学習.
  4. 以下繰り返し.

端末エミュレータとは

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


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

unix 文化は「まずは自力で調べよ」という大人な部分 がある. そのため,コマンドには基本的にオンラインのマニュアルが用意されており,そのマニュアルを参照することで使いこなせるようになることが期待される. また,unix のコマンドは長い歴史の中で大勢の開発者が少しづつ追加,改良してきたものなのでその名前から使い方,オプション等はかなり違う (要するにバラバラ). そうした意味でも,各コマンドの目的,動作の詳細,オプションや各種設定の仕方等をオンラインマニュアルから読んでからユーザはコマンドを使うという「流れ」が unix cui 操作の大前提となっている.

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

  • 名称 : 名前と一行程度の簡単な説明.
  • 書式 : オプションや引数をどう並べるか.
  • 解説 : 何をするコマンドなのかの解説およびオプションの説明.
  • 歴史 : そのコマンドにまつわる歴史.
  • 環境変数や設定ファイルについて.
  • 使用例 : 簡単な例. これを最初に見る,というのが実は良い.
  • 関連項目: 関係する,もしくは似たようなコマンドの列挙.ちょっと探している機能と違う,というときはここをよくみる.
  • バグ : バグや使用上の注意点がかかれている.

という感じになっている.

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

オンラインマニュアルに関連するコマンド

下記に,オンラインマニュアルの詳細を示しておくが,まあ基本は,

man 知りたいコマンド

と入力することだ.それ以上はおいおいでいいだろう.

コマンド等 機能等解説
man コマンド名 オンラインマニュアル.
与えたコマンドについてのマニュアルを表示する.
何も設定しないと,たいていは英語マニュアルだ.
jman コマンド名 (阪大情報教育システムの CentOS では使えない) 日本語オンラインマニュアル.
与えたコマンドについてのマニュアルを日本語で表示する.
マニュアルの日本語訳が存在しなければ英語のものを表示する.
設定によっては使えない.
(j)man man オンラインマニュアルのマニュアル(^-^).
man もコマンドなので,これはアリなのだ.
マニュアルの使い方についてよく分からない場合はこれを見よ.
(j)man -k キーワード (阪大情報教育システムの CentOS では使えない) マニュアルデータベースの中からキーワードを含むコマンドを列挙する.
良く分からないがこんな感じ,というコマンドを探したりするのに使う.
xman (阪大情報教育システムの CentOS では使えない) GUI でのオンラインマニュアル.
存在するマニュアルリストが一覧で見られるなど,結構便利.
英語表示のみなことが多い.
info 主にアプリケーション向けのオンラインマニュアル.
操作方法が一種独特.
一種のハイパーテキスト.

  以下のようなコマンドを入力して応答を見ることで,オンラインマニュアルコマンドを試してみよう. 色がついているとか,行番号は気にしなくて良い.

1
2
3
4
5
6
man ls
man pwd
man rm
man w
man man
man mkdir

他にも,初心者ガイドなどに出てきたコマンドを対象としてマニュアルを調べてみるとよいだろう.

man コマンドの操作で困ったら

man などのコマンドでオンラインマニュアルを画面に出力したはいいが,その後どうやって操作したらよいかがわからないかもしれない. 多くの場合、こうした画面出力は背後で less というコマンドが担っているので,このコマンドの操作方法に従って操作すれば良い.

まあ,困ったらとりあえず,キーボードの q キーを押そう.だいたいもとに戻るはずだ.

他に何ができるか,具体的には,man less などとして調べてみよう.


シェル

さて次に知っておくといいのは,シェルと呼ばれる特別なソフトウェアについての情報だ. この特別なソフトウェアであるシェルと人間,そして OS の関係はおおよそ次のような図で表せる.

aa

要は,unix で cui 操作をしようとすると実はそこには「シェル」というソフトウェアが既に起動していて,人間の命令 (コマンド) を待ち構えていて,命令をするとそのとおりにいろいろやってくれるのだ.

具体的には,「端末」ソフトを起動したとき,

>



$

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

基本的に,この「シェル」プログラムを通して人間の文字入力を命令としてコンピュータに伝えるのがunix での cui 操作である. つまり,unix os と人間の間に,シェルが入って両方の橋渡しをしてくれるのである. イメージとしては,

シェルは「同時通訳者」もしくは人間の「執事,召使い」

と思えばよい. 実際,シェルは細かいことを人間の代わりに覚えておいてくれたり,探し物をしてくれたり,間違ったコマンドを直してくれたり,とまさによくできた召使いといってよい.

結局,unix での cui 操作に慣れるというのは,召使いであるシェルへの命令の仕方に慣れる ということであるともいえる.

ちなみに,シェルにはいろいろな種類があり,好みに応じて好きなものを選ぶことができる. これ以上の詳しい解説はシェルスクリプトを学習するときに行なう.

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

  • シェルの操作
  • 対象プログラム自身の操作

という二つのファクターが入ってくるので,この二つのファクターに関する知識が要求されること,問題が起きたとき (特に初心者は) 混乱しやすいという点である.

これは,意識して区別するようにしていけばすぐ分かるようになる. よく分からないときは,自分が困っている原因がどこにあるのかをまずはっきりさせるようにすると解決が早いだろう.

シェルの種類

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

系統 性質
sh系 sh という最もシンプルかつ古いシェルに端を発する.
シンプル.
機械的処理に向く.
対話的処理が分かりにくい.
ちなみに,今の多くの Unix で sh と称されているものの実体は bash だったりするので、本当の元祖 sh の素朴な機能を実感することは難しい.
csh系 C 言語にやや似た文法.
対話的に使いやすい.
シェルスクリプトでやや問題が生じやすい.

[sh系] の比較的新しいものに bash, [csh系] の比較的新しいものに tcsh があるので,そのどちらかを使っておけば良いだろう. また,zsh や fish という非常に強力なシェルも存在するので,興味あるものは一度調べておくのがよい(教員のおすすめは fish だ).

強力なシェル fish

おすすめのシェルとして fish というものがある.Unix を使っていて「ここがこうだったら良いのにな」という細々した希望の一部が実現されていて,なかなか便利で強力だ.

先の授業回で 選択肢2. や選択肢3. の環境を使えるようにした人は fish を自分用にインストールすることも可能なので,ちょっと調べて試してみると良い(たとえば,CentOS にインストールしたかったら,”fish CentOS インストール” という文言でインターネット検索をしてみればよいだろう).

シェルの一時変更

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

たとえば,

1
tcsh

と入力して tcsh シェルを起動してみよう.その後, lspwd など,様々なコマンドを入力してみて,少し気配が違うことをがわかるだろうか(まあ,今はわからなくても良い). そしてその後,

1
exit

と入力して(最初のシェルに)戻ってこよう.

ログインシェルの変更

ログインすると自動的にあるシェルがユーザ用に起動し,それ以降ユーザと unix システムの橋渡しをする. この,ログインすると自動起動するシェルをログインシェルと呼ぶ. ログインシェルはシステムの標準シェルの中から自分の好みのものを選択して変更することができる.

ただし,標準シェルとは /etc/shells に登録されているものをいう. 現状でどんなものが登録されているか,試してみよう.

1
less /etc/shells

と入力してみれば良い.

aa

という感じの結果が出てくるはずだ. とりあえず,この環境では(許可されていれば)実質的に

/bin/sh, /bin/bash, /bin/csh, /bin/tcsh

の4種類からシェルを選択できそうだ,ということがわかる. ちなみに,nologin というのは読んで字の如し,「ログインできない」ように設定されたシェルもどきだ. 気になる人は man nologin としてマニュアルを読んでみよう.

ログインシェルの変更方法については後述してあるのでそこを見よう(ただし,阪大情報教育システムの CentOS では変更できない).

シェルの機能

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

コマンドの入力

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

連続実行,grouping

コマンド入力の基本は 1行で1コマンド であるが,連続するコマンドを同じ行に続けて書くこともできる.具体的には,

コマンド; コマンド; …

とコマンドの間に ; (セミコロン) を挟むだけでよい.こうすると,次のヒストリーとのからみで便利なことがある. また,こうした連続実行するコマンドを ( ) で一つのグループにまとめて

(コマンド; コマンド)

等とすることができる. グループ化された複数コマンドはシェルからは一つのコマンドとして扱われるので,後述のジョブ制御等での動作が変わってくる.

ヒストリー

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

コマンドラインの編集

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

補完

コマンド名やファイル名を入力している時,あるキーを押すと途中で残りの部分をシェルが補ってくれる機能である. 対応するコマンドやファイル名が一つしかない場合はそれ自体で補完し,候補が複数ある場合は共通部分まで補完してくれる. さらにキーをもう一度押すと一覧表が表示されたりする.

ただし,この機能はシェルによってかなり働きが違う. 上の「あるキー」は [Tabキー] か [Escキー] , ^d などになる (シェルによって異なる)が,まずは [Tabキー] を試してみるのが良いだろう.

別名(alias)

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

ファイル名生成 (ワイルドカード展開)

コマンド中で対応するファイル名を一々全て入力するのではなく,あるパターンを記述することで該当するファイルを指定することができる. 非常に便利なので,是非とも使いこなせるようになるべし.

このパターンを作るための文字とその役割は以下の通りである.

文字 意味, 役割
? 任意の一文字
* 任意文字列 (0文字以上)
[] [ ] 中のどれか一文字. - で範囲指定もできる.
{文字列1, 文字列2,…} {} 中の , で区切られたどれかの文字列.

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

ワイルドカード展開の例

以下に、例を示そう. > に続けて書いてあるのが入力コマンド、そのあとがシェルからの返答出力だ.

 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
> ls -Fa

./ .a 00.c a.txt b z.txt
../ .b a abc dummy.html

> echo ???

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

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

ざっと、リストにしておこう.

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

  実習のお時間だ. 上に出てきたシェルの機能,コマンド等を一つ一つ確かめてみよう. 良く分からない概念などがたぶんあるだろうから,そうした際は教官や TA (もしくは CLE の掲示板の Q and A に書きこんで)に遠慮無く聞くこと.

レポート

以下の課題について,なるべく一生懸命な調査と考察を行って,
2020-AppliedMath7-report01
という題名をつけて e-mail にて教官宛にレポートとして提出しよう. なお,レポートを e-mail の代わりに $\TeX$ で作成した書面にて提出してもよい.

  1. man -a の意味を調べよ.
  2. cal を用いて,10年後の自分の誕生日が何曜日か調べよ.
  3. ls のオプションを調べ,自分で最もよい設定を探し,どう良いのか等を記述せよ. また,alias を用いて ls と打つだけでそのオプションが働くようにしてみよ.
  4. コマンドライン編集に使えるキーを調べよ. (左へ行くキー,右へ行くキー,一文字削除キー,行の後ろまで削除するキー,行の先頭に行くキー,行の最後に行くキー等々…)
  5. 上に記した「以外の」便利なシェルの機能がないか,調べて報告せよ.
  6. bash, tcsh, zsh の違いを書籍ないしは web 等の資料をもとに調べよ.さらに,各々のシェルを実際に使ってみて,その違いを体験して,自分なりの感想を記せ(zsh は環境によっては体験できないので,その場合は zsh を使ってみて,というのはしなくてよい).
  7. 可能な人は,fish シェルをインストールし,自分のログインシェルとして指定してみよう(これからしばらくはそれを使ってみる,ということだ).