「ネットワークツール」のページに戻る

reference count : access counter

UNIX シェルの使い方

ここでは、シェルの使い方を説明します。シェルは unixマシンのユーザが直接使うマンドインタープリターです。 これを使いこなすかどうかで、作業効率は全く異なってきます。 ここではとても便利なのにあまり使われていない シェルの使い方のいくつかをについて説明します。

以下の内容はボーンシェル/bin/sh で実行することを想定しています cshなどでは動作しないものがありますのでご注意ください

バックグランドでFTPする

時間のかかるFTPは、バックグランドで行うと便利です。 例えばFTPのスクリプトをバックグラウンドで走らせ、 ログアウトして帰って、次の日にログインしたら、 FTPが終了している...ということが可能となるのです。

これはバックグラウンドで走らせるシェルスクリプトを作成し それを実行することによって行います。まず、 スクリプトの例を以下に示します。
#!/bin/sh
ftp -n ftp.jp.freebsd.org << _EOF
user anonymous fujiki@kitakyu-techno-ctr.co.jp
bi
prompt
cd pub/FreeBSD/2.2.8-RELEASE/bin
mget *
bye
_EOF
これを見てわかるように、ftpのコマンドを手で入力するかわりに << でリダイレクトして、入力しています。シェルではこのように スクリプト内でコマンドに対する入力を指定できるのです。

ではこのファイルを ftp.sh に保存して実際に実行してみることにしましょう。 それには、以下のようにコマンドを実行します。
$ nohup ./ftp.sh >& log &
この後ログアウトしても、ここで実行したスクリプトは動作し続けます。 もしエラーがあれば log というファイルに生成されますので、 これを確認してください。

繰り返し処理

while を使った繰り返し処理

あるコマンドを繰り返し実行したいときことがありませんか? 私はこんなことがありました。ある大学の教育システムを管理していた時 ある学生がハッキングまがいの、やってはならないことをしていることを 発見しました。このとき、このユーザの実行するプロセスを監視したいと 思いました。このときに繰り返し ps コマンドを実行したいわけですが、 このような時には、sh (cshではだめ)で次のように実行します。 (監視するユーザ名が fujiki であるとします)
$ while true
> do clear; ps -auxw | grep fujiki; sleep 3 > done
(ここで使っている ps コマンドはバークレー版のUNIXの ps コマンドを想定 しています。System Vではオプションが違います。 ps -eal などでうまく 行くかもしれません)

これを実行すると、3秒ごとに fujiki というユーザが実行している プロセスを表示し続けます。このコマンドの発行により無限ループに入るので、 処理を終了させたい時は control-C を押します。

for を使った繰り返し処理

もう一つ繰り返しには for を用いることができます。 例えば、複数のマシンが動作していることを確認するために、 ping を実行するさいに、マシンが多い場合は以下のように実行すると 便利です。sh (cshではだめ)で次のようにコマンドを 入力してみてください。
$ for i in 129 130 134 135
> do ping -c 1 210.160.116.$i 
> done
これにより、$iという変数に 129, 130, 134, 135 が順に代入されて 4 回pingが実行されます。つまり、IPアドレスの最後の部分がこの順に 置き換えられて、pingが実行されるのです。もちろん、この部分は文字列 であってもかまいません。

これを用いて、私がよくやるのはファイル名を変更するときです。 あるディレクトリにあるファイルすべてに.bakという拡張子をつけたい とします。その場合には次のようにコマンドを実行します。
$ for fi in *
> do mv $fi $fi.bak
> done
この一行目の * はカレントディレクトリにあるファイル名に展開されます。 例えば、このディレクトリに result, test.c, 9911.txt という3つの ファイルが合ったとすると、この * のところは "result test 9911.txt" のように展開されます(順番は変わる可能性があります)。 それで、これを実行すると、result.bak, test.c.bak 9911.txt.bak というファイル名に変更されるのです。


「ネットワークツール」のページへ戻る