lalebarde Asked: 2022-03-02 23:55:51 +0800 CST2022-03-02 23:55:51 +0800 CST 2022-03-02 23:55:51 +0800 CST 如何从 Windows 命令行获取 WSL 分布大小? 772 阅读 WSL 文档和 Windows 命令行之一wsl.exe,我没有找到任何从 Windows 命令行获取 WSL 发行版大小的方法。 我知道从分发命令行本身 cf here很容易,但是如何从 Wndows 命令行获取它? command-line windows-subsystem-for-linux 1 个回答 Voted Best Answer NotTheDr01ds 2022-03-03T08:27:51+08:002022-03-03T08:27:51+08:00 找到分发的路径并在资源管理器中查看它当然是最简单的,但是对于纯粹的命令行方法,这就是你所要求的...... 从 Windows PowerShell 或 PowerShell Core: Get-ChildItem "HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss" -Recurse | ForEach-Object { $distro_name = ($_ | Get-ItemProperty -Name DistributionName).DistributionName $distro_dir = ($_ | Get-ItemProperty -Name BasePath).BasePath $distro_dir = Switch ($PSVersionTable.PSEdition) { "Core" { $distro_dir -replace '^\\\\\?\\','' } "Desktop" { if ($distro_dir.StartsWith('\\?\')) { $distro_dir } else { '\\?\' + $distro_dir } } } Write-Output "------------------------------" Write-Output "Distribution: $distro_name" Write-Output "Directory: $($distro_dir -replace '\\\\\?\\','')" $distro_size = "{0:N0} MB" -f ((Get-ChildItem -Recurse -LiteralPath "$distro_dir" | Measure-Object -Property Length -sum).sum / 1Mb) Write-Output "Size: $distro_size" } 将报告每个 WSL 分发的名称、目录和大小。 解释: 解析 WSL 发行版的注册表项以检索其名称和基目录 一些 WSL 发行版(wsl --import我相信是用 创建的)的目录名称以 开头\\?\,即 Windows 长路径前缀。这是有问题的,因为 Windows PowerShell 和 PowerShell Core 对这些路径的处理方式不同。脚本中的ifandswitch条件(和-replace)在那里,因此它适用于两个版本。 一旦我们有了一致的目录名称(适用于所有平台上的长路径),我们就可以通过它们递归并使用 PowerShell 的Measure-Objectcmdlet 来汇总所有文件的大小。 这适用于 WSL1(Linux 文件直接存储在文件系统上)和 WSL2(文件位于虚拟驱动器中)。 边注: 我知道从分发命令行本身很容易 并不真地。您链接到的答案是在 WSL2 发布之前编写的。它适用于 WSL1,但 WSL2 分发版存储在 Windows .vhdx(虚拟磁盘)中,可根据需要增长,但在删除其中的文件时不会缩小。 出于这个原因,使用 WSL2,类似ncdu(来自您链接的问题)之类的东西只会报告分布认为正在使用的大小。Windows 驱动器上虚拟磁盘的实际大小可能(有时要大得多)。
找到分发的路径并在资源管理器中查看它当然是最简单的,但是对于纯粹的命令行方法,这就是你所要求的......
从 Windows PowerShell 或 PowerShell Core:
将报告每个 WSL 分发的名称、目录和大小。
解释:
wsl --import
我相信是用 创建的)的目录名称以 开头\\?\
,即 Windows 长路径前缀。这是有问题的,因为 Windows PowerShell 和 PowerShell Core 对这些路径的处理方式不同。脚本中的if
andswitch
条件(和-replace
)在那里,因此它适用于两个版本。Measure-Object
cmdlet 来汇总所有文件的大小。边注:
并不真地。您链接到的答案是在 WSL2 发布之前编写的。它适用于 WSL1,但 WSL2 分发版存储在 Windows
.vhdx
(虚拟磁盘)中,可根据需要增长,但在删除其中的文件时不会缩小。出于这个原因,使用 WSL2,类似
ncdu
(来自您链接的问题)之类的东西只会报告分布认为正在使用的大小。Windows 驱动器上虚拟磁盘的实际大小可能(有时要大得多)。