跳过正文
  1. blog/

Windows Scoop包管理,Terminal优化,WSL配置

·7088 字·
Blog Windows
Aoidayo
作者
Aoidayo
懒人
目录

1 / 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 下载,默认true
  • aria2-retry-wait: 重试等待秒数,默认2
  • aria2-split: 单任务最大连接数,默认5
  • aria2-max-connection-per-server: 单服务器最大连接数,默认5 ,最大16
  • aria2-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 模块:

  1. 首先,你需要确保 PSReadLine 模块已经安装。你可以通过运行 Get-Module -ListAvailable PSReadLine 命令来检查 PSReadLine 模块是否已经安装。
  2. 如果 PSReadLine 模块已经安装,你可以通过运行 Remove-Module PSReadLine 命令来卸载当前加载的 PSReadLine 模块。 3,然后,你可以通过运行 Import-Module PSReadLine 命令来重新加载 PSReadLine 模块。

starship 美化
#

1、下载 nerd 字体

只安装 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)"

命令行增强
#

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

  1. 打开 管理员权限 PowerShell
  2. 编辑 sshd_config 文件: notepad "C:\ProgramData\ssh\sshd_config"
  3. 添加或修改以下行:
# 设置登录用户默认 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 的文件夹。

编写一段简单的代码,运行即可。