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的服务
"sudo service supervisor start" C:\Users\{Name}\AppData\Local\Microsoft\WindowsApps\ubuntu.exe run
填写以上代码到一个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) {
.Fprint(w,"Hi\n")
fmt.Println("Hi")
fmt}
func main() {
.HandleFunc("/", sayHi)
http.Fatal(http.ListenAndServe(":8777", nil))
log}
我们在虚拟机里面写一段代码,倾听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文件就可以了。
"sudo bash /mnt/c/{Name}/fish/wsl2_init_domain.sh" C:\Users\{Name}\AppData\Local\Microsoft\WindowsApps\ubuntu.exe run
在运行中输入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
使用管理员模式来执行
- 本文作者: fishedee
- 版权声明: 本博客所有文章均采用 CC BY-NC-SA 3.0 CN 许可协议,转载必须注明出处!