SambaのコマンドでCIFS共有の"開いているファイル"を閉じる方法 - なすとわさびをあえてたべる

SambaのコマンドでCIFS共有の"開いているファイル"を閉じる方法

作成日時 : 2020-02-28 20:24:32
更新日時 : 2020-02-28 20:24:32
投稿者  : nasabi

フォルダの名前変更や削除を行う際にその配下のファイルが開いている場合は処理が失敗します。 その場合はファイルを閉じる必要があります。 通常ファイルサーバー上の開いているファイルを閉じる場合、 コンピュータの管理からファイルサーバーに接続して切断させる必要があります。 これをLinux上で閉じさせる方法があります。 Sambaのコマンドでは開いているファイルの情報を取得するためのコマンドが用意されています。 私が確認した限り下記の二つです。 =========================================================== ① net rpc file -S [サーバー名] -U [ユーザー名] or ② rpcclient -c "netfilenum" ncacn_np:[サーバー名] -U [ユーザー名] =========================================================== 通常このコマンドを実行した場合、 ①に関しては一見きちんと表示されているように見えますが、ファイルを閉じるために必要な"File ID"が32bit値までしか表示されないため、それを超えた場合はオーバーフローします。 ②に関してはそもそも表示されません。 このままではファイルを閉じることができませんがきちんと表示させる方法を発見しました。 これらのコマンドにはデバッグレベルを設定することができます。 そしてデバッグレベルを10にすることで正しい"File ID"を取得できることが分かりました。 それぞれ下記のように変更します。 =========================================================================================== ① net rpc file -S [サーバー名] -U [ユーザー名] -d 10 or ② rpcclient -c "debug 10; netfilenum" ncacn_np:[サーバー名] -U [ユーザー名] =========================================================================================== このように変更することでコマンドの出力結果の下部にあたる部分に正しい"File ID"が出力されます。 出力された"File ID"で、下記コマンドを実行しファイルを閉じることができます。 =========================================================================================== net rpc file close [File ID] -S [サーバー名] -U [ユーザー名] =========================================================================================== 終わりにサンプルを掲載します。 ◆パスを指定して一括でFile IDを取得する =========================================================================================== rpcclient ncacn_np:[サーバー名] -U [ユーザー名] -c "debug 10 ; netfileenum" -e -k | grep -B 4 -e '\\[共有名]\\[フォルダ名(パス)]' | awk '(/ +fid +/) {print $NF}' | sed -e 's/(\|)//g' ・出力結果 3327221392 3327219528 3326571864 3326572884 ===========================================================================================