SWP ファイル形式とは?
.swpはVimのスワップファイルです。これは、ファイルを編集するために開いたときにVimが自動的に作成する一時的なバイナリファイルです。その目的はクラッシュからの復旧です。停電、ターミナルの終了、システムクラッシュなどによってVimが予期せず終了した場合、スワップファイルは保存されていない変更を保持し、次回の起動時に復元できるようにします。
Vimは編集中のファイルと同じディレクトリにスワップファイルを作成し、先頭にドット、末尾に.swpサフィックスを付けた名前を付けます。例えば、config.pyを編集すると.config.py.swpが生成されます。Unix系システムでは、先頭のドットによりデフォルトで隠しファイルになります。複数のVimセッションが同じファイルを編集する場合、後続のスワップファイルには.swo、.swnなどが使用されます。
スワップファイルはバイナリのブロックベース構造を持っています。最初の4 KBブロック(ブロック0)には、b0VIM というマジックヘッダー、Vimのバージョン文字列、元のファイルパス、ホスト名、ユーザー名、およびプロセスIDが含まれています。後続のブロックには、1 KBページのBツリーとして整理されたバッファ内容が格納されます。ファイルの内容はプレーンテキストで保存され、スワップファイルは暗号化されません。
Vimがファイルを開いた際に既存の.swpを検出すると、保存されていない変更を復元(r)するか、古いファイルを削除(d)するかを尋ねるプロンプトを表示します。実行中のVimプロセスがない残された.swpは安全に削除できます。明示的に復元を試みるには、vim -r filenameを実行してください。Neovimも同じスワップ形式を使用します。
セキュリティ上の考慮事項:Webサーバーのディレクトリに残された.swpファイルは、サーバーが隠しファイルを提供するように設定されている場合、暗号化されていないソースコードを公開してしまう可能性があります。
セキュリティと安全性
リスク: MEDIUM.swpファイル自体はマルウェアではありませんが、情報漏洩のリスクがあります。(1) Webからアクセス可能なディレクトリに残されると、編集中のファイルの完全なプレーンテキストに加えて、サーバーのホスト名やユーザー名が公開されます。これはペネトレーションテストにおける典型的な偵察結果です。(2) 誤ってgitにコミットした場合:「git rm --cached .*.swp」を実行し、.gitignoreに「*.swp」を追加してください。不慮のコミットを防ぐために、グローバルな.gitignore(~/.config/git/ignore)に「*.swp」を追加することをお勧めします。
形式の詳細
概要- Windows仮想メモリのスワップファイル - Windowsはpagefile.sys/swapfile.sysを使用し、.swp拡張子は使用しません。OSのスワップとの混同は根拠がありませんが、よく見られます。
- Oracle Forms .swp - 古いバージョンのOracle Formsは、別のスワップバッファに.swpを使用していました。非常に稀です。
SWP ファイルを開くプログラム
技術的詳細
詳細仕様| ファイル目的 | アクティブなVim編集セッション用のクラッシュリカバリバッファ。正常終了時に自動的に削除される |
| マジックバイト | オフセット0に`62 30 56 49 4D 20`(«b0VIM ») |
| ブロック構造 | ブロック0:4 KBのヘッダー。後続のブロック:Bツリー内の1 KBページ。合計サイズはバッファの内容に応じて増加する |
| ヘッダーの内容 | Vimのバージョン文字列、元のファイルパス、ホスト名、ユーザー名、およびPIDがブロック0に格納される |
| コンテンツのエンコーディング | プレーンテキスト(暗号化なし)。元のファイルの内容はスワップファイルから直接読み取り可能 |
| バイト順序 | プラットフォーム依存(ホストのVimビルドに一致。通常、x86およびARMではリトルエンディアン) |
| 命名規則 | `.filename.swp`(先頭のドット + `.swp`サフィックス)。Unixシステムではデフォルトで隠しファイル |
| オーバーフロー時の命名 | 複数のセッションが同じファイルを編集する場合:`.swo`、`.swn`、`.swm`、…とアルファベット順に割り当てられる |
| 古いファイルの検出 | Vimはブロック0ヘッダーのPIDとホスト名をクロスチェックし、記録されたプロセスが実行されていない場合に警告する |
| 復元コマンド | 「vim -r filename」を実行するか、Vimでファイルを再度開いたときに復元プロンプトで「r」を押す |
| Neovim互換性 | Neovimは、同じ`b0VIM`ヘッダー形式を使用してVim互換のスワップファイルを読み書きする |
| セキュリティ上の注意 | Webからアクセス可能なディレクトリにあるスワップファイルは、サーバーがドットファイルを提供する場合、ソースコードをプレーンテキストとして公開してしまう |
| リリース日 | 1991 (Vim 1.0); vi swap concept from 1970s ex/vi |
| 最新バージョン | Vim 9.1 (2024) swap format; compatible block-based format since Vim 6 |
| 仕様書 | github.com |
SWP の変換
コミュニティ Q&A
ユーザーからの質問まだ質問はありません。SWP ファイルについて最初の質問をしてみましょう。