Unix 入門

by Seiji Matsumoto


目次

  1. 参考文献
  2. 基本的な用語
  3. 基本的なファイル操作など
  4. プログラムの起動方法
  5. パイプとリダイレクト
  6. ファイルやディレクトリのパーミッションの設定
  7. 正規表現
  8. プロセスの kill について

1. 参考文献

最近では UNIX や Linux 関連の参考書も数多く出版されていますが、 インターネット上にも、多くの情報があります。 以下、私がみつけた日本語での解説ページをいくつか紹介します。 各自でもいろいろと探してみてください。

2. 基本的な用語

以下、UNIXに触れるためのいくつかの基本的な用語を説明します。

オペレーティング・システム (OS) について
「ワープロやお絵書きソフト、データベース・ソフトなど一般ユーザが 直接操作するソフトのことをアプリケーション・ソフトと言い、 これらのアプリケーション・ソフトをコントロールしたり アプリケーション・ソフトとハードウェアの 仲立ちをしてくれるソフトのことを基本ソフトあるいは オペレーティング・システムと言う…」 というのがおそらく一般的な解説だと思います。 しかしOSを厳密に定義することは難しく、例えば、 マイクロソフトの裁判では、 「ブラウザは OS の一部か?」というのが問題になりました。
UNIX について
1960年代後半にベル研究所で誕生した高機能 OS で、 マルチユーザ、マルチタスク、ネットワーク機能 (TCP/IP) などを実装していて、インターネットはこの UNIX マシーンを 繋ぐネットワークとして開発されてきました。 以前は(1980〜1990年台、いろいろなメーカーが独自の UNIX を販売してしていましたが、現在では、それらに代わって、 「Linux」や「FreeBSD」などのフリーな UNIX 互換のOSが 一般に広く使われるようになりました。
Linux とは (linux.or.jp の説明)
Linus Torvalds および世界中の多くの開発者によって 開発された UNIX クローンで、 GNU General Public Licence のもとで配布されるフリーソフトウェア。 もとは Intel 社の CPU を積んだパソコンの上で動くように 開発されましたが、現在ではマックや SUN、HPなど のワークステーション、さらにはザウルスなどのように手のひらに載る 小さなコンピュータの上でも動きます。 もともとは、カーネルと呼ばれる OS の中核部分のことを 指しますが、最近ではこの Linux カーネルのもとで動作する さまざまソフトを集めたもの (いわゆるディストリビューション) を Linux ということも多いです。 日本の Linux 情報 (Javascript を ON にする必要あり) をはじめ日本にも多くの有用なページがあります。 検索エンジン で調べると関連ページが無数に見つかるので、 いくつかのキーワードを追加して検索した方がよいでしょう。 また、Linux 以外のパソコン上で動くフリーな UNIX互換 OS としては、FreeBSD というのもあります。
Debian について (debian.org の説明)
上に書いた Linuxの「ディストリビューション」のひとつです。 詳しくは、 Debian GNU/Linux のホームページなどを参考にしてください。
Graphical User Interface (GUI) と Character User Interface (CUI) について
Graphical User Interface (GUI) とは画面上の絵や図形などを マウス等で操作することによってコンピュータに命令を与える方式。 直観的で分かりやすいことも多いですが、 命令が複雑になってくるとGUIが必ずしも使いやすいとは言えません。 一方 Character User Interface (CUI) とはキーボードで文字を 入力してコンピュータに命令を与える方式で、 出力も文字であることが多く、 絵や図形は取り扱いにくいですが、 マウスを使わなくてもいいので、 さまざまな操作を素早く行うことができます。 実際には両方を適当に使い分けるのが便利でしょう。
シェル (shell) について
Unix(とその互換OS)においてユーザが入力した命令を解釈したり、 実行するプログラム (コマンド・インタープリタ)。 いろいろな種類のシェルがあり、 bash、tcsh, zsh などがよく使われます。 KDE では、貝殻マークのボタンをクリックすると起動します。
X Window System について
UNIX (とその互換OS) の上で動くサーバ・クライアント方式の プログラムでグラフィカルな環境 (ディスプレイやマウスのコントロールなど)を提供します。 略して「X」。 この X の上で KDE、GNOME などのデスクトップ環境プログラムや その他のさまざまなグラフィカルなプログラムが動きます。 実際、Linux や FreeBSD などに標準で搭載されているのは XFree86 という フリーソフトウェアです。
プロセス (process) について
OS (正確にはカーネル)が管理し実行するプログラムの最小単位。 ps コマンドで現在走っているプロセスを表示する ことができます。

3. 基本的なファイル操作など

GUI で行う

GUI でファイルやディレクトリの操作をする場合、 覚えなければいけないことはそれほどありません。 例えば konqueror の上部に表示されているメニューや右ボタンを クリックして現れるメニューから必要なものを選んでください。 ファイルやディレクトリ(フォルダ)の作成、削除、移動などはもちろん パーミッションの設定なども簡単にできます。 ファイルやディレクトリを違うディレクトリに移動するには、 Konqueror のウィンドウを2つ開いてドラッグ&ドロップするのが 簡単です。

CUI で行う

マウスを使わずより速く操作したい場合、 もっと複雑な操作をしたい場合、 あるいは逆にもっと単純な操作をしたい場合、などには基本的な UNIX のコマンドをしっておくと便利です。 たくさんの UNIX のコマンドを覚える必要はありませんが、 よく使うコマンドはある程度知っているといいでしょう。 しかし man というコマンドだけはぜひ覚えておきましょう。 それだけ覚えて置けば他のコマンドの使い方は man で調べることが できます。 「シェルの基本的なコマンド」 にまとめてありますので活用してください。

. で始まるファイル名について

UNIXでは"." (ピリオド) で始まる名前をもつファイルがたくさん存在します。 それらはログインした時の自分独自の設定や いろいろなソフトの設定を保存するためのファイルなどです。 これらのファイル名は ls では表示されません。 表示するには -a とオプションをつけて ls -a とします。

konqueror でこれらのファイルを表示するには、 「表示」→「隠しファイルを表示」をチェックします。

ディレクトリの相対表記

ひとつ上のディレクトリは「../」で表し、 今いるディレクトリを表すには「./」で表します (ディレクトリであることを明示するために「/」 を書いてありますが、なくてもかまいません)。 例えば、現在いるディレクトリの絶対パス表示が、 「/home/a/a020000/」だとすると、 「 ../ 」 は「/home/a/」という ひとつ上の(親の)ディレクトリを表します。 このようにこの相対パス表示を使う方が 絶対パス表示 (例えば /home/a/a020000/) を使うより便利こともあります。

ところで自分のホーム・ディレクトリは「 ~/」で 表すことができます。 またユーザIDが a020000 の人のホーム・ディレクトリは 「~a020000/」と表します。

コマンド名やファイル名の補完について

UNIXでは長い名前のコマンドやファイル名を使うことが多いので、 多くのシェルで 名前の補完機能がついています。 bash の場合、途中まで入力して tab キーを押してください。 候補が一つしかない場合には、それだけで補完してくれます。 いくつか候補がある場合には tab キーを2回押せば候補一覧が 表示されます。

4. プログラムの起動方法

いろいろなプログラムを起動するには、 GUI ではアイコンをクリックしたり Kメニュー(KDEの場合)などから選びます。 CUI ではプログラム名を直接入力します。 例えば、sylpheed というメールソフトを起動するには、 sylpheed のアイコンをクリックしてもいいですし、 シェルで sylpheed と直接入力しても起動できます。

5. パイプとリダイレクト

パイプ

Unixではいろいろなコマンドを組み合わせて使うことができます。 例えば ls の出力が長い時

$ ls -l | more 

とすると ls の出力が more の入力となって画面に現れます。

ただしここで、$ はプロンプトと呼ばれ、命令待ちの状態を 示しています (この文字は入力しません)。 $ ではなく違う文字列を指定することもできます。 「ユーザ名@ホスト名:ディレクトリ名$ 」のような長い プロンプトもよく使われます。

$ ps aux | grep matsu

とすると全てのプロセスの中から matsu という文字列を 含むプロセスだけを取り出すことができます。

$ ps aux | grep matsu | more 

のようにさらに多くのコマンドを組み合わせることもできます。

リダイレクト

標準出力をファイルに書き込みたいときには > を使います。 例えば ls の出力を fooに書き込む場合には

$ ls > foo

とします。 ファイルfooの終りに付け加えたいときには

$ ls >> foo  

としてください。 このように出力先を変えることをリダイレクトと言います。

6. ファイルやディレクトリのパーミッションの設定

ファイルやディレクトリのパーミッションについて

UNIX はもともと複数の人が使えるように設計された(マルチユーザの) オペレーティング・システム (OS) なので、 自分のファイルやディレクトリが、他人に読まれたり、 書き換えられたりしないように、アクセス許可(パーミッション) を設定することができます。

konqueror を使った設定

konqueror を使えば簡単にパーミッションを設定できます。 ファイルのアイコンの上で右ボタンを押して、 「プロパティ」→「許可情報」を選び、 許可を与える項目をチェックしてください。

シェルで現在のパーミッションを調べる

シェルを立ち上げ ls -lとするとファイルの一覧が 表示されます。 最初の方に並んでいる "r" とか "w"、"x" がパーミッションを表しています。 最初の文字はファイルのタイプ(ディレクトリのときは d)を表し、 次の3文字がユーザ本人、次の3文字がグループ、最後の3文字が 他人に対して、それぞれ"読み込み"、 "書き込み"、"実行" が許可されているかどうかを表しています。 たとえば ls で

drwx--x--x    2 matsu  student      4096  4月  8 12:03 public_html
drwx------    7 matsu  student      4096  4月 30 20:00 Mail
drwx------    3 matsu  student      4096  5月  8 10:32 Desktop
-rw-r--r--    1 matsu  student        23  5月 15 09:00 profile
-rwxr-xr-x    1 matsu  student      4803  5月 15 13:36 a.out

と表示されたとします。この中の Mail というディレクトリはユーザ(matsu)以外は、読み、書き、 移動が全て禁止されているので、 ユーザ以外はこのディレクトリの内容を見たり、 このディレクトリにアクセスしたりすることはできません (ワーキング・ディレクトリにできない)。 一方 profile は読み込み許可(r) がありますので、ファイルの内容を見ることができます。 また、a.outというファイルは誰でも実行可能なファイル (x は実行可能なファイルという意味) なので このディレクトリで ./a.outとすればだれでも このファイルを実行することができます。通常は他人の ディレクトリにある得体の知れないファイルは絶対に実行しては いけません (どのような命令が実行されるか分からないので)。

シェルでパーミッションの変更

これらのパーミッションを変更するためには "chmod"というコマンドを使います。 詳しくは man chmod で調べてください。 基本的には

$ chmod g-r ファイル名 

のように使います。"g" はグループを表し、 "-r"は読み込み(r) パーミッションを取る (-)という意味になります。 ユーザ(user)の権限は "u"、 他人(others)の権限は "o"、 書き込み権限は "w"、 実行権限は "x" で表します。これらの権限を与える時には "+"を使います。

例えば

$ chmod ug+rw ファイル名 

とするとユーザ本人とグループに属する人には読み込み(r)と書き込み(w) の許可を与えるということになります。 また"ugo"をまとめて "a"で 表すこともできます。

パーミッションを数字であらわす

また、 chmod o+r filename などの使い方の他に chmod 644 filename といった使い方もあります。 644 と指定すれば rw-r--r-- の意味になります。つまりそれぞれの1つの数字は rwx のパーミッションを2進法の3桁の数字と考え、それを10進法に 直したものを表しています。

パーミッション 2進表示 10進表示
     ---       000       0 
     --x       001       1 
     -w-       010       2 
     -wx       011       3 
     r--       100       4 
     r-x       101       5 
     rw-       110       6 
     rwx       111       7

となるので、755 を指定すると rwxr-xr-x となり、 600 とすると rw------- となります。

7. 正規表現

よく使う正規表現

ファイル操作のコマンドでは、以下のような正規表現とよばれる 表現法を使って一度に複数のファイルやディレクトリを操作する ことができます。

記号 意味 対応する名前
* 0文字以上の任意の文字列 a*b ab, a1b, acdb, abcdegb, …
? 任意の1文字 a?b a1b, a1b, aab, afb, …
[ ] [ ]内の任意の一文字 a[bc]d abd, acd, …
a[b-f]b abb, acb, adb, aeb, afb, …

使用例

コマンド 意味
ls a* a で始まる名前のファイルを表示する
mv foo* tmp/ fooで始まる名前のファイルをすべて tmp/ に移動する
rm *.doc .docで終る名前のファイルを全て消す

8. プロセスの kill について

プログラムが暴走したときには一度これらのプロセスを kill してから 再起動してみましょう。 まず、シェルを立ち上げ kill したいプロセスのプロセス番号を調べます。

$ ps axu | grep a020000 

ユーザIDの右に表示されている数字がプロセス番号です。

そして

$ kill プロセス番号

とします。 シェルが立ち上がらないときは他のコンピュータからリモート・ログインして、 同じ操作をします。kill でも死なないときには kill -9 としてみましょう。例えば、プロセス番号が 10000 のプロセスをとにかく kill するには

$ kill -9  10000 

とします。


Seiji Matsumoto
Last modified: Wed May 14 15:57:22 JST 2003