今回は、前回インストールしたLinuxのコマンドを利用することで、 Linux理解の第一歩とします。
LinuxはUNIX系OS(オペレーティングシステム)の一種です。UNIXは、1969年 AT&T
ベル研究所で誕生して以来、いくつものハードウェア・プラットフォームに移植され、
様々な形態で商業ベンダ、大学、研究機関によってリリースされてきました。
(UNIXの歴史に関しては「オペレーティングシステム」の授業で解説します。)
長い間、AT&TがUNIXのライセンスを保有していましたが、 フィンランド・ヘルシンキ大学に在学中であったLinus Torvalds氏が、 AT&Tのソースコードを一切使用せず、スクラッチの状態から開発を始めた UNIX互換のOSがLinuxです。この場合の互換とは、ソースコードレベルでの 互換性を示します。
Linuxには、OSの核であるカーネルの他に様々なアプリケーションを含んだ
ディストリビューションという形で配布されます。
主なディストリビューションとして、以下のようなものが挙げられます。
どのディストリビューションも開発バージョン番号がついていて、
"Red Hat Linux 9"のようにディストリビューション名と
バージョン番号を組にして呼びます。
本「情報メディア基礎実験」では、推奨機種の場合Vine Linux 2.5、推奨機以外の場合はVine Linux 2.6を用いますが、Linuxの基本機能に差はありません。
以下、UNIXに共通した考え方にあるものは「UNIX」、 Linuxに特有のものは「Linux」と記述することとします。
ウィンドウの中に、$や%といった記号が表示されます。
これはユーザにコマンドの入力を求めるための印で、プロンプト(prompt=促すこと)
と呼びます。
これは、ユーザのコマンド入力を促しているものと考えられます。
ここでは、プロンプトを$と記します。
UNIXでは、OSの核であるカーネルと、カーネルにユーザからの指示を渡す
シェル(殻)が分かれています。
シェルはプロンプトを出力して、ユーザにコマンド入力を促します。
シェルはユーザが入力したコマンドを読み取り、
そのコマンドを実行することによって、ユーザとUNIXとのやり取りを制御します。
シェルには、いろいろな種類があり、Linux ではbash(バッシュ)が標準で
使われています。
他には、sh(Bourneシェル)、csh(Cシェル)、tcsh(Cシェルを拡張したもの)等が
あります。
まずは、コマンドを叩いてみましょう。
$ uname -s
とコマンドをタイプするとUNIXの種類を調べることができます。
bashには、ファイル名やコマンドの先頭の数文字を入力すると、
残りの文字を自動入力できる機能があります。
この機能を利用するには、数文字入力したところで"Tabキー"を押します。
$ hostname
という自分がログインしているコンピュータの名前(ホスト名) を表示する
コマンドがあります。
このように長いコマンドを全部タイプするのはたいへんですが、
$ hostn
とタイプした後に、Tabキーを押してみましょう。
すると、
$ hostname ← ameが補われる
と展開されます。
hostとタイプしただけでは、Tabキーを押しても hostnameと展開されません。なぜでしょうか?
過去に実行したコマンドを表示できます。
$ history
というコマンドで過去に実行したコマンドの一覧を表示させることができます。
bashは起動時に、ユーザ別の設定として、
システムのデフォルト設定として、
の各ファイルを読み込み、それらに記述されているコマンドを実行します。 (~は各ユーザのホームディレクトリを示します。後述。)
慣れてくると、こうしたファイルを編集して、動作環境を変更することが可能です。 例えば、表示を日本語から英語に変更したり、コマンドプロンプトを変えたり、 コマンドサーチパスを変更することができます。 本日は扱いません。第4週に時間の余裕があれば行います。
以下のコマンドによって、通常時のコマンドプロンプトを変更することができます。
$ export PS1='\h:\W$'
localhost:user$ ← 「ホスト名:現在のディレクトリ$」が表示される
基本的に入力した文字はそのままプロンプトとして表示されますが、 \hがホスト名に展開されたように、 "\"から始まる文字は特別な意味を持ちます。
詳しく知りたい場合は、 @IT Linux Tips「bashのプロンプトを変更するには」 を参考にしてください。
UNIXでは、一口にファイルといってもシステム上では以下の4種類があります。
シンボリックリンクファイル、特殊デバイスファイルについては 高度な概念のため本授業ではふれません。
通常のファイルは、テキスト文書や実行ファイル、画像ファイル、 データファイルなどが該当するもっとも一般的なファイルです。
単に「ファイル」と呼んだ場合一般にはこの通常ファイルのことを指します。
ディレクトリは、ファイルフォルダに相当し、階層的に構成されます。
ディレクトリやファイルを指定するには「絶対パス」と「相対パス」という 2通りの表現方法があります。
絶対パスから指定されるパスは一意ですが、 相対パスで指定されるパスはカレントディレクトリにより変化するため 一意ではありません。
各ユーザが持つ、ログインしたときに使われるディレクトリです。 "~"(チルダ)がホームディレクトリを表します。 また、~02ki999等、 ~にログイン名をつけると、そのログイン名のユーザのホームディレクトリを表します。
~02ki999は、「02ki999 ユーザのホームディレクトリ」です。
現在作業中のディレクトリ(カレントディレクトリ)の絶対パスを表示します。 今どのディレクトリを利用しているのかわからないときに利用します。
$ pwd
新しくディレクトリを作成するときに使用します。
$ mkdir 新しく作成するディレクトリ名
カレントディレクトリを変更するときに使用します。
$ cd 移動先
移動先ディレクトリを指定せずに、
$ cd
とだけ実行すると、自分のホームディレクトリに移動します。
.(ドット1つ)は、カレントディレクトリ、
..(ドット2つ)は、一つ上位のディレクトリを指します。
$ cd / ← ルートディレクトリへ移動する $ cd /home/www ← /home/wwwディレクトリへ移動する $ cd ~ ← 自分のホームディレクトリへ移動する。cdと同じ $ cd src/linux/net ← カレントディレクトリの下にある src/linux/netディレクトリへ移動する。 $ cd .. ← カレントディレクトリの一つ上位のディレクトリへ移動する。
カレントディレクトリを/usr/localに変更し、以下のディレクトリに相対パスで アクセスしたいとすると、どのような引数をcdコマンドに与えれば よいでしょうか。
ファイルおよびディレクトリを一覧表示します。 MS-DOSのDIRコマンドに相当します。
$ ls ← カレントディレクトリのファイルおよびディレクトリを表示。 $ ls /usr/bin ← /usr/binディレクトリのファイルおよびディレクトリを表示。
$ ls -l
詳細な情報(パーミッションやファイルサイズなど)を表示します。
lオプションをつけた時に表示される一番左の列 (drwx------や-rw-rw-r--など)は、 ファイルごとのパーミッション(許可属性)を示しています。
一番左の文字は、ファイルのモード(ディレクトリか普通のファイルか)などを示し、 以降は3文字区切りで、所有者、グループ、その他に対するアクセス権 (読み出し可能属性(r)、書き込み可能属性(w)、実行可能属性(x))を示しています。
許可されていない操作、たとえば、自分に対し読み出し属性のないファイルの 読み込みや、実行属性のないファイルの実行は通常失敗します。
アクセス権の設定は、GUI (Graphical User Interface)を通して行うこともできます。 (教科書 p.95)
$ ls -a
ディレクトリ上のすべてのファイル/ディレクトリを表示します。 このオプションをつけなかった場合、.で始まるファイル (ドットファイル)は表示されません。
UNIXには、manというオンラインマニュアルを出力するコマンドが あります。 例えば、 unameというコマンドのオプションを詳しく知りたいときには、
$ man uname
と、タイプします。
manを使って、ディレクトリは、
Mail/
のように "/" が表示されるようにするにはlsに どのようなオプションをつけたらよいか調べましょう。
UNIXで動作する多くのコマンドに対し、複数のオプション(たとえば上記の aオプションとlオプション)を同時に指定したい場合、 -を省略し続けて書いても同じ意味になります。
$ ls -a -l
と
$ ls -al
また、オプションと引数を同時に指定する場合、 一般的にはオプションを引数に先行して指定する必要があります。
$ ls -a -l /usr/local/bin ok $ ls -l -a /usr/local/bin ok $ ls /usr/local/bin -l -a オプション? 引数?
ただし、上記のオプション指定の組み合わせ方法は一般的な例を記述したもので、
実際は各コマンドの実装に依存します。
たとえば、Linuxのlsでは引数の後にオプションを記述しても正しく
処理されますが、他のUNIXでは、うまくいかないことが大半です。
ファイルやディレクトリをコピーする場合に使用します。
$ cp コピー元ファイル名 コピー先ファイル名 $ cp コピー元ファイル名 コピー先ディレクトリ
cp /tmp/MIC.txt .
/tmpディレクトリにあるMIC.txtというファイルを カレントディレクトリへコピーする。
cp /tmp/report1 report2 ~/
/tmpディレクトリにあるreport1というファイルと
カレントディレクトリのreport2というファイルをそれぞれ
自分のホームディレクトリ(~/)へコピーする。
ファイルを移動したり、ファイル名を変更する場合に使用します。
$ mv 移動元ファイル名 移動先ディレクトリ名 $ mv 現ファイル名 新ファイル名
ファイルを削除する場合に使用します。
$ rm 削除するファイル名
cpコマンドやmvコマンド、そしてrm
コマンドで誤ってファイルを消してしまうことを防ぐために、
ユーザに確認を促すようにしたいとします。どのようにすればよいですか。
manコマンドで調べましょう。
コマンドラインで特殊な記号(ワイルドカード)を用いると、 シェルはワイルドカードが含まれる語を存在するファイル名に展開します。
一致するファイルが存在せず、ワイルドカードを展開できなかった場合、 bashではワイルドカード文字がそのままコマンドに渡されます。
$ ls tok?? ← tokで始まる5文字のファイル名(tokyo,tokenなど)を表示 $ rm *du ← duで終わるファイル(du,katmandu,xanaduなど)を削除
実際に/usr/binディレクトリに移って、以下のパターンに 一致するファイルをlsコマンドで確認しましょう。
UNIXには、ユーザアカウント管理やネットワークの設定等、システム管理を行う ための特別なユーザとして、スーパーユーザがあります。 root(ルート)とも呼ばれます。 スーパーユーザとして操作を実行できるようにするためには、 root アカウントでログインするか、 一般ユーザ(スーパーユーザ以外のユーザ)としてログインした後に、 スーパーユーザになるためのコマンドを実行します。
$ su
パスワードを尋ねられるので、正しく入力すれば、rootの権限で各種の作業を 行えるようになります。
スーパユーザ時はbashのプロンプトが$から#に
変化します。
以降rootの権限で実行しなければならないコマンドのプロンプトを#で
表すことにします。
スーパーユーザは、システム管理ファイルを変更したり削除したりすることが できるので、誤ってシステム管理上のファイルを削除しないように 注意しなければなりません。
Vine Linux 2.5および2.6では、システム管理をWebブラウザ経由で行えるツール、 Webminが付属しています。今回は、授業の始めに、Webmin を使ってユーザアカウント を作りました。
Vine Linuxインストーラの不具合により、Webminの初期パスワードが設定されて いない状態にあります。 rootになって以下のコマンドによりパスワードを登録してください。
# /usr/libexec/webmin/changepass.pl /etc/webmin root 新しいパスワード
マルチタスク(multi-tasking)とは複数(multi)の処理(タスク)を 同時に行うことです。(詳しくは、2年次後期「オペレーティングシステム」で 学びます。) UNIXでは、タスクと呼ばずにプロセスと呼んでいます。
システム上で稼動しているプロセスを表示します。
$ ps
$ ps -l
のように、lオプションを用いると、 プロセスの詳細情報を表示できます。
使用しているハードディスクの空き容量を調べる場合に使用します。
$ df
イーサネット等のネットワークインタフェースの状態を調べたり設定をするときに 使用します。(設定するには、スーパユーザ(root)である必要があります。)
$ /sbin/ifconfig インタフェース名
一般ユーザの場合デフォルトのコマンドサーチパスに/sbinディレクトリが 含まれていないので、その場合上記のようにコマンドの位置を指定する 必要があります。
$ /sbin/ifconfig eth0 ← eth0デバイスの状態を出力する $ /sbin/ifconfig ← 動作しているすべてのインタフェースの状態を出力する
TCP/IP ネットワークの状態を表示する場合に使用します。
$ netstat [オプション] [インタフェース名]
$ netstat -i eth0 ← パケットの送信、受信数等を調べます $ netstat -rn ← ルーティングテーブルを調べます。
リモートマシンへのネットワーク接続が有効かどうか調べる場合に使用します。
$ ping 相手ホスト名/IPアドレス
隣に座っている人にifconfigコマンドの結果から IPアドレスを教えてもらい、pingコマンドを実行し 到達性を確認しなさい。
リモートマシンへログインするときに使用します。以前は、 telnetコマンドがよく使われていましたが、 パスワードや通信内容が平文のままネットワークに流出してしまうという 問題があり、現在では代わりにsshが使われています。
$ ssh [-l 相手ホストでのアカウント] 相手ホスト名
相手ホストでのアカウントが現在のアカウントと異なる場合は、 lオプションによって相手ホストでのアカウントを 指定する必要があります。
sshコマンドを実行し、earth にリモートログインし、
自分のホームディレクトリの中に public_html というディレクトリが
あることを確認しなさい。
public_html ディレクトリにどのようなファイルがあるか確認しなさい。