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

reference count : access counter

UNIX シェルの使い方

ここでは、シェルの使い方を説明します。シェルは unixマシンのユーザが直接使うマンドインタープリターです。 これを使いこなすかどうかで、作業効率は全く異なってきます。 ここではとても便利なのにあまり使われていない シェルの使い方のいくつかをについて説明します。
シェルに関しては以下もご覧ください
シェルとは何か? (工事中)
bashのすすめ (工事中)
以下の内容はボーンシェル/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 というファイル名に変更されるのです。


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