orangeitems’s diary

クラウドで働くインフラエンジニアの日々の感想です(ほぼ毎日更新)。

もっと簡単に、ファイルをロックしているプロセスを見つけ出す方法(Windows)

f:id:orangeitems:20211020113741p:plain

 

ファイルをつかんでいるプロセスは何か、をWindowsで見つけ出す方法です。

下記記事の関連です。

 

www.backyrd.net

某所で書いたら意外に皆さん知らなかったようなので書いておきます。Windowsでファイルを削除したり名称変更しようとすると、別のプログラムが使っているので変更できない、といったエラーが出る事があります。こういう場合、後述の方法で「誰がファイルを掴んでいるのか」を調べられるかもしれません。
(あくまでローカル環境での話ですので、ネットワーク越しに掴まれているものや、インフラの運用で役立つ情報というわけではありません。ご了承ください)

 

コマンドプロンプトでワンラインでできたらもっと便利かと思いまして。

 

 

ファイルをロックしているのがローカルのプロセスの場合

答えは管理者権限で起動したコマンドプロンプトから、以下を入力するだけです。

# openfiles

 

でも、デフォルトの状態だと、ローカルのプロセスが、ローカルのファイルをどうロックしているかについては結果は返ってきません。

f:id:orangeitems:20211020105242p:plain

 

以下のコマンドで、機能をデフォルトにする必要があります。

# openfiles /local on

 

打ったら再起動してください。

f:id:orangeitems:20211020105356p:plain

※なお、元に戻す方法は、

# openfiles /local off

です。

 

その後、openfilesコマンドを入力すると、今OS上で開いているファイルが全部出てきます。

f:id:orangeitems:20211020110047p:plain

 

で、やってみると分かるんですが、ものすごく出てくるんですね。単にブラウザーを開いているだけなのに、結構裏側ではいろいろファイルつかんでるんだなと感心しました。

ただ、このファイルのロックだけ確認したい、っていうときはopenfilesコマンドだけだと時間もたくさんかかるので、しぼりこみましょう。

 

例えばc:\temp\test.txtだけのロックの状態が知りたい時は、以下のようにします。

まあWord 2016って書いてあるんですけどね。

f:id:orangeitems:20211020111745p:plain

 

# openfiles | findstr "test.log"

 

結果はこちら。

f:id:orangeitems:20211020111619p:plain

 

ちゃんと、プロセス名まで出るのでここでわかります。

※ただし、結果が出るまでに数分かかります(後述)。

 

 

ファイルをロックしているのがネットワークのプロセスの場合

ファイル共有経由で開いているローカルファイルのロックについては、openfilesコマンドはデフォルトで表示してくれます。

 

# openfiles

 

f:id:orangeitems:20211020113017p:plain

 

上の赤いところは、ネットワーク共有でログインしたユーザー名が出ますので、そのユーザーの人に閉じてもらえれば解決です。

 

 

備考

なお、openfilesコマンドは、本記事の冒頭で

# openfiles /local on

をしなかった場合、サクっと出ます。もしオンにしたら、ローカルのファイルを探しに行くので数分待たないと出ないです。不便。

 

ファイルのロックについて、ファイル共有経由のものだけ知りたければ、デフォルトの設定に戻しておきましょう。以下のコマンドの後再起動で元に戻ります。

# openfiles /local off

 

デフォルトの設定で使うのがいいなと思いました。