Linux 環境の最初の最初

  1. そもそも、コンピュータとは?

  2. OS とは?
    …Operating System の略(普通名詞)で、ソフトウェア の一種です。MS 用語では「基本ソフト」となります。具体例は Windows (7/8/10), Linux (Fedora/Ubuntu/...), macOS, 等です。

  3. OS はなぜ必要?(復習)
    ハードウェア(生の機械、電気回路)をアプリケーション(ソフトウェア)が直 接いじるのは難しいし、そもそも(開発する観点から)非効率的なのでその手の 処理は別にまとめておく、ということです。また、計算機自体の効率的な利用と いう観点からも、アプリケーションとは別に、管理プログラムを走らせておいて、 ハードウェアに皮を被せて扱いやすくする、というためのものです。
    たとえばマウスのクリック等のイベント処理までいちいち Word や Excel がやっ てたんでは大変だし、そもそも(処理でも開発についても)効率が悪いです。
  4. UNIX (TM) とは? Linux とは?

unix 系OSの利用法

前提: CUI (Character/Command User Interface) という考え方

はじめてさわったコンピュータが Windows 系という人々も最近は多い(ほと んど?)と思います。しかし、まだまだ(特に UNIX 系サーバを操作したい場 合には)マウスではなくキーボードからコマンドをASCII 文字(キャラクタ) で入力することで、ユーザがサーバーにさせたいことを伝える、というのが基 本になると思います。このような操作方法を CUI と言います。
それに対になる、Windows などの画面上をマウスなどのポインティングデバイ スも用いながらプログラムを実行(処理)していくやりかたを GUI (Graphical User Interface) と呼びます。
いずれも要するにユーザがコンピュータに何らかの処理を行わせる指示をして いるだけで、本質的には差異は無い、とも言えるのです。が、CUI の場合 GUI に比べて以下の特徴があります。 当面サーバを遠隔操作するには CUI 以外は困難なので、最低限のコマンドを 押えて、なんとか思いを遂げる(?利用できるようになる)ようにしましょう。

まずは接続

その実際の利用法を簡単に説明します。例としてliweb.hannan-u.ac.jp とい うホストへ接続することを考えます。

  1. liweb へ ssh かけます。学内環境で TeraTerm を使ってください。「ス タート」から「Tera Term 」を選ぶと、 デフォルトでliweb に接続しに いきます…ではなくなった模様 (?)   接続先を聞いてくるので、
    liweb.hannan-u.ac.jp と手入力して接続してくだ さい。そのときサービスがSSHになっているのを確認してください。
    SSH とは Secure SHell の略で、手元のコンピュータとサーバの間を暗号化し て通信するプロトコルのことです。
  2. 「OK」して接続するときには以下のようなダイアログが出てきます。

    続いて以下のダイアログが出てくるかもしれません。

    これはそのまま「続行」してください。

  3. そして、上の「SSH認証」ダイアログにユーザ名とパスフレーズを入れて ください。これらは教室のWindows にログインするものと同じです。

  4. 正しくパスワードが入力できれば、
    Last login: Mon Apr 27 12:16:28 from puffin.hannan-u.ac.jp
    [maechan@liweb ~]$
    
    のように、最後にログインした時刻をメッセージしたあと、シェル の プロンプト(ここでは [maechan@liweb ~]$ と表示して、 入力を「促し」ている)が表示されます。これで、ログイン成功です。

  5. ここに unix の コマンド をどんどん入力していけば、それにしたがっ て処理を実行してくれます。これはすなわち、コマンドで何か仕事をお願いす るとそれに対応した仕事をやってくれるという、 コマンドを 単語(語彙)としたコンピュータとの対話 と考えることが出来るかも しれません。

ちなみに UNIX のファイルシステムは、階層ディレクトリと呼ばれツリー (木)構 造になっていて、Windows と考え方は同じです。ディレクトリの区切りは"/"で、 Windows の "\" ("\"の半角が 日本語環境のASCII コード部分が本家 ASCII と互換性が無 い 、というのは詳細は略)とは異なります。現在自分がいるディレクトリ (カレントディレクトリ) は "."、その一つ上は ".." として表せます。また、 ログインしたときのディレクトリを ホームディレクト リといいます。

シェルについて

UNIX 系のコンピュータの場合、ログインするとそのユーザ用にシェル というプログラムが1つ起動され、以後の操作(コマンド)は全ていわ ゆるシェル経由で動かされることとなります。 つまり、シェルとはシステム(ハードウェア+OS)ユーザ の間 にあって、ユーザの意志をシステムに伝える仲介役(窓口?) と言えます。シェルには環境変数などで設定を行えたりもしますし、ま た簡単な制御構造(繰り返しや条件分岐など)ももってますので、ちょっとし たプログラムのようなものをかくことも可能です(これのことを シェルスクリプトと言います)。詳細はここでは 省略しますが、このシェルにより、かなり柔軟な操作が実現できる、というこ とは覚えておいてください。後に述べるパイプやリダイレクションもシェルが 提供する機能です。
ちなみに Windows などでエクスプローラなどのことをシェルということがあり ますが、これも UNIX での役割と同様、(アプリケーション起動を行う、等)シ ステムとユーザのあいだをとりもつプログラム、くらいの意味だと思います。
ここで、シェルもたんなるプロセス(プログラム)の1つである、 ということは心にとめておいてください。シェルスクリプトを(外部プログラ ムのように)動かすことも可能ですが、その時にはシェルが(別の)シェルを 起動して、その(子)シェルに仕事をさせているわけです。ログインした時に 起動されるシェルを login shell (そのまま?)といい、これはユーザー毎 に /etc/passwd に登録されています。

シェルには bash, zsh. tcsh 等いろいろな種類があり、出来ることや文法が 微妙に違います。スクリプトを書くには bourne shell 系の bash, zsh が良 いとされています。sh, csh 以外の(後になって作られた)bash, tcsh 等の シェルでは、コマンドラインの編集機能(矢印キーで過去の履歴を たどったり、等)があります。これも詳細は略しますので、各自で調べてくだ さい。ちなみにlinux の大抵のディストリビューションでは

$ ls -l /bin/sh /bin/csh
lrwxrwxrwx  1 root root 4  3月  1  2005 /bin/csh -> tcsh
lrwxrwxrwx  1 root root 4  2月 22  2005 /bin/sh -> bash
($ はプロンプトのつもり。以下同様。「->」 はリンクの意味)となってい ますので、実体はそれぞれ bash,tcsh です。

最低限のコマンド

ここでは、本当の本当に最低限のコマンドについて述べます。 以下のコマンドは、ファイル・ディレクトリ(Windows のフォルダに対応)を 取り扱うためのもので、Windows だとエクスプローラが担当(?)しているも のです。

それぞれのコマンドにはオプションがあります。たとえば、ls には -l という オプションをつけると、詳しいリストを表示する機能があります。以下は普段 使いの Mac OS Xでのホームディレクトリを表示させたものです。
$ ls -l
total 56
drwx------+  3 maechan  staff   102  6 24  2014 Applications/
drwxr-xr-x+  9 maechan  staff   306 10 22  2012 Calibre Library/
drwx------+  4 maechan  staff   136  4 23 21:10 Desktop/
drwxr-xr-x+ 28 maechan  staff   952  4 25 10:01 Documents/
drwx------+ 12 maechan  staff   408  4 25 08:00 Downloads/
drwx------@ 61 maechan  staff  2074  4  1 08:52 Library/
drwx------+ 32 maechan  staff  1088  4 25 14:33 Mail/
drwx------+ 11 maechan  staff   374  4  1 16:36 Movies/
drwx------+  7 maechan  staff   238  2 19 07:40 Music/
drwx------+ 17 maechan  staff   578  4 25 06:38 Pictures/
drwxr-xr-x+  6 maechan  staff   204  7 25  2014 Public/
drwxr-xr-x+  3 maechan  staff   102  1  1  2014 Sites/
drwxr-xr-x+  5 maechan  staff   170  7 25  2014 VirtualBox VMs/
drwxr-xr-x+ 40 maechan  staff  1360  4 12 14:00 bin/
drwxr-xr-x+  6 maechan  staff   204  3 14 07:37 common/
lrwxr-xr-x   1 maechan  staff     9  1  9  2012 doc@ -> Documents
drwxr-xr-x+  2 maechan  staff    68  3 31 18:59 dwhelper/
drwxr-xr-x+ 18 maechan  staff   612  4  1 16:43 lib/
lrwxr-xr-x   1 maechan  staff    18 10 14  2014 projG@ -> study/mining/projG
lrwxr-xr-x   1 maechan  staff    12  2  5  2012 study@ -> common/study
lrwxr-xr-x   1 maechan  staff     4  5 11  2014 tmp@ -> /tmp
-rw-r--r--+  1 maechan  staff  1543  2 16 16:03 weka.log
lrwxr-xr-x   1 maechan  staff    11 11  1 18:38 work@ -> common/work
lrwxr-xr-x   1 root     wheel    28  6 20  2014 www@ -> /Library/WebServer/Documents
他のものも含めて、 詳細は(man か本か WWW か何かで)調べましょう。

サーチパスと環境設定

いくつかのコマンドを紹介してきましたが、コマンドの「実体」は何処に あるのでしょうか? UNIX には沢山のコマンドが用意されていますが、そ れらの多くは /bin, /usr/bin, /usr/ucb 等のディレクトリに納められて います。

コマンドの実体がどこにあるのか調べるためには、"which" というコマンドを 使います。

    $ which ls
    /usr/bin/ls
    $ which cd
    cd: shell built-in command.

"path" という環境変数を設定することによって、コマンドの実体を何処から、ど ういう順番で捜すかを指定することができます。どのように設定されているか は、"echo" を使って見ます。

    $ echo  $path
    /usr/ucb /usr/bin /usr/etc .
    $ set path=(/usr/local/bin $path)
    $
この例では、現在の path の設定に加えて、/usr/local/bin というディレク トリを最初に捜すように設定しています。

あと、環境設定としてよく行われるの (? csh の場合)は;

初期設定ファイル

さて、環境設定等を毎回手でやるのは面倒です。このような毎回使うような設 定は、login shell が csh や tcsh の場合には、ホームディレクトリの下の ".cshrc " というファイルに書いておくことによって、起動時に自動的に実行 されます。
liweb はこっち (tcsh) です。皆さんのディレクトリには、既に .cshrc ファ イルがあると思いますので、望みの設定を書き足せばよいでしょう。
ちなみに、最近では多くの Linux ディストリビューションではログインシェル が bash となっています。その場合、ホームディレクトリ(ログインした時に いるところ)の.bash_profile というファイルを自動的に読みこんでからプロ ンプト(入力待ち)になります。いずれにせよ、自分が使いやすいようにカス タマイズすることが可能です。厳密には、.bash_profile が呼ばれて、その中 で .bashrc が呼ばれるので、インストール時の設定によっては、自分 で.bash_profileに
source ~/.bashrc
と書いておかないといけないかもしれません。

パーミッション

パーミッションに関しては、非常に大切なので、ここであらためて説明し ておきます。UNIX で作業をしていると、時々 permission denied とか no write permission などのメッセージに出会うことがあります。UNIX はマルチユーザの OS なので、他人に勝手にファイルを見られたり、書き 換えられたり消されたりしないように、パーミッションと言うものを設定 できます。

上述の"ls -al" を実行してみてください。最初の方に "r" とか "w", "x" が並んでいると思います。これがそのファイルのパーミッションを表 しており、最初の文字はファイルのタイプ(普通のファイルであるとか、ディレ クトリであるなど)、次の三文字が自分、次がグループ、最後が他人のそれぞれ "読み込み"、"書き込み"、"実行"ができるかどうかを表しています。

このパーミッションを変えるためのコマンドが "chmod" です。使い方は、

    chmod [1][op][2] [ファイル・ディレクトリ名]
です。ここで [1]、[op]、[2] はそれぞれ、
    [1] ... 誰に対してか
                  u ... ユーザに対する許可
                  g ... グループに対する許可
                  o ... その他全てのユーザに対する許可
    [op] ... どうするか 
                  + ... を追加します。
                  - ... を削除します。
                  = ... を明示的に代入します
    [2] ... 何を
                  r ... 読み取り許可
                  w ... 書き込み許可
                  x ... 実行許可
例えば loveletter というファイルを他の人に読まれないようにするために は、"chmod go-r loveletter" とします。 また、chmod は
    chmod [8進数3桁] [ファイル・ディレクトリ名]
という使い方もできます。8進数のビット表現で rwx を指示するのですが、詳 しい使い方は各自で調べてみてください。

(テキスト)ストリーム=標準入出力、という考え方

UNIX では、「シェル」 というプログラムがユーザの入力したコマンドを解釈し て実行する、というのは上で述べましたが、シェルがユーザに提供している機能 のうち、非常に重要なものが(テキスト)ストリーム、すなわち文字情報の「流 れ」という考え方で、具体的な適用にはリダイレクションとパイプがあります。

UNIX では、ファイルの内容やあるコマンドの出力をほかのコマンドの入力とし て使ったり、コマンドの出力をファイルに格納したりすることができます。これ を利用して様々なコマンドの出力を組みあわせることによって、かなり柔軟な処 理ができるようになっています。

これは多くのコマンドが「標準入力」から入力を行ない「標準出力」に出力する ように設計されているからです。これぞUNIXというかシェルの哲学(小さな単純 なプログラムの組み合わせで複雑な処理を行う)ですので、なるべく見習いましょ う。
普通は入力はキーボード、出力はディスプレイですが、 ">" や "<" を使うことによってそれらを切り替えることができます。例えば、 ファイルの詳しい一覧を(標準出力、すなわちディスプレイに書き出すかわりに) "filelist" というファイルに書き込むには、
% ls -al > filelist[enter]
とするだけでできます。さらに(キーボードから入力せず)このファイル内容を、 並べ変えを行なう"sort" コマンドの入力にするには、
% sort < filelist[enter]
とすればよいです(実はこの場合は sort filelist でよかったりします)。ち なみに、出力をファイルの最後に追加 (append) したい場合は ">>" を使います。

あるコマンドの出力をほかのコマンドの入力にするときは、パイプという機能 を使います。これは、コマンドを "|" でつなぎます。例えば "file1" の内容 をアルファベット順に並べ変えて一画面ずつ表示するには、

% cat file1 | sort | more[enter]
とします。

このパイプとリダイレクションは、うまく使うととっても便利な機能なので、 ぜひいろいろ試して、技を修得してください。

正規表現

シェル上では、ファイル名の検索などに正規表現を使うことができます。これは 最近ではポータルサイトなんかでのキーワード検索にも導入されてるようです。 コマンドの引数にファイル名を与える場合、"*" は 0 文字以上の任意の文字列 にマッチし、"?" は任意の 1 文字にマッチします。

"{A,B,…}" (A,B,… は文字列) は A,B,… のどれかに、"[…]" (…は複数個 の文字) は、その中のどれか1文字とマッチします。また "[a-e]" のように "-" 記号によって範囲を表わすこともできます。

さらに、正規表現とは少し違いますが、"~" で自分のホームディレクトリを、 "~name" で name さんのホームディレクトリを表わすことができます。

ただし注意すべきは、コマンドにこれらの文字列が渡される時に、コマンドがこ の正規表現を解釈しているわけではなくて、シェルがこれらをファイル名の列に 変換してから渡すため、逆にコマンドにこのような文字を渡したい場合"'" など で閉じるか、"\*" のようにする(エスケープするという)必要がある、という ことです。

シェルスクリプト

利用例

利用例(1):テキスト編集(エディタ)

コンピュータの利用のうち、非常に重要かつ頻繁なもののうちの一つに(文書や プログラムなどの)テキストの作成があります。その作成のためのツールが「エ ディタ」です。かなりの頻度でエディタを使うことが多いわけですから、これの 操作性が環境のよしあしを決める重要な要素になります。

UNIX 上で動作する(スクリーン)エディタとして、vi と emacs が代表的なも のです。vi はほとんど全ての UNIX に標準で備わっているエディタです。独自 の操作法を使うため、初心者にとってはとっつきにくいかもしれません。でも慣 れればかなり使い勝手はよい、というか、非常に効率的な編集作業がおこなえま す。

emacs (GNU Emacs) はフリーソフトウェアとして広く利用されています。vi と 比べるとワープロやパソコン用エディタに近い操作性を持っています (コントロー ルキーを使いまくる独特のキーバインドには若干の慣れが必要ですが)。また、 単なるエディタに留まらず、emacs の上から電子メールやニュースを読んだり、 様々なネットワークサービスを利用したりもできます。ただ、資源消費はかなり のものなので、個人利用の計算機以外では使わないほうがよいかもしれません。

ここでは最低限の vi の利用法を説明しておきます。emacs については興味ある 人はぜひ自分で調べてみてください。

利用例(2):電子メール

たんにログインしてファイル操作しているだけではなんなので、活用の1つとし て、電子メールを利用してみましょう。
ここでは最低限の利用方法のみを示しますので、興味ある人は自分で調べてくだ さい。漢字仮名の取り扱いもここではおこないません。また、Windows をクライ アントとして利用する方法もありますが、その説明もまた他に譲ります。

前田としゆき / maechan@ieee.org

講義用スタイル
印刷用スタイル (開いてから、ページを再度更新してください)