Cygwin/MSYS2とごみ箱にできる謎のファイルの関係
CygwinやMSYS2を使っていると、ごみ箱に謎のファイルが (場合によっては数百MB以上) できることがあることに気づき、調べてみました。
ごみ箱の中身をエクスプローラーから確認
Windowsのごみ箱は、各ドライブのルートディレクトリに $Recycle.bin
というディレクトリが作られ、その下に各ユーザーのディレクトリが、SID (Security Identifier)と同じ名前で作られます。自分のSIDはwhoami /user
コマンドで確かめることができます。
C:\>whoami /user
USER INFORMATION
----------------
ユーザー名 SID
========== =============================================
mmm\uuu S-1-5-21-XXXXXXXXX-YYYYYYYYYY-ZZZZZZZZZZ-WWWW
さて、エクスプローラーでごみ箱の中を見てみましょう。
「表示」→「隠しファイル」にチェックを入れて、隠しファイルも見えるようにした上で、C:\$Recycle.bin
を開いてみます。
SIDのディレクトリがいくつか作られ、最後にごみ箱
とあるのが見えます。
もし、何も表示されない場合は、「表示」→「オプション」をクリックし、「表示」タブを開き、「保護されたオペレーティング システム ファイルを表示しない (推奨)」のチェックを外します。
他のユーザーのごみ箱はSIDが見えますが、自分のごみ箱はエクスプローラーがSIDをごみ箱
に変換して表示しており、SIDは表示されません。自分以外にユーザーがいない場合は、S-1-5-18
とごみ箱
のみが表示されているかもしれません。(S-1-5-18
はローカルシステム
アカウントです。)
ごみ箱
をダブルクリックして、ごみ箱の中を見てみます。
「このフォルダーは空です。」と表示されています。
次に、C:\$Recycle.bin
に戻って、ごみ箱
のプロパティを見てみます。
なぜか、13.5 MBのファイルがあると表示されています。
ごみ箱の中身をCygwin/MSYS2から確認
Cygwin/MSYS2からごみ箱の中を見てみます。
minttyを開いて、cd␣
まで入力し、エクスプローラーからごみ箱
ディレクトリをminttyのウィンドウにドラッグ&ドロップすると、ごみ箱のディレクトリのフルパスが入力されるので、Enterを押せばごみ箱のディレクトリに簡単に移ることができます。
ls -aF
コマンドを実行してファイルの一覧を見てみます。
.
で始まり、8進数表記されたバイト列があり、その後16進数が並んだ変な名前のファイルが複数あることが確認できます。
この変なバイト列は何でしょうか。確認するために以下のコマンドを実行して、バイト列をテキストファイルに保存してみます。(bash では、$'\ooo'
という表記で8進数で文字コードを表現できます。$'\xXX'
であれば16進数表記になります。)
$ echo $'\355\261\255\355\261\263\355\261\271\355\261\263' > x.txt
これをVimで、UTF-8として開いてみます。
上位8bitが0xDCのコード、すなわち、ローサロゲートのコードが並んでいるのが確認できます。
ここから下位8bitだけを取り出してみると、6d 73 79 73
となり、実はmsys
という文字列であることに気づくでしょう。
msys
の他にも、cyg
やsmym
となるパターンがあることが分かっています。このことから、これらのファイルはCygwinやMSYS2に関係ありそうだと分かります。
謎のファイルの正体
Linuxでは、開いているファイルであっても(権限さえあれば)削除することができます。一方、Windowsでは、開いているファイルは、移動することはできても削除することはできません。
Cygwin/MSYS2では、Linuxの挙動をWindows上で模倣するため、ファイルを開くときにはFILE_SHARE_DELETE
フラグを指定しておき、開いているファイルを削除しようとしたときには、それをごみ箱に移動するということをやっているようで、この謎のファイルはそのときの一時ファイルです。ただし、FILE_SHARE_DELETE
フラグを指定しても完全では無く、ファイルをクローズしてもファイルが削除されずに残ってしまう場合があるようです。
参考:
- c++ - Cygwin: Deleting file when handle is opened - Stack Overflow
- Big Sky :: CreateFile で FILE_SHARE_DELETE を指定するとどうなるか
謎のファイルを削除する
上記の通り、この謎のファイルは、使用中のファイルをCygwin/MSYS2で削除しようとしたときにできる一時ファイルであり、ファイルを使っているプロセスが残っていなければ削除してしまって構いません。
念のためWindowsを再起動してからminttyを開き、ごみ箱のディレクトリに移ってから、以下のコマンドを実行してください。
$ ls .$'\355'* # 余計なファイルがマッチしていないことを確認
$ rm .$'\355'* # 削除を実行
Author And Source
この問題について(Cygwin/MSYS2とごみ箱にできる謎のファイルの関係), 我々は、より多くの情報をここで見つけました https://qiita.com/k-takata/items/15586dd7d3cafb96f7f9著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .