檔案
本頁列出 lip 讀寫的每一個檔案和目錄,讓你知道哪些可以刪除、備份或編輯,以及這樣做會失去什麼。
lip 只向四個地方寫入:它操作的工作區、它的使用者級目錄、你在參數中給出的路徑,以及更新自身時的安裝目錄。它從不向系統臨時目錄寫入。它執行的程式(伺服器、鉤子命令、安裝程式和 Wine)寫到哪裡不受此限。
工作區
工作區是一個伺服器所在的目錄。它是命令的目前目錄,或者介面中的目前工作區。
| 路徑 | 是什麼 | 由誰寫入 |
|---|---|---|
.lip/ | lip 關於這個工作區的記錄。參見 .lip 目錄。 | lip |
mods/ | LeviLamina 載入模組的目錄。每個模組位於 mods/<模组名>/。 | lip,以及模組自己 |
bedrock_server_mod.exe、bedrock_server.exe、bedrock_server | lip run 啟動的伺服器。參見伺服器檔案。 | lip |
| 其餘的一切 | 遊戲和檔案套件的檔案,以及伺服器執行時建立的內容,例如 worlds/。 | lip 和伺服器 |
tooth_lock.json | lip v0.x 工作區的狀態。參見狀態檔。 | lip v0.x |
在操作變更工作區之前,lip 會建立 mods/。mods 必須是真正的目錄:如果它是連結,操作失敗。
工作區不相依它之外的任何東西。只要沒有 lip 命令和伺服器在使用它,你可以移動、重命名或複製這個目錄,已安裝的套件都會保留。
.lip 目錄
在 Windows 上,.lip 帶有隱藏屬性。
| 條目 | 是什麼 | 刪除的後果 |
|---|---|---|
state.json | 狀態檔:已安裝的套件,以及每個套件擁有的檔案。 | lip 不再知道安裝了什麼。檔案還在,但 lip 無法解除安裝或更新它們。不要刪除。 |
state.json.tmp | 正在寫入的狀態檔。 | 命令執行期間不要動它。 |
journal | 進行中的操作的記錄,lip 靠它完成或復原被中斷的操作。只在操作進行期間或操作被中斷之後存在。 | lip 無法再復原被中斷的操作。不要刪除;執行 install、uninstall、update、setup 或 run 即可恢復。 |
lock | 工作區鎖的檔案。處理程序在執行操作期間持有它,這樣兩個操作不會同時變更工作區。它的內容沒有意義。 | 沒有命令執行時刪除無妨。有命令執行時,絕不要刪除、重命名或取代它。 |
server.lock | 伺服器鎖的檔案。執行伺服器的處理程序持有它,這樣一個工作區最多隻有一個伺服器在執行。 | 沒有伺服器執行時刪除無妨。有伺服器執行時,絕不要刪除、重命名或取代它。 |
config.toml | 工作區設定。 | restart 回到 never。 |
logs/ | 失敗報告。 | 失去這些報告。隨時可以刪除。 |
wine/ | 在 Linux 和 macOS 上:Windows 版伺服器和鉤子命令執行所用的 Wine 前綴。 | Wine 會重新建立它,lip 會重新向其中安裝 Visual C++ 執行庫。請先停止伺服器。 |
lip 可能在 .lip 中儲存其他條目。不要相依它們。
.lip 是保留目錄:套件不能向其中安裝檔案,purge 的 glob 也永遠不會符合它。
兩把鎖互相獨立。操作不取得伺服器鎖,伺服器執行期間也不持有工作區鎖,所以 lip run 執行時仍然可以執行 lip install。介面更嚴格,會要求你先停止伺服器。
伺服器檔案
遊戲就是套件 github.com/LiteLDev/bds。安裝它時,lip 把從 www.minecraft.net 下載的 Bedrock Dedicated Server 歸檔的全部內容寫到工作區根目錄。
| 工作區有 | 伺服器檔案 |
|---|---|
| 載入器(LeviLamina) | bedrock_server_mod.exe |
沒有載入器,組建為 windows | bedrock_server.exe |
沒有載入器,組建為 linux | bedrock_server |
在 Linux 和 macOS 上,lip 寫入 bedrock_server 時把它的權限設為 0755。
安裝、取代或解除安裝遊戲時,兩個清單決定它的檔案如何處理:
| 清單 | 路徑 | 作用 |
|---|---|---|
| 保留 | server.properties、allowlist.json、permissions.json | 安裝遊戲時保留已存在的檔案,解除安裝遊戲時也不刪除。 |
| 清除 | bedrock_server.exe.bak(僅組建 windows)、packet-statistics.txt、valid_known_packs.json、behavior_packs/、config/、definitions/、development_behavior_packs/、development_resource_packs/、development_skin_packs/、resource_packs/、world_templates/ | 解除安裝遊戲時連同其下的所有內容一起刪除,包括不是遊戲安裝的檔案。其他已安裝的套件擁有的路徑會保留。 |
更換遊戲後保留什麼
用 lip setup 更換遊戲版本時,會解除安裝舊遊戲並安裝新遊戲:
| 保留 | 被取代或刪除 |
|---|---|
server.properties、allowlist.json、permissions.json | 舊遊戲安裝的其他所有檔案 |
worlds/,以及伺服器或你在清除路徑之外建立的其他檔案 | 上面的清除路徑,連同你放進去的內容 |
mods/,以及仍然安裝著的套件的檔案 | 這次設定解除安裝的套件的檔案 |
.lip/ |
WARNING
你複製到 behavior_packs/、resource_packs/ 或某個 development_* 目錄中的套件會隨這些目錄一起被刪除。更換遊戲之前,請在工作區之外留一份副本。
檔案名稱
如果路徑中某一段包含 :,或者以 . 或空格結尾,lip 拒絕把這個檔案寫入工作區,因為 Windows 無法儲存這樣的名字。操作失敗。
在 Linux 和 macOS 上,lip 像 Wine 一樣把工作區中的路徑視為不區分大小寫:Mods/a.dll 和 mods/A.DLL 是同一個檔案。如果已有一個只是大小寫不同的檔案,新檔案會寫到它的位置上。如果一個路徑這樣對應了不止一個已有的檔案,操作失敗。
使用者級目錄
| 目錄 | Windows | Linux 和 macOS | Linux 和 macOS 上的預設值 |
|---|---|---|---|
| 設定 | %APPDATA%\lip | $XDG_CONFIG_HOME/lip | ~/.config/lip |
| 快取 | %LOCALAPPDATA%\lip\Cache | $XDG_CACHE_HOME/lip | ~/.cache/lip |
| 資料 | %LOCALAPPDATA%\lip\Data | $XDG_DATA_HOME/lip | ~/.local/share/lip |
| 狀態 | %LOCALAPPDATA%\lip\State | $XDG_STATE_HOME/lip | ~/.local/state/lip |
未設定、為空或不是絕對路徑的 XDG_* 變數取其預設值。
設定目錄
刪除設定目錄會重置 github_proxy 和 language。
快取目錄
快取裡是 lip 下載過、並且可以重新下載的內容。lip cache clean 刪除整個目錄。
| 條目 | 是什麼 |
|---|---|
http-<H> | 一個檔案:對某個 URL 的一次成功的 HTTPS GET 的響應體。<H> 是該 URL 的小寫十六進制 SHA-256;URL 取套件中寫的樣子,去掉片段,與使用了什麼代理伺服器無關。 |
<name>.tmp | 正在寫入的檔案。 |
self-update/ | lip self-update 下載和解壓縮的內容,只在它執行期間存在。 |
lip 可能在這裡儲存其他條目。不要相依它們。
其他程式只要遵守同樣的規則,也可以讀寫快取:
- 寫入。 先把條目寫到一個其他處理程序不會使用的
.tmp檔案名稱下,再重命名。絕不原地修改條目。 - 讀取。 存在的條目就是完整的。知道某個
http-<H>條目應有內容的讀取者要檢查它,不一致時可以刪除它。 - 刪除。
http-<H>條目隨時可以刪除;.tmp檔案在沒有處理程序寫它時可以刪除;self-update在沒有lip self-update執行時可以刪除。
當 lip 需要一個 ZIP 歸檔,而其 URL 對應的快取條目不是 ZIP 歸檔時,lip 會刪除該條目並重新下載一次。
刪除快取不會失去任何東西:lip 會重新下載它需要的內容。你刪除快取時,正在向快取寫入的 lip 命令可能失敗。
資料目錄
資料目錄儲存 lip 在 Linux 和 macOS 上安裝的 Wine(所有工作區共用),以及 lip 為安裝系統相依而下載的內容。
在沒有 lip 處理程序執行時刪除它,不會失去任何東西:lip 在需要時會重新安裝系統相依。在 Linux 和 macOS 上,這意味著重新下載 Wine。
狀態目錄
| 條目 | 是什麼 |
|---|---|
workspaces.json | 介面的工作區清單。 |
daemon.sock 和常駐程式的其他檔案 | 在 Linux 和 macOS 上,僅當 XDG_RUNTIME_DIR 沒有設為絕對路徑時。參見常駐程式端點。 |
在沒有 lip 處理程序執行時刪除它,只會失去工作區清單。工作區本身不受影響;在介面中重新新增即可。
workspaces.json
介面在工作區頁顯示的工作區清單:一個由絕對路徑組成的 JSON 陣列,按新增順序排列。
["D:\\servers\\survival", "D:\\servers\\creative"]- 清單不存在或不是 JSON 陣列時,視為空清單。
- 不是絕對路徑的元素,以及與清單中已有元素指向同一目錄的元素,會被略去。
- lip 以規範形式寫入每個路徑:解析掉
.和..,在 Windows 上以\作分隔符,末尾不帶分隔符(根目錄除外)。兩個路徑的規範形式相等時指向同一目錄,在 Windows 上不區分大小寫。
介面啟動時會把它的工作目錄加入清單。從清單中移除工作區不會變更其中的任何檔案。命令不使用這個清單。
常駐程式端點
常駐程式在只有你這個使用者能訪問的地方監聽:
| 系統 | 端點 |
|---|---|
| Windows | 命名管道 \\.\pipe\lip-<SID>,<SID> 是你這個使用者的安全標識符。 |
| Linux 和 macOS | 常駐程式目錄中的 Unix 套接字 daemon.sock:XDG_RUNTIME_DIR 是絕對路徑時為 $XDG_RUNTIME_DIR/lip,否則為狀態目錄。 |
常駐程式目錄的權限是 0700,套接字的權限是 0600。常駐程式結束時刪除 daemon.sock。該目錄中還有常駐程式的其他檔案;不要相依它們。
安裝目錄
安裝目錄是 lip 可執行檔所在的目錄。
| 條目 | 是什麼 |
|---|---|
install.json | {"kind": "msi"}。由 Windows 安裝程式寫入;它告訴 lip self-update 用安裝程式來更新。沒有它時,lip 視為可攜版。lip 從不寫它。 |
<file>.old | 可攜版更新取代掉、但暫時無法刪除的檔案。lip 下次啟動時刪除 <executable>.old。 |
失敗報告
因用法錯誤以外的原因失敗的命令,可能會向工作區的 .lip/logs/ 寫一份失敗報告,並在消息中給出檔案名稱:
Full report: .lip\logs\20260115T093012Z-4812.log檔案名稱由 UTC 時間和一個處理程序 ID 組成。在目前版本中,報告是一個文字檔案,包含命令行、lip 和系統的版本、lip 使用的目錄、錯誤及其提示和原因、.lip 中的條目,以及 lip 所做事情的跟蹤記錄。URL 中的使用者名稱、密碼和查詢參數的值會被取代成 ***。lip 保留最新的 20 份報告,刪除更早的。
求助時請附上這份報告。它的格式並不固定,可能會變化。
失敗的試執行也可能寫一份;這是試執行唯一會寫的檔案。