検索
特集

Samba共有ファイルを使用中のマシンが分かるスクリプトLeverage OSS(1/2 ページ)

簡単なコマンドの組み合わせで大きな仕事も容易に片付けることができる。今回作成するのは、Samba共有ファイルを使用中のマシンを見つけるスクリプトだ。

PC用表示 関連情報
Share
Tweet
LINE
Hatena
SourceForge.JP Magazine

 Linuxユーティリティを組み合わせて使えば、ネットワーク上の誰がどの共有ファイルシステムを利用しているかがいつでも分かるので、システムのアップデート時には彼らにログオフを依頼できる。

 わたしの顧客の1人は、Visual Basic 6およびAccessベースの数多くの小型アプリケーションを直接Linux上で稼働させて、Sambaによるネットワーク共有を介して各Windows XPクライアントから利用できるようにしている。だが、そうしたアプリケーションやデータベースのアップデートが必要になるたびに、彼は新しいバイナリや Accessファイルをサーバにアップロードできるようにそのアプリケーションからのログオフをユーザーに依頼することになる。しかし、彼の管理する中規模ネットワークにはそうしたアプリケーションを使用しているクライアントが100台ほど存在するため、例えログオンしているのが1人だけでも、そのアプリケーションを使用中のユーザーが見つかるまで延々と電話をかけ続け、見つかったユーザーにログオフを依頼して、アップロードを実行しなければならない。

 今回、この問題をlsof、netstat、gawk、grep、uniqをはじめとするユーティリティの組み合わせによって解決するスクリプトを作成した。アプリケーションのバイナリはすべて、/usr/appsの下にある、payroll、accounting、sales、invoiceといったサブフォルダに格納されている。例えば、先ほどの顧客が給与台帳(payroll)システムを使用中のすべてのユーザーを知る必要があるなら、以下に示すように、開かれている全ファイルを表示してくれるlsofユーティリティが利用できる。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 この出力のプロセスID(PID)が16528から19237までの部分は、smbd(Samba)によって複数のファイルが開かれていることを示している。例えば、2人のユーザーがpayroll.exeアプリケーションを使用中であることが分かる。また、最後の行は、 report1.rptファイルが使用中であることを示している。これは標準的なCrystal Reportの拡張子であり、このアプリケーションもビジー状態であることが分かる。しかし、こちらはユーザー名が分からないので、以下のようにして先ほどの出力結果から必須の情報(PID番号)だけを抽出する必要がある。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 このようにgawkを使えば2番目のフィールドだけを抜き出せるが、重複するものは必要ない。そういうときは、ソートされた一覧から重複する行を削除してくれるuniqを使えばよい。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 この結果をテンポラリ(tmp)ファイルに残すには、次のようにする。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

関連キーワード

Leverage OSS | Samba | コマンドライン | 便利


       | 次のページへ

Copyright © 2010 OSDN Corporation, All Rights Reserved.

ページトップに戻る