第3回 Linux (UNIX) コマンド

今回は、前回インストールしたLinuxのコマンドを利用することで、 Linux理解の第一歩とします。

3.1 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=促すこと) と呼びます。 これは、ユーザのコマンド入力を促しているものと考えられます。
ここでは、プロンプトを$と記します。

3.2 シェル

UNIXでは、OSの核であるカーネルと、カーネルにユーザからの指示を渡す シェル(殻)が分かれています。
シェルはプロンプトを出力して、ユーザにコマンド入力を促します。
シェルはユーザが入力したコマンドを読み取り、
そのコマンドを実行することによって、ユーザとUNIXとのやり取りを制御します。

シェルには、いろいろな種類があり、Linux ではbash(バッシュ)が標準で 使われています。
他には、sh(Bourneシェル)、csh(Cシェル)、tcsh(Cシェルを拡張したもの)等が あります。

まずは、コマンドを叩いてみましょう。

$ uname -s

とコマンドをタイプするとUNIXの種類を調べることができます。

補完機能

bashには、ファイル名やコマンドの先頭の数文字を入力すると、 残りの文字を自動入力できる機能があります。
この機能を利用するには、数文字入力したところで"Tabキー"を押します。

$ hostname

という自分がログインしているコンピュータの名前(ホスト名) を表示する コマンドがあります。
このように長いコマンドを全部タイプするのはたいへんですが、

$ hostn

とタイプした後に、Tabキーを押してみましょう。
すると、

$ hostname  ← ameが補われる

と展開されます。

ミニクイズ

hostとタイプしただけでは、Tabキーを押しても hostnameと展開されません。なぜでしょうか?

コマンド履歴

過去に実行したコマンドを表示できます。

Ctrl + p (または ↑)
直前に実行されたコマンドラインを表示
Ctrl + n (または ↓)
履歴情報を1つ戻す
$ history

というコマンドで過去に実行したコマンドの一覧を表示させることができます。

環境設定

bashは起動時に、ユーザ別の設定として、

システムのデフォルト設定として、

の各ファイルを読み込み、それらに記述されているコマンドを実行します。 (~は各ユーザのホームディレクトリを示します。後述。)

慣れてくると、こうしたファイルを編集して、動作環境を変更することが可能です。 例えば、表示を日本語から英語に変更したり、コマンドプロンプトを変えたり、 コマンドサーチパスを変更することができます。 本日は扱いません。第4週に時間の余裕があれば行います。

コマンドプロンプトの変更(上級)

以下のコマンドによって、通常時のコマンドプロンプトを変更することができます。

$ export PS1='\h:\W$'
localhost:user$  ← 「ホスト名:現在のディレクトリ$」が表示される

基本的に入力した文字はそのままプロンプトとして表示されますが、 \hがホスト名に展開されたように、 "\"から始まる文字は特別な意味を持ちます。

詳しく知りたい場合は、 @IT Linux Tips「bashのプロンプトを変更するには」 を参考にしてください。

3.3 ファイルの操作

ファイルの種類

UNIXでは、一口にファイルといってもシステム上では以下の4種類があります。

シンボリックリンクファイル、特殊デバイスファイルについては 高度な概念のため本授業ではふれません。

通常のファイル

通常のファイルは、テキスト文書や実行ファイル、画像ファイル、 データファイルなどが該当するもっとも一般的なファイルです。

単に「ファイル」と呼んだ場合一般にはこの通常ファイルのことを指します。

ディレクトリ (directory)

ディレクトリは、ファイルフォルダに相当し、階層的に構成されます。

ディレクトリツリー

絶対パス、相対パス

ディレクトリやファイルを指定するには「絶対パス」と「相対パス」という 2通りの表現方法があります。

絶対パス
システム上で、/(ルートディレクトリ)を基準した位置の表現方法です
例: /usr/bin, /root/.bashrc
相対パス
システム上で、現在のディレクトリを基準にした位置の表現方法です
例: ../(一つ上のディレクトリ), ../sbin(一つ上にあるsbinというファイル/ディレクトリ)

絶対パスから指定されるパスは一意ですが、 相対パスで指定されるパスはカレントディレクトリにより変化するため 一意ではありません。

ホームディレクトリ

各ユーザが持つ、ログインしたときに使われるディレクトリです。 "~"(チルダ)がホームディレクトリを表します。 また、~02ki999等、 ~にログイン名をつけると、そのログイン名のユーザのホームディレクトリを表します。

~02ki999は、「02ki999 ユーザのホームディレクトリ」です。

pwd

現在作業中のディレクトリ(カレントディレクトリ)の絶対パスを表示します。 今どのディレクトリを利用しているのかわからないときに利用します。

使用法

$ pwd

mkdir

新しくディレクトリを作成するときに使用します。

使用法

$ mkdir 新しく作成するディレクトリ名

cd

カレントディレクトリを変更するときに使用します。

使用法

$ cd 移動先

移動先ディレクトリを指定せずに、

$ cd

とだけ実行すると、自分のホームディレクトリに移動します。

.(ドット1つ)は、カレントディレクトリ、
..(ドット2つ)は、一つ上位のディレクトリを指します。

$ cd /  ← ルートディレクトリへ移動する
$ cd /home/www  ← /home/wwwディレクトリへ移動する
$ cd ~  ← 自分のホームディレクトリへ移動する。cdと同じ
$ cd src/linux/net  ← カレントディレクトリの下にある src/linux/netディレクトリへ移動する。
$ cd ..  ← カレントディレクトリの一つ上位のディレクトリへ移動する。

練習問題

カレントディレクトリを/usr/localに変更し、以下のディレクトリに相対パスで アクセスしたいとすると、どのような引数をcdコマンドに与えれば よいでしょうか。

  1. /usr
  2. /usr/bin
  3. /usr/local/bin
  4. /
  5. /home

ls

ファイルおよびディレクトリを一覧表示します。 MS-DOSのDIRコマンドに相当します。

使用法

$ ls  ← カレントディレクトリのファイルおよびディレクトリを表示。
$ ls /usr/bin  ← /usr/binディレクトリのファイルおよびディレクトリを表示。

lオプション

$ ls -l

詳細な情報(パーミッションやファイルサイズなど)を表示します。

パーミッション(アクセス権)(上級)

lオプションをつけた時に表示される一番左の列 (drwx-------rw-rw-r--など)は、 ファイルごとのパーミッション(許可属性)を示しています。

一番左の文字は、ファイルのモード(ディレクトリか普通のファイルか)などを示し、 以降は3文字区切りで、所有者、グループ、その他に対するアクセス権 (読み出し可能属性(r)、書き込み可能属性(w)、実行可能属性(x))を示しています。

許可されていない操作、たとえば、自分に対し読み出し属性のないファイルの 読み込みや、実行属性のないファイルの実行は通常失敗します。

アクセス権の設定は、GUI (Graphical User Interface)を通して行うこともできます。 (教科書 p.95)

aオプション

$ 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 コピー元ファイル名 コピー先ディレクトリ

cp /tmp/MIC.txt  .

/tmpディレクトリにあるMIC.txtというファイルを カレントディレクトリへコピーする。

cp /tmp/report1 report2 ~/

/tmpディレクトリにあるreport1というファイルと
カレントディレクトリのreport2というファイルをそれぞれ 自分のホームディレクトリ(~/)へコピーする。

mv

ファイルを移動したり、ファイル名を変更する場合に使用します。

使用法

$ mv 移動元ファイル名  移動先ディレクトリ名
$ mv 現ファイル名 新ファイル名

rm

ファイルを削除する場合に使用します。

使用法

$ rm  削除するファイル名 

練習問題

cpコマンドやmvコマンド、そしてrm コマンドで誤ってファイルを消してしまうことを防ぐために、 ユーザに確認を促すようにしたいとします。どのようにすればよいですか。
manコマンドで調べましょう。

ワイルドカード

コマンドラインで特殊な記号(ワイルドカード)を用いると、 シェルはワイルドカードが含まれる語を存在するファイル名に展開します。

*
0文字以上の文字列に展開されます。
?
1文字ちょうどに展開されます。

一致するファイルが存在せず、ワイルドカードを展開できなかった場合、 bashではワイルドカード文字がそのままコマンドに渡されます。

$ ls tok??  ← tokで始まる5文字のファイル名(tokyo,tokenなど)を表示
$ rm *du  ← duで終わるファイル(du,katmandu,xanaduなど)を削除

練習問題

実際に/usr/binディレクトリに移って、以下のパターンに 一致するファイルをlsコマンドで確認しましょう。

  1. z*
  2. *cat
  3. lp?
  4. t*e?

3.4 システム管理

UNIXには、ユーザアカウント管理やネットワークの設定等、システム管理を行う ための特別なユーザとして、スーパーユーザがあります。 root(ルート)とも呼ばれます。 スーパーユーザとして操作を実行できるようにするためには、 root アカウントでログインするか、 一般ユーザ(スーパーユーザ以外のユーザ)としてログインした後に、 スーパーユーザになるためのコマンドを実行します。

su

使用法

$ su

パスワードを尋ねられるので、正しく入力すれば、rootの権限で各種の作業を 行えるようになります。

スーパユーザ時はbashのプロンプトが$から#に 変化します。
以降rootの権限で実行しなければならないコマンドのプロンプトを#で 表すことにします。

注意

スーパーユーザは、システム管理ファイルを変更したり削除したりすることが できるので、誤ってシステム管理上のファイルを削除しないように 注意しなければなりません。

Webmin

Vine Linux 2.5および2.6では、システム管理をWebブラウザ経由で行えるツール、 Webminが付属しています。今回は、授業の始めに、Webmin を使ってユーザアカウント  を作りました。

パスワードの設定

Vine Linuxインストーラの不具合により、Webminの初期パスワードが設定されて いない状態にあります。 rootになって以下のコマンドによりパスワードを登録してください。

# /usr/libexec/webmin/changepass.pl /etc/webmin root 新しいパスワード

3.4.1 マルチタスクとプロセス

マルチタスク(multi-tasking)とは複数(multi)の処理(タスク)を 同時に行うことです。(詳しくは、2年次後期「オペレーティングシステム」で 学びます。) UNIXでは、タスクと呼ばずにプロセスと呼んでいます。

ps

システム上で稼動しているプロセスを表示します。

使用法

$ ps

lオプション(上級)

$ ps -l

のように、lオプションを用いると、 プロセスの詳細情報を表示できます。

df

使用しているハードディスクの空き容量を調べる場合に使用します。

使用法

$ df

3.5 ネットワーク

ifconfig

イーサネット等のネットワークインタフェースの状態を調べたり設定をするときに 使用します。(設定するには、スーパユーザ(root)である必要があります。)

使用法

$ /sbin/ifconfig インタフェース名

一般ユーザの場合デフォルトのコマンドサーチパスに/sbinディレクトリが 含まれていないので、その場合上記のようにコマンドの位置を指定する 必要があります。

$ /sbin/ifconfig eth0    ← eth0デバイスの状態を出力する
$ /sbin/ifconfig     ← 動作しているすべてのインタフェースの状態を出力する

netstat

TCP/IP ネットワークの状態を表示する場合に使用します。

使用法

$ netstat [オプション] [インタフェース名]

$ netstat -i eth0   ← パケットの送信、受信数等を調べます
$ netstat -rn       ← ルーティングテーブルを調べます。

ping

リモートマシンへのネットワーク接続が有効かどうか調べる場合に使用します。

使用法

$ ping 相手ホスト名/IPアドレス

練習問題

隣に座っている人にifconfigコマンドの結果から IPアドレスを教えてもらい、pingコマンドを実行し 到達性を確認しなさい。

ssh

リモートマシンへログインするときに使用します。以前は、 telnetコマンドがよく使われていましたが、 パスワードや通信内容が平文のままネットワークに流出してしまうという 問題があり、現在では代わりにsshが使われています。

使用法

$ ssh [-l 相手ホストでのアカウント] 相手ホスト名

相手ホストでのアカウントが現在のアカウントと異なる場合は、 lオプションによって相手ホストでのアカウントを 指定する必要があります。

最後の練習

sshコマンドを実行し、earth にリモートログインし、  自分のホームディレクトリの中に public_html というディレクトリが  あることを確認しなさい。
public_html ディレクトリにどのようなファイルがあるか確認しなさい。