1 / Windows 包管理 #
scoop #
- scoop 多开发环境配置使用教程:Scoop 搭建 Windows 开发环境 | 潇然工作室
- scoop 必不可少的一环:如何使用 (63 封私信 / 82 条消息) Scoop——也许是 Windows 平台最好用的软件(包)管理器 - 知乎
- Scoop | Windows 下的软件包管理神器 - 苏青羽的小窝
- 官网:Scoop
windows 的包管理器之一,使用它下载一些比较轻量的软件/命令行工具、以及一些开发环境(类似 Debian 的 apt / brew)。
前置准备 #
Scoop 是一个 PowerShell 工具,需要:
- Windows 10 / 11
- PowerShell 5.1 或更高(默认都有),最好使用 PowerShell7
- 可联网(最好能访问 GitHub)
- 建议关闭 UAC(User Account Control) 弹窗(Scoop 默认装在用户目录,无需管理员权限)
安装 #
pre
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
(1)默认安装
(自动放在 C:\Users\<你>\scoop)
直接打开 PowerShell(非管理员),执行:
iwr -useb get.scoop.sh | iex
执行后,你可以运行:
scoop --version
确认安装成功。
(2)自定义安装目录 (推荐)
如果你想把所有软件放在自定义目录下面比如 D:\Apps\Scoop,则需要添加环境变量
setx SCOOP "D:\Apps\Scoop" /M
iwr -useb get.scoop.sh | iex
安装后,所有 Scoop 软件会放在:
D:\Apps\Scoop\apps\<软件名>\current\
非常干净,不污染系统盘。
🔺setx 不加/m 表示用户变量,加上就是系统变量
安装完成后,scoop 文件夹下面的结构
- apps——所有通过 scoop 安装的软件都在里面。
- buckets——管理软件的仓库,用于记录哪些软件可以安装、更新等信息,默认添加
main仓库,主要包含无需 GUI 的软件,可手动添加其他仓库或自建仓库,具体在推荐软件仓库中介绍。 - cache——软件下载后安装包暂存目录。
- persit——用于储存一些用户数据,不会随软件更新而替换。
- shims——用于软链接应用,使应用之间不会互相干扰,实际使用过程中无用户操作不必细究。
添加代理 #
设置 scoop 的代理
scoop config proxy 127.0.0.1:7890
# clash verge rev是7897
或者直接找到 Scoop 配置文件,路径 C:\Users\username\.config\scoop\config.json,然后直接修改里面的配置。
取消代理
scoop config rm proxy
配置 Aria2 下载 #
使用 Scoop 安装 Aria2 ,Scoop 会自动调用 Aria2 进行多线程加速下载。安装完会自动启用.
scoop install aria2
scoop config aria2-warning-enabled false
与 Aria2 有关的设置选项:
aria2-enabled: 开启 Aria2 下载,默认truearia2-retry-wait: 重试等待秒数,默认2aria2-split: 单任务最大连接数,默认5aria2-max-connection-per-server: 单服务器最大连接数,默认5,最大16aria2-min-split-size: 最小文件分片大小,默认5M优化 Aria2 设置,单任务最大连接数设置为32,单服务器最大连接数设置为16,最小文件分片大小设置为1M
### aria2 在 Scoop 中默认开启
scoop config aria2-enabled true
### 关于以下参数的作用,详见aria2的相关资料
scoop config aria2-retry-wait 4
scoop config aria2-split 16
scoop config aria2-max-connection-per-server 16
scoop config aria2-min-split-size 4M
因为 Scoop 默认的 TLS1.0/1.1 这两个协议已经被 github 禁用,这里需要配置现代 TLS 协议才能通过 HTTPS 连接下载。
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
配置 sudo 打开管理员模式 #
使用 Scoop 安装 sudo ,如果要用管理员运行命令,无需用管理员打开 cmd(or powershell) 直接在命令行前加一个 sudo 即可。
scoop install sudo
测试:
sudo setx testForSudo "C:/"
$env:testForSudo
sudo [Environment]::SetEnvironmentVariable('testForSudo', $null, 'Machine')
$env:testForSudo
添加 buckets #
添加 buckets 之前,需要有 git 和 7zip
scoop install git
# 这段命令会连带下载7zip
1、添加整合 buckets kkzzhizhou/scoop-apps: 使用 Github Action 每天自动合并其他 scoop 仓库的更新,仓库地址:https://github.com/kkzzhizhou/scoop-apps
scoop bucket add apps https://github.com/kkzzhizhou/scoop-apps
2、添加dorado
scoop bucket add dorado https://github.com/chawyehsu/dorado
所有的包管理器都会有相应的软件仓库 ,而 bucket 就是 Scoop 中的软件仓库。细心的你可能会发现 scoop 翻译为中文是 “舀”,而 bucket 是 “水桶”,所以安装软件可以理解为从水桶里舀水,似乎很形象的说。 Scoop 默认软件仓库(main bucket)软件数量是有限的,但是可以进行额外的添加。
scoop bucket list 查看当前已经添加的 bucekt
✗ scoop bucket list
Name Source Updated Manifests
---- ------ ------- ---------
main https://github.com/ScoopInstaller/Main.git 2025/10/16 8:38:16 1406
extras https://github.com/ScoopInstaller/Extras 2025/10/16 8:39:16 2197
apps https://github.com/kkzzhizhou/scoop-apps 2025/10/15 12:40:54 14810
基本使用 #
basic
search # 搜索仓库中是否有相应软件。
install # 安装软件。
uninstall # 卸载软件。
update # 更新软件。可通过scoop update *更新所有已安装软件,或通过scoop update更新所有软件仓库资料及Scoop自身而不更新软件。
hold # 锁定软件阻止其更新。
info # 查询软件简要信息。
home # 打开浏览器进入软件官网。
help # 帮助
More…
alias Manage scoop aliases
bucket Manage Scoop buckets
cache Show or clear the download cache
cat Show content of specified manifest.
checkup Check for potential problems
cleanup Cleanup apps by removing old versions
config Get or set configuration values
create Create a custom app manifest
depends List dependencies for an app
export Exports (an importable) list of installed apps
help Show help for a command
hold Hold an app to disable updates
home Opens the app homepage
info Display information about an app
install Install apps
list List installed apps
prefix Returns the path to the specified app
reset Reset an app to resolve conflicts
search Search available apps
status Show status and check for new app versions
unhold Unhold an app to enable updates
uninstall Uninstall an app
update Update apps, or Scoop itself
virustotal Look for app's hash on virustotal.com
which Locate a shim/executable (similar to 'which' on Linux)
例子 以下载 hugo 为例
# hugo信息
scoop info hugo
# hugo 指定版本
scoop install hugo@0.140.2
# 当前已经安装的hugo版本,可能只会显示一个
scoop list hugo
# 再次下载一个hugo
scoop install hugo@0.151.1
scoop reset hugo@0.140.2
以文件夹符号链接的方式,引用当前使用的 hugo 版本:
删除旧版本软件,scoop 更新软件不会将旧版移除,只是将创建一个链接指向新版本。
清理包缓存 Scoop 会保留下载的安装包,对于卸载后又想再安装的情况,不需要重复下载。但长期累积会占用大量的磁盘空间,如果用不到就成了垃圾。这时可以使用 scoop cache 命令来清理。
`scoop cache show` - 显示安装包缓存
`scoop cache rm *` - 删除所有的安装包缓存
如果不希望安装和更新软件时保留安装包缓存,可以加上 -k
scoop install -k <app>
scoop update -k *
安装失败时的处理
# 删除损坏的安装
scoop uninstall miniforge --purge
# 管理员模式安装
sudo scoop install miniforge
如何卸载 #
scoop uninstall scoop
卸载后重新安装会出现问题
> iwr -useb get.scoop.sh | iex
Initializing...
Scoop is already installed. Run 'scoop update' to get the latest version
默认安装路径在 $env:userprofile 下面的 scoop 文件夹中,先删除这个文件夹
环境配置 #
python | miniforge #
sudo scoop install miniforge
安装完成后的 Note:
This variant does not add the default venv into your PATH unless you activate it with 'conda activate base'.
You may choose to install the one from the official bucket if you do not care about python PATH pollution.
Conda base env is not persisted by Scoop, packages installed to the base env will be removed when upgrading the app.
We advice to setup 'envs_dirs' to use a seperated path like '~/.conda/envs' and avoid using the base env.
https://conda.io/projects/conda/en/latest/user-guide/configuration/use-condarc.html#specify-environment-directories-envs-dirs
To enable conda tab-completion autoload, you can add the following code to your PowerShell $PROFILE:
(& conda 'shell.powershell' 'hook') | Out-String | Invoke-Expression
意思就是:
- 没有添加 miniforge 的 env 到你的 path 中,但是因为 scoop/shims 已经将软链接 conda 添加,在使用
conda init后可以直接使用conda activate base激活环境 - 自动补全开启:
(& conda 'shell.powershell' 'hook') | Out-String | Invoke-Expression,把 conda hook 的输出加载进当前 PowerShell 环境。
condainit 后会向 profile 中写入脏东西,启动速度优化可以转向 PowerShell 升级。
app list #
➜ scoop list
Installed apps:
Name Version Source Updated Info
---- ------- ------ ------- ----
7zip 25.01 main 2025-10-11 12:01:05
aria2 1.37.0-1 main 2025-10-16 09:54:49
colortool 1904.29002 main 2025-10-12 11:30:19
dark 3.14.1 main 2025-10-13 10:00:38
docker-desktop nightly-20251011 apps 2025-10-11 15:37:06
hugo 0.140.2 <auto-generated> 2025-10-16 10:17:26
neofetch 7.1.0 main 2025-10-17 10:36:27
powershell 7.5.3 apps 2025-10-11 16:41:03
powertoys 0.94.2 extras 2025-10-13 10:02:39
qqmusic 2025-10-11 15:40:07 Install failed
qqmusic_akirco 21.92 apps 2025-10-11 15:40:41
starship 1.23.0 main 2025-10-12 11:41:57
sudo 0.2020.01.26 main 2025-10-16 10:00:15
tre-command 0.4.0 main 2025-10-11 11:45:48
scoop-list-all 的 powershell 函数 #
function Scoop-ListAll {
param(
[Parameter(Mandatory = $true)]
[string]$App
)
$appPath = "$env:scoop\apps\$App"
if (-not (Test-Path $appPath)) {
Write-Host "❌ 未找到 Scoop 应用 '$App'" -ForegroundColor Red
return
}
$versions = Get-ChildItem -Path $appPath -Directory | Select-Object -ExpandProperty Name
if ($versions.Count -eq 0) {
Write-Host "⚠️ 未找到已安装的版本。"
return
}
# 检查 current 链接
$currentLink = (Get-Item "$appPath\current" -ErrorAction SilentlyContinue)
$currentTarget = $null
if ($currentLink -and $currentLink.LinkType -eq "SymbolicLink") {
$currentTarget = Split-Path $currentLink.Target -Leaf
}
Write-Host "📦 $App 已安装的版本:" -ForegroundColor Cyan
foreach ($v in $versions) {
if ($v -eq "current") { continue }
if ($v -eq $currentTarget) {
Write-Host " → $v (当前启用)" -ForegroundColor Green
} else {
Write-Host " $v"
}
}
}
打开 profile,将这个函数加进去,重启 ps 后直接使用
notepad $PROFILE
使用
➜ scoop-listall hugo
📦 hugo 已安装的版本:
0.140.2
0.151.1
➜ scoop list hugo
Installed apps matching 'hugo':
Name Version Source Updated Info
---- ------- ------ ------- ----
hugo 0.140.2 <auto-generated> 2025-10-16 10:17:26
2 / Windows 终端优化 #
Windows Terminal #
在 github Windows Terminal 或者微软商店页面搜索下载即可。 Windows Terminal 有更加优雅的现代化界面和终端统一管理功能。
PowerShell 升级 #
1、首先查看 powershell 的版本
$Host.Version
$psversiontable
pwsh --version
得到
Major Minor Build Revision
----- ----- ----- --------
5 1 19041 1320
分别是「主版本.次版本.构建版本.修订版本」
powershell 的命令不区分大小写,驼峰式写法只是为了更可读。
2、使用 scoop 升级 powershell
scoop install powershell
3、启用 powershell
在启动处将其设置为默认配置文件
启动速度优化 #
1、查看 PowerShell 配置文件
PowerShell 会在启动时按顺序加载不同配置文件:
$PROFILE | Format-List * -Force
输出类似:
AllUsersAllHosts : C:\Windows\System32\WindowsPowerShell\v1.0\profile.ps1
AllUsersCurrentHost : C:\Windows\System32\WindowsPowerShell\v1.0\Microsoft.PowerShell_profile.ps1
CurrentUserAllHosts : C:\Users\YourUser\Documents\PowerShell\profile.ps1
CurrentUserCurrentHost : C:\Users\YourUser\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
💡 解释:
AllUsersAllHosts:对所有用户和所有宿主有效CurrentUserCurrentHost:只对当前用户和当前宿主(比如 Windows Terminal)有效- 默认只要存在,PowerShell 就会尝试加载它们
你可以直接用 Notepad 打开它们:
PS C:\Users\tohsaka rin> $PROFILE | Format-List * -Force
AllUsersAllHosts : C:\Windows\System32\WindowsPowerShell\v1.0\profile.ps1
AllUsersCurrentHost : C:\Windows\System32\WindowsPowerShell\v1.0\Microsoft.PowerShell_profile.ps1
CurrentUserAllHosts : C:\Users\tohsaka rin\Documents\WindowsPowerShell\profile.ps1
CurrentUserCurrentHost : C:\Users\tohsaka rin\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
Length : 81
PS C:\Users\tohsaka rin> notepad $profile.AllUsersAllHosts
PS C:\Users\tohsaka rin> Test-Path $PROFILE.AllUsersCurrentHost
False
PS C:\Users\tohsaka rin> Test-Path $PROFILE.CurrentUserAllHosts
PS C:\Users\tohsaka rin> Test-Path $PROFILE.CurrentUserAllHosts
True
2、修改 conda 的配置 参考解决 conda init 后启动 powershell 速度慢的问题 - 知乎 conda init 后启动 powershell 速度慢的问题:
在 PowerShell 中输入(路径替换为自己真实的路径)
(& "C:\path\to\conda\Scripts\conda.exe" "shell.powershell" "hook") | Out-String
将输出的文本贴到 profile.ps1 中(将 username 替换为实际的用户名)
$Env:CONDA_EXE = "C:\Users\username\miniconda3\Scripts\conda.exe"
$Env:_CONDA_ROOT = "C:\Users\username\miniconda3"
$Env:_CONDA_EXE = "C:\Users\username\miniconda3\Scripts\conda.exe"
$CondaModuleArgs = @{ChangePs1 = $True }
Import-Module "$Env:_CONDA_ROOT\shell\condabin\Conda.psm1" -ArgumentList $CondaModuleArgs
conda activate base
Remove-Variable CondaModuleArgs
最好删除 conda activate base,并使用 conda config –set auto_activate_base false 禁用自动激活 如果 conda config –set auto_activate_base false 提示无权限,则直接去 C:\Users\username(username 替换)下找到.condarc 文件加入如下代码
auto_activate_base: false
自动补全 #
1、自动补全
这里输入 h,向右即可自动补全
2、开启补全配置
Set-PSReadLineKeyHandler -Key Tab -Function MenuComplete
Set-PSReadLineKeyHandler -Key Tab -Function Complete
这两个函数的作用分别是:
MenuComplete:当有多个匹配项时,会显示一个交互式菜单列表。Complete:直接补全到唯一的匹配项。
如果需要全局生效,则需要加入$profile中
3、重新加载 PSReadLine 在 PowerShell 7.4 中,你可以通过以下步骤来重新加载 PSReadLine 模块:
- 首先,你需要确保 PSReadLine 模块已经安装。你可以通过运行
Get-Module -ListAvailable PSReadLine命令来检查 PSReadLine 模块是否已经安装。 - 如果 PSReadLine 模块已经安装,你可以通过运行
Remove-Module PSReadLine命令来卸载当前加载的 PSReadLine 模块。 3,然后,你可以通过运行Import-Module PSReadLine命令来重新加载 PSReadLine 模块。
starship 美化 #
1、下载 nerd 字体
- nerd 字体推荐下载 jetbrainsmono nerd font
- nerd 字体 cheat sheet:Nerd Fonts - Iconic font aggregator, glyphs/icons collection, & fonts patcher
只安装 mono
.
├── JetBrainsMonoNerdFontMono-Bold.ttf
├── JetBrainsMonoNerdFontMono-BoldItalic.ttf
├── JetBrainsMonoNerdFontMono-ExtraBold.ttf
├── JetBrainsMonoNerdFontMono-ExtraBoldItalic.ttf
├── JetBrainsMonoNerdFontMono-ExtraLight.ttf
├── JetBrainsMonoNerdFontMono-ExtraLightItalic.ttf
├── JetBrainsMonoNerdFontMono-Italic.ttf
├── JetBrainsMonoNerdFontMono-Light.ttf
├── JetBrainsMonoNerdFontMono-LightItalic.ttf
├── JetBrainsMonoNerdFontMono-Medium.ttf
├── JetBrainsMonoNerdFontMono-MediumItalic.ttf
├── JetBrainsMonoNerdFontMono-Regular.ttf
├── JetBrainsMonoNerdFontMono-SemiBold.ttf
├── JetBrainsMonoNerdFontMono-SemiBoldItalic.ttf
├── JetBrainsMonoNerdFontMono-Thin.ttf
└── JetBrainsMonoNerdFontMono-ThinItalic.ttf
2、scoop 安装
scoop install starship
3、初始化
(1)使用 powershell,运行 $PROFILE,记住这个路径,并进入这个路径(如果没有这个路径就创建)
在这个路径下的 Microsoft.PowerShell_profile.ps1 中加入
Invoke-Expression (&starship init powershell)
重启终端即可
(2)或者
PS C:\Users\tohsaka rin> starship init powershell
Invoke-Expression (& 'D:\software\scoop\shims\starship.exe' init powershell --print-full-init | Out-String)
PS C:\Users\tohsaka rin> notepad $profile
4、配置 config
"$schema" = 'https://starship.rs/config-schema.json'
format = """
[](color_orange)\
$os\
$username\
$hostname\
[](bg:color_yellow fg:color_orange)\
$directory\
[](fg:color_yellow bg:color_aqua)\
$git_branch\
$git_status\
[](fg:color_aqua bg:color_blue)\
$c\
$cpp\
$rust\
$golang\
$nodejs\
$php\
$java\
$kotlin\
$haskell\
$python\
[](fg:color_blue bg:color_bg3)\
$docker_context\
$conda\
$pixi\
[](fg:color_bg3 bg:color_bg1)\
$time\
[ ](fg:color_bg1)\
$line_break$character"""
palette = 'gruvbox_dark'
[palettes.gruvbox_dark]
color_fg0 = '#fbf1c7'
color_bg1 = '#3c3836'
color_bg3 = '#665c54'
color_blue = '#458588'
color_aqua = '#689d6a'
color_green = '#98971a'
color_orange = '#d65d0e'
color_purple = '#b16286'
color_red = '#cc241d'
color_yellow = '#d79921'
color_font = '#FBF1C7'
color_font_app = '#FBF1C7'
[palettes.sakura_night_stars]
color_fg0 = '#fbf1c7' # 柔和温暖的白色(明亮前景色)
color_bg1 = '#2e1a47' # 深紫色,像夜空
color_bg3 = '#3a2d56' # 深紫色的阴影
color_blue = '#7a4d97' # 柔和梦幻的蓝色,像星辰
color_aqua = '#b4e0d9' # 轻盈的水绿色,像月光的反射
color_green = '#a8d8a5' # 淡绿色,像樱花的叶子
color_orange = '#f8a89f' # 柔和的粉橙色,像樱花花瓣
color_purple = '#c5a0e2' # 浅紫色,像暮光的色调
color_red = '#e5856e' # 淡珊瑚红色,像黎明的第一缕阳光
color_yellow = '#f2d97e' # 浅黄色,像远处星星的微光
color_font = '#FBF1C7' # 明亮的白色字体,便于阅读
color_font_app = '#FBF1C7' # 应用程序中一致的明亮字体
[palettes.sakura_night_stars_pink_deep]
color_fg0 = '#fbf1c7' # 明亮的白色字体,确保可读性
color_bg1 = '#1e0d2b' # 深紫黑色背景,增强对比度
color_bg3 = '#3e1f4b' # 深紫粉色,适合高对比度的环境
color_blue = '#7a4d97' # 梦幻蓝色,适合星辰的点缀
color_aqua = '#f1c8d1' # 粉蓝色,像月光
color_green = '#f0b8c4' # 淡粉绿,增强柔和感
color_orange = '#f4b7d6' # 柔和粉橙色,清新又不刺眼
color_purple = '#d08fc7' # 深粉紫色,提升深度和对比感
color_red = '#f56b8a' # 深粉红色,强调点缀
color_yellow = '#f2d39b' # 浅黄色,星光点缀
color_font = '#FBF1C7' # 明亮的白色字体,便于阅读
color_font_app = '#FBF1C7' # 一致的白色字体应用
[os]
disabled = false
style = "bg:color_orange fg:color_fg0"
[os.symbols]
Windows = ""
Ubuntu = ""
SUSE = ""
Raspbian = ""
Mint = ""
Macos = ""
Manjaro = ""
Linux = ""
Gentoo = ""
Fedora = ""
Alpine = ""
Amazon = ""
Android = ""
Arch = ""
Artix = ""
EndeavourOS = ""
CentOS = ""
Debian = ""
Redhat = ""
RedHatEnterprise = ""
Pop = ""
[username]
show_always = true
style_user = "bg:color_orange fg:color_fg0"
style_root = "bg:color_orange fg:color_fg0"
format = '[ $user]($style)'
[hostname]
disabled = false
ssh_only = false
ssh_symbol = "🌏 "
style = "bold green"
# [[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)
# format = "[ @$hostname ]($style)"
format = "[[@$hostname](fg:color_font bg:color_orange)]($style)"
trim_at = ".companyname.com"
[directory]
style = "fg:color_fg0 bg:color_yellow"
format = "[ $path ]($style)"
truncation_length = 3
truncation_symbol = "…/"
[directory.substitutions]
"Documents" = " "
"Downloads" = " "
"Music" = " "
"Pictures" = " "
"Developer" = " "
[git_branch]
symbol = ""
style = "bg:color_aqua"
format = '[[ $symbol $branch ](fg:color_fg0 bg:color_aqua)]($style)'
[git_status]
style = "bg:color_aqua"
format = '[[($all_status$ahead_behind )](fg:color_fg0 bg:color_aqua)]($style)'
[nodejs]
symbol = ""
style = "bg:color_blue"
format = '[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)'
[c]
symbol = " "
style = "bg:color_blue"
format = '[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)'
[cpp]
symbol = " "
style = "bg:color_blue"
format = '[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)'
[rust]
symbol = ""
style = "bg:color_blue"
format = '[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)'
[golang]
symbol = ""
style = "bg:color_blue"
format = '[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)'
[php]
symbol = ""
style = "bg:color_blue"
format = '[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)'
[java]
symbol = ""
style = "bg:color_blue"
format = '[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)'
[kotlin]
symbol = ""
style = "bg:color_blue"
format = '[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)'
[haskell]
symbol = ""
style = "bg:color_blue"
format = '[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)'
[python]
symbol = ""
style = "bg:color_blue"
format = '[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)'
[docker_context]
symbol = ""
style = "bg:color_bg3"
format = '[[ $symbol( $context) ](fg:#83a598 bg:color_bg3)]($style)'
[conda]
# style = "bg:color_bg3"
# format = '[[ $symbol( $environment) ](fg:#83a598 bg:color_bg3)]($style)'
style = "green bold"
# symbol = ""
symbol = "env:"
# "[[ @$hostname](fg:color_yellow bg:color_orange)]($style)"
format = '[[ $symbol( $environment) ](fg:color_font_app bg:color_bg3)]($style)'
ignore_base = false
[pixi]
style = "bg:color_bg3"
format = '[[ $symbol( $version)( $environment) ](fg:color_fg0 bg:color_bg3)]($style)'
[time]
disabled = false
time_format = "%R"
style = "bg:color_bg1"
format = '[[ $time ](fg:color_fg0 bg:color_bg1)]($style)'
[line_break]
disabled = false
[character]
disabled = false
format = "$symbol "
success_symbol = '[➜](bold fg:color_green)'
error_symbol = '[✗](bold fg:color_red)'
vimcmd_symbol = '[](bold fg:color_green)'
vimcmd_replace_one_symbol = '[](bold fg:color_purple)'
vimcmd_replace_symbol = '[](bold fg:color_purple)'
vimcmd_visual_symbol = '[](bold fg:color_yellow)'
# error_symbol = "[✗](fg:red)"
# success_symbol = "[](fg:green)"
命令行增强 #
- 命令行之前,可以先在 Microsoft Learn 上认识一下基本的 windows 命令
- Windows commands | Microsoft Learn
- cd | Microsoft Learn 以 cd 为例,需要切换驱动器需要加上
/d - Learn 上推荐的一些 cl 工具
Sysinternals 实用工具 - Sysinternals | Microsoft Learn
- psping,替换 ping 命令
- iperf,测试双向网速
- 没有被推荐的一些 cl 工具
- tree 命令替换
- dduan/tre: 改进版的 Tree 命令。 — dduan/tre: Tree command, improved.
tre -d -l 1 .-d 只显示目录,-l 限定深度
- dduan/tre: 改进版的 Tree 命令。 — dduan/tre: Tree command, improved.
- tree 命令替换
- x-cmd
x-cmd #
windows 下 1、安装
[System.Text.Encoding]::GetEncoding("utf-8").GetString($(Invoke-WebRequest -Uri "https://get.x-cmd.com/x-cmd.ps1").RawContentStream.ToArray()) | Invoke-Expression
2、使用
x tping 192.168.10.4 23
wsl 下
eval "$(curl https://get.x-cmd.com)"
3 / wsl 配置 #
Windows SSH 配置 #
1、安装 openssh 1.1) Powershell 打开 PowerShell(管理员),输入:
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
输出中 OpenSSH
Name : OpenSSH.Client~~~~0.0.1.0
State : Installed
Name : OpenSSH.Server~~~~0.0.1.0
State : NotPresent
- 如果 State 是 NotPresent → 还没安装
- 如果 Installed → 已安装
如果 OpenSSH.Server 没有安装,就安装:
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
安装完成后,重启服务或电脑确保生效。
启动并设置自启动
# 启动 sshd 服务
Start-Service sshd
# 设置开机自动启动
Set-Service -Name sshd -StartupType 'Automatic'
这时再运行:
net start sshd
就不会报“服务名无效”的错误了。
1.2) scoop
scoop install openssh
Notes
Notes
-----
Windows 10 or higher includes this build of OpenSSH in the system itself, hence it is recommended to use the system
OpenSSH there.
Run 'sudo D:\software\scoop\apps\openssh\current\install-sshd.ps1' to install sshd and ssh-agent as a service.
Run 'sudo D:\software\scoop\apps\openssh\current\uninstall-sshd.ps1' to uninstall the services.
运行
PS C:\Users\tohsaka rin> sudo D:\software\scoop\apps\openssh\current\install-sshd.ps1
> sudo net start sshd
输出
PS C:\Users\tohsaka rin> sudo net start sshd
OpenSSH SSH Server 服务正在启动 ..
OpenSSH SSH Server 服务已经启动成功。
2、开启防火墙
3、连接测试
PS C:\Users\aoi> x tping 192.168.10.4:22
- I|tping: Target -> [host=192.168.10.4] [port=22]
0 0.013 1.554 192.168.10.2 57700 192.168.10.4 22
1 0.011 1.595 192.168.10.2 57702 192.168.10.4 22
seq dns con local-ip:port remote-ip:port
1.595 ms ∈ [ 1 , 1 ] | AVG = 1.57 ± 0.02 FAIL= 0
用户名
$env:username
whoami # 计算机名/用户名,域/用户
设置 ssh 密码 / 不建议更改 Administrator 用户,可能没什么用
- SSH 登录使用的是 Windows 用户账户密码,不是 PIN、指纹或图形密码。
- 如果该用户没有设置密码,你可能无法通过 SSH 登录(Windows 默认不允许空密码远程登录)。
- 用户名需要和你在远程机器上看到的完全一致,包括空格,例如
"tohsaka rin"。
net user "tohsaka rin"
net user "tohsaka rin" NewPassword123!
连接
ssh -l "tohsaka rin" 192.168.10.4
设置连接时自动打开 pwsh
- 打开 管理员权限 PowerShell。
- 编辑
sshd_config文件:notepad "C:\ProgramData\ssh\sshd_config" - 添加或修改以下行:
# 设置登录用户默认 shell
ForceCommand "C:\Program Files\PowerShell\7\pwsh.exe"
或者针对 所有用户:
# 替换默认 shell
Subsystem powershell C:\Program Files\PowerShell\7\pwsh.exe -sshs -NoLogo -NoProfile
注意路径必须写完整,并且如果路径中有空格,需要用双引号包裹。
重启
sudo net stop sshd
sudo net start sshd
Restart-Service sshd
局域网中的其他主机访问 wsl #
值得注意的是,windows10 的 wsl 不支持 mirror 模式,也就是无法使用 localhost 直接访问 wsl(但是可以用 localhost 访问 docker 容器开出来的端口,合理怀疑 docker 开的端口是直接映射 windows 端口,而非 wsl 端口)。镜像模式直到 win11 的 23H2 版本才支持,win10 的 22H2 的最后一个 build 版本也不支持。
(1)windows11 #
通过 电脑 A-SSH 登录 电脑 B-Windows,然后自动进入 WSL,而不是 电脑 B-Windows 的 cmd 或 pwsh。
1、wsl / 设置 wsl 的 root 密码
passwd root
2、wsl / 首先 wsl 添加 openssh-server
# 更新并安装
sudo apt update
sudo apt install -y openssh-server
# 确保 /var/run/sshd 存在(某些发行版需要)
sudo mkdir -p /var/run/sshd
sudo chown root:root /var/run/sshd
# 修改 sshd 配置,将 Port 22 改为 23
# 先备份
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
修改 sshd_config
Port 23
ListenAddress 0.0.0.0
PermitRootLogin yes
PasswordAuthentication yes
重启
sudo service ssh restart
3、windows / 添加映射
sudo netsh interface portproxy add v4tov4 listenport=23 listenaddress=0.0.0.0 connectport=23 connectaddress=localhost
- listenport 监听转发端口
- listenaddress 设置为 0.0.0.0, 可以给任意网段连接
- connectport 目标端口,wsl 开放的 ssh 端口
- connectaddress 目标地址,就是 wsl mirrored 的 localhost
一些其他的命令
# 删除代理
netsh interface portproxy delete v4tov4 listenport=23 listenaddress=0.0.0.0
# 展示所有v4代理
netsh interface portproxy show v4tov4
连接测试
ssh -p 23 [email protected]
(2)windows10 #
[!success] 下面的方法适合在 win10 上启用,我自己不推荐这种麻烦的做法,但如果你是 win10 的话,还是使用这种方法吧。
我们这里使用 wslpp 这个项目来将 wsl 的 ip 从 172 代理到 localhost
工作原理 wslpp start an interval to get IP address of the nat interface and scan all ports listening at all network in the subsystem, then use golang’s net to start proxy direct to ports.
间隔 3s 扫描 wsl 中的所有 ports,然后使用 golang 代理。
1、启动 wslpp,配置文件在 %HOMEPATH%/.wslpp/config.json 中
cmd /c wslpp.exe
2、使用 ssh 测试
3、如果有问题,需要先关闭 23 代理的进程,然后重启 wsl
netstat -ano | findstr ":23"
taskkill /f /pid <xxxid>
More、添加计划任务
wsl 配置 miniforge #
wget "https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-$(uname)-$(uname -m).sh"
# 交互,最后默认no就是不执行初始化
# 如果选择yes就需要手动执行 conda config --set auto_activate_base false
bash Miniforge3-$(uname)-$(uname -m).sh
# 非交互,直接这个就行
# 然后跳转到下面的「✈️非交互后」
bash Miniforge3-$(uname)-$(uname -m).sh -b
安装配置参考:Miniforge:Conda solving enviroment 终结者 · Aoidayo 补充一些: miniforge linux 默认
- 安装在
/root/minifortge3下面
✈️ 非交互后
eval "$(/root/miniforge3/bin/conda shell.bash hook)"
# 配置写入bashrc
conda init
# 关闭 base自动激活
conda config --set auto_activate_base false
pycharm 配置 ssh #
两步
1、settings>build,execution,deployment>添加 sftp 连接,配置 ssh 连接,最后 apply
2、设置 Mappings,
3、添加 Python Interpreter,选择 ssh,设置 rsync 的文件夹。
编写一段简单的代码,运行即可。