Windows经验汇总

2022-01-29 fishedee 后端

0 概述

Windows 经验汇总

1 安装

1.1 独立U盘安装

到官网下载安装,最后单独安装到一个U盘上,可靠稳定。

之前的版本可以到这里下载

1.2 驱动

不要使用驱动人生,直接到官方网站下载驱动最实际

2 开发环境选型

2.1 命令行工具

Windows下的命令行工具太多了,注意,不要企图用一个命令行工具解决所有问题,始终要以实用的观点看待问题。

  • WSL,和WSL2,IO性能是个大坑。Linux访问Windows文件,或者Windows访问Linux文件很慢,另外,兼容性也很多问题,不要企图将所有Linux工具,像nginx,mysql整套用Linux搬移过来用。
  • MinGW bash,工具很好用,而且成熟,速度也不会太慢。缺点就是有时候的命令行输出看不到,我也不知道为什么。
  • CMD,PowerShell,原生命令行工具,没坑,缺点就是没法支持Linux工具链。
  • VMware虚拟机,虚拟机里面跑Linux,将一整套开发工具都放在虚拟机里面跑,好处是没有坑。但是,Ubuntu在我的墨水显示屏中就是个坑,所以也是个悲剧。

总结,能用原生工具尽量用原生工具,要跑bash脚本的时候才改用MinGW bash。

2.2 MinGw下的MSYS2

Git Bash使用的就是MSYS2下的mintty终端工具了

2.2.1 优化性能

MinGw Bash工具优化:

  • 关闭杀毒软件
  • 关闭AMD显卡驱动

2.2.2 安装新工具

到官网下载msys64

完成打开Msys bash,并输入命令pacman -Syu

pacman -S --needed base-devel mingw-w64-x86_64-toolchain
pacman -S git
pacman -S vim
pacman -S openssh

这样就能安装Make工具和git工具了

C:\msys64\msys2_shell.cmd

最后注意将msys2固定到任务栏就可以了。另外,github bash的工具与这个是不能共用的。

2.2.3 配置

export PS1="\w:$ "

修改C:.bashrc文件。加入以上配置能加快速度

db_home: windows cygwin desc

打开/etc/nsswitch.conf文件

rem set MSYS2_PATH_TYPE=inherit

打开msys2的msys2_shell.cmd文件,将rem去掉,就能自动继承系统的环境变量了。

具体看这里,还有看这里

字符集

C:\msys64\usr\bin

2.2.4 窗口配置

字体配置

界面主题

xterm

3 工具

3.1 快捷键

  • 截图,Win + Shift + S
  • 切换任务,Alt+Tab
  • 切换Tab页,Ctrl+Tab

3.2 任务栏

先将图标固定到任务栏

然后用右键属性,配置打开文件的参数,或者更改任务位置

3.3 ssh代理

这里下载MyEnTunnel,它可以将一个远程ssh服务转换为本地代理服务。

cd "C:\Program Files\MyEnTunnel"
.\plink.exe -C -ssh -N -D 127.0.0.1:7070 -pw password -l user host

打开PowerShell执行以上命令接口,然后用Chrome的socks5代理配置本地127.0.0.1端口为7070的服务即可。

3.4 录屏

Windows 10 自带录屏软件

启动录屏,win+g

点击圆圆的按钮启动录屏,然后点击你需要录屏的窗口

最后点击右上角的停止录屏按钮即可

Windows 10录屏的缺点在于:

  • 颜色不准确,录屏文件太大
  • 只能录制一个进程

3.5 Win11 默认的右键菜单

reg add "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32" /f /ve

在cmd中输入以上命令,重启后即可

4 管理员权限

有时候,我们需要用管理员权限修改文件,先用运行命令打开文件夹

选择,文件,用管理员的PowerShell打开当前目录

sublime_text hosts

输入命令即可用管理员权限编辑,可省略exe后缀

5 配置文件

5.1 hosts

修改hosts文件即可,在C:

127.0.0.1   mylocalhost

格式如上,也比较简单

6 进程管理

netstat -ano | findstr 8585

查看占用8585端口的进程

tasklist | findstr 14244

查看14244进程的信息

taskkill /f /t /im 14244

强行结束14244进程

7 包管理器

Windows下的包管理器,choco

Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))

用管理员打开PowerShell,然后输入以上命令,即可安装choco

choco --version

查看版本

# 查看代理
choco config get proxy
# 设置代理
choco config set proxy [location name and port,一般填写为localhost:7890]
choco config set proxyUser [username]
choco config set proxyPassword [password]
# 取消代理
choco config unset proxy

代理配置如上

8 WSL

8.1 安装

WSL 就是Windows Subsystem Linux了。WSL缺少很多Linux的底层限制,优点是可以直接与本地共享网络端口,IO性能也比较好。

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

以管理员启动PowerShell,输入以上命令

在Mircrosoft Store,输入Ubuntu,安装WSL下的Ubuntu的发行版。下载完毕以后,点击打开,初始化的时候时间久一点,然后输入账号和密码就可以了

wsl.exe -d Ubuntu

最后输入就能进入WSL里面了,注意,在kafka中大部分的功能都是用sudo来运行的。注意安装以后的显示的版本号,我这边显示的是Ubuntu 22.04

8.2 更新源

这里能看到各种源,我们找到Ubuntu,选择好版本号。然后复制到/etc/apt/source.list里面就可以了,source.list的原有数据全部删掉了。

sudo apt-get update
sudo apt-get upgrade

更新一下源

sudo apt-get install default-jre
sudo apt-get install default-jdk

安装默认的jdk和jre,我这里是11版本

8.3 停止

wsl --shutdown

停止所有wsl的所有发行版本

8.4 自启动wsl的服务

C:\Users\{Name}\AppData\Local\Microsoft\WindowsApps\ubuntu.exe run "sudo service supervisor start"

填写以上代码到一个Ubuntu.bat文件

shell:startup

打开搜索按钮,输入“运行”,填写以上代码,进入自启动文件,将Ubuntu.bat放进去就可以了。

9 WSL2

WSL2是WSL的官方升级版本,WSL的bug实在太多了,kafka都无法正常关闭和重启。WSL2的兼容性要比WSL要好得多,缺点就是:

  • 对本地文件的读写速度比较慢
  • WSL2中的网络端口无法自动映射到127.0.0.1中,在连接的时候,要么直接指定WSL2的IP地址,要么将WSL2的端口手动映射到127.0.0.1中

参考资料:

9.1 安装

在运行中执行winver,Windows 10版本要大于1903,Windows 11版本则没有要求

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

在PowerShell执行以上命令,记住用管理员模式

在搜索中输入“启用”,然后安装“Windows虚拟机监控程序平台”和“虚拟机平台”两个组件。

最后到这里下载安装wsl_update_x64.msi

wsl --set-default-version 2

将wsl设置默认安装2版本的发行版

在搜索栏中输入“Microsoft Store”,安装Ubuntu 20.04即可。安装完毕后,点击“打开”,输入账号和密码。

9.2 更新源

这里能看到各种源,我们找到Ubuntu,选择好版本号。然后复制到/etc/apt/source.list里面就可以了,source.list的原有数据全部删掉了。

sudo apt-get update
sudo apt-get upgrade

更新一下源

sudo apt-get install default-jre
sudo apt-get install default-jdk

安装默认的jdk和jre,我这里是11版本

9.3 wsl工具

wsl -l -v 可以查看所有的发行版

wsl --unregister Ubuntu

这样可以删除其中一个发行版

9.4 动态IP与端口转发

ifconfig  eth0 | head -n2 | grep inet | awk '{print$2}'

在WSL2里面,每次重启后的IP都会发生变化,通过以上命令可以获取到当前的IP。

package main

import(
    "fmt"
    "net/http"
    "log"
)

func sayHi(w http.ResponseWriter, r *http.Request)  {
    fmt.Fprint(w,"Hi\n")
    fmt.Println("Hi")
}

func main() {
    http.HandleFunc("/", sayHi)
    log.Fatal(http.ListenAndServe(":8777", nil))
}

我们在虚拟机里面写一段代码,倾听8777端口

netsh interface portproxy add v4tov4 listenport=8777 listenaddress=0.0.0.0 connectport=8777 connectaddress=172.26.53.35
netsh interface portproxy show all

然后在Windows里面做8777端口的端口转发

curl http://localhost:8777

现在就能直接用127.0.0.1来发送请求了。

9.5 动态IP的Host文件

#!/bin/bash
# win hosts 文件路径
win_hosts_path="/mnt/c/Windows/System32/drivers/etc/hosts"
# 为 wsl2 设置的域名
wsl_domain="mykafka"
# 获取 wsl2 的 ip
wsl_ip=$(ifconfig eth0 | grep -w inet | awk '{print $2}')
# 判断是否已存在 wsl2 的域名,如果存在则修改,否则追加
if grep -wq "$wsl_domain" $win_hosts_path
then
    # 此处因为权限问题没有直接用 sed 修改 hosts 文件
    win_hosts=$(sed -s "s/.* $wsl_domain/$wsl_ip $wsl_domain/g" $win_hosts_path)
    echo "$win_hosts" > $win_hosts_path
else
    echo "$wsl_ip $wsl_domain" >> $win_hosts_path
fi

# 为 wsl 设置 win host
wsl_hosts_path="/etc/hosts"
echo "$wsl_ip $wsl_domain" >> $wsl_hosts_path

由于WSL2是动态IP,我们可以自动将IP取出来,与固定的Host做映射。然后写入到虚拟机和宿主机的Host文件就可以了。

C:\Users\{Name}\AppData\Local\Microsoft\WindowsApps\ubuntu.exe run "sudo bash /mnt/c/{Name}/fish/wsl2_init_domain.sh"

在运行中输入shell:startup,就能在启动的时候自动执行这个脚本文件了。

10 文件权限

参考资料:

10.1 Linux权限

在Linux中,文件的权限比较简单,就是拥有者权限,拥有者所在组权限,以及其他权限。根据访问用户与拥有者的关系,就能计算得到他对这个文件的权限是什么。

10.2 Windows权限

10.2.1 RBAC模型

Windows的文件权限,更像是RBAC模型

  • 用户权限的累加,用户可以同时在不同的组,所在组的权限累加即为用户权限。权限不仅可以加在用户上,也可以在用户组上。
  • 文件权限的继承,子文件夹和文件的默认权限将继承自父文件夹,windows默认的分区权限用户为authenticated users,system,administrators,users,即所有创建的文件夹和文件默认继承这些权限。
  • 拒绝权限高于一切,用户一个组的访问权限被拒绝后,所在的其它组的可访问权限也会失效。
  • 默认情况下文件的所有者是创建文件的用户,但管理员组拥有取得文件“所有者”的权利,文件的所有者可以修改文件的权限。

10.2.2 高级权限

除了普通的读取/写入权限以外,Windows还有很多权限可以进行细节调整,这些称为高级权限。

10.2.3 区别

与Linux权限的区别:

  • 文件上没有其他权限的概念,只有当前用户 + 用户所在组所在权限的叠加。如果你需要一个默认的其他权限,就指定一个Everyone组权限就可以了。
  • Linux只有允许权限,没有禁止权限的概念。例如,我需要禁用所有人的删除权限,所有用户的权限区别只有读取和修改而已。在Windows中,可以加入一个Everyone的删除禁用权限就可以了,因为禁用权限高于允许权限。

10.2.4 常见的用户组

  • Administrators组:管理员账户组,对计算机有不受限制的完全访问权,内置管理员Administrator和普通管理员账户都在这个组里。
  • Users组:普通权限用户组,可以运行大部分程序,更改一部分系统设置,是安全性最高的用户组,管理员和来宾账户也包含在此组内。
  • system账户:执行权限最高的系统账户,仅供运行系统级服务和进程使用,用户无法登陆该账户。
  • authenticated users:所有使用用户名和密码登陆成功的账户,不包含来宾账户guest。用该组代替everyone组可以防止匿名访问。
  • TrustedInstaller账户:系统文件管理权限最高的账户,由system运行Windows Modules Installer后生成的服务账户,大多数的系统文件修改删除需要此用户权限。
  • guest账户:来宾账户,权限最小的用户,仅供没有计算机账户的用户使用,访账户默认没有密码。
  • everyone用户组:顾名思义,所有的用户,这个计算机上的所有用户都属于这个组,通常用于设置公共或默认的权限时使用。

11 FTP服务器

参考资料:

11.1 启用组件

启用组件

11.2 创建用户

选择,计算机管理

选择,系统工具,本地用户和组,用户

填写用户,注意下方的打钩部分。

这样,我们就创建了一个cat用户

11.3 创建ftp文件夹

创建一个ftp文件夹,然后右键属性,选择安全。添加cat用户,将读写权限都勾选上去。如果你需要匿名登录的话,就将everyone权限添加上去

11.4 启动ftp服务器

就这样配置好了,注意几点:

  • 无SSL
  • 身份验证填写为,基本
  • 身份授权,可以填写为所有用户,也可以只指定为cat

11.5 连接ftp

在文件管理器,直接输入ftp://192.168.x.x就可以进入了

11.6 调试

有时候,按照了以上步骤,依然不能很好地配置好ftp服务器,那么,我们可以通过以下步骤找出问题。

选择右侧的基本设置

先选择“连接为…”,然后选择“特定用户”

最后选择“测试设置”,就可以知道ftp问题在哪里。

12 Hyper-V

关闭:bcdedit /set hypervisorlaunchtype off
开启: bcdedit /set hypervisorlaunchtype Auto

使用管理员模式来执行

相关文章