微软的良心产品,不用在windows主机上面装虚拟机了,开发者的福音,如果你是一个开发人员,可以立即用起来!以下是我在几个月的使用过程中遇到的一些问题,希望能帮到有需要的用户,不要为了重复踩坑而花费太多时间
安装
0. ltsb版本不支持,32位不支持;home及以上版本支持。
1. 在设置 - 针对开发人员 - 勾选开发人员模式。
2. 在控制面板 - 程序 - 启用或关闭windows功能 - 勾选“适用于Linux 的 Windows 子系统(Beta)”
3. 重启电脑后,win+r打开cmd,输入bash等待安装完成,可能会很慢很慢,建议翻墙后安装
在新版本中,只需在microsoft store中进行安装即可
切换apt源
# 备份
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
# 修改
sudo vim /etc/apt/sources.list
# 将原来的删除后,加入
deb http://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
设置root为默认用户并清空密码
lxrun /setdefaultuser root
(20180603)如果提示:
警告: lxrun.exe 仅用于配置适用于 Linux 的 Windows 子系统的旧分发版。
可以通过访问 Windows 应用商店来安装分发版:
https://aka.ms/wslstore
错误: 0x80070002
是新版本取消了lxrun,执行:
ubuntu config --default-user root
新版本移除了lxrun,新增了ubuntu命令,输入ubuntu /?
可查看所有可用命令
重新安装windows bash wls
bash版本无法自动更新更新,必需重新卸载再安装,关于bash的一些bug反馈和问题查找可以移步官方github repo:https://github.com/Microsoft/BashOnWindows/issues非常活跃
lxrun /unstinall /full /y
lxrun /install
新版本直接卸载应用,重装应用的方式安装
中文乱码
sudo locale-gen zh_CN.UTF-8
(20180604)如果无效,执行:
apt-get update
apt-get install language-pack-zh-hans
update-locale LANG=zh_CN.UTF-8
安装lnmp的一些问题
lnmp一键安装包提示错误:
&& make install_sw LIBDIR=lib
make[2]: Entering directory '/mnt/c/Users/hisune/Downloads/Compressed/lnmp1.4-full/src/openssl-1.0.2l'
Makefile is older than Makefile.org, Configure or config.
Reconfigure the source tree (via './config' or 'perl Configure'), please.
Makefile:410: recipe for target 'Makefile' failed
make[2]: *** [Makefile] Error 1
看起来像是linux系统时间或makefile的文件时间问题,但是我谷歌了N久没有解决,甚至在lnmp论坛上发帖求助大神依旧无果。最后发现这是windows bash的一个bug。。。解决:
不要在mnt的目录中安装,到/data中安装执行install.sh 关于mnt目录,多说两句,他会挂载windows的盘符。例如/mnt/c就是对应windows下的C盘,实现两个系统文件公用,是不是很方便?
mysql出错
Warning: World-writable config file '/etc/my.cnf' is ignored
Starting MySQL
... * The server quit without updating PID file (/usr/local/mysql/data/DESKTOP-K9LKR9D.pid).
解决办法,修改权限:
chmod 644 /etc/my.cnf
php-fpm与nginx通信异常
方案1
安装完成后,通过fastcgi_pass 127.0.0.1:9000;的方式来和php-fpm交互,而非sock(此方式可能会导致bash中的fpm响应非常慢,推荐第二种方式)
#修改/usr/local/php/etc/php-fpm.conf
;listen = /tmp/php-cgi.sock
listen = 127.0.0.1:9000
#修改/usr/local/nginx/conf/nginx.conf
#fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_pass 127.0.0.1:9000;
方案2
使用/tmp/php-cgi.sock进行交互,但nginx需要做修改(sock文件方式不再细述):
worker_processes auto;
master_process off; # 关闭master_process
pid /run/nginx.pid;
http {
...
fastcgi_buffering off; # 关闭fastcgi_buffering
...
}
php-fpm报错
ERROR: failed to retrieve TCP_INFO for socket: Invalid argument (22)
这个错误虽然不影响程序正常执行和使用,但是频繁生成的错误文件很吃硬盘IO,我的建议是关掉他:
# 修改php-fpm.conf提高日志等级:
log_level = alert
存在的其他无法解决的问题
由于windows bash对网络方面的命令有很多还不支持,其中就包括netstat,这样就导致nginx无法通过注册的service进行开关重启,也就是以下命令不可用:
sudo service nginx restart
sudo nginx -s reload
目前的解决方案是,只能kill掉nginx的进程后通过service nginx start来达到重启和修改配置后的reload的目的
关于ssh的开启
vim /etc/ssh/sshd_config
# 修改配置:
ListenAddress 0.0.0.0
UsePrivilegeSeparation no
PasswordAuthentication yes
#开启服务:
service ssh start
#如果无法开启服务,可能是22端口被占用了,可以使用下面的命令打开详细的开启服务debug:
/usr/sbin/sshd -D -d -e
#找到:
#RSAAuthentication yes
#PubkeyAuthentication yes
#AuthorizedKeysFile .ssh/authorized_keys
#去掉这三行的注释
mkdir ~/.ssh
vim ~/.ssh/authorized_keys
#加入public key
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
service ssh restart
提示:
* Starting OpenBSD Secure Shell server sshd Could not load host key: /etc/ssh/ssh_host_rsa_key
Could not load host key: /etc/ssh/ssh_host_dsa_key
Could not load host key: /etc/ssh/ssh_host_ecdsa_key
Could not load host key: /etc/ssh/ssh_host_ed25519_key
执行:
/usr/bin/ssh-keygen -A
bash和ssh的自动开启(此章节有部分内容来自google)
关闭bash窗口,整个linux会被关闭,所以我们需要做一个启动win10就开启sshd服务的bash 利用sudoers使得开启进程的sudo命令sudo /usr/sbin/sshd -D可以被任何用户执行而不需要输入密码。 在bash中输入:
sudo visudo -f /etc/sudoers.d/sshd
# 然后键入如下命令:
%sudo ALL=(ALL) NOPASSWD: /usr/sbin/sshd -D
按Ctrl+X退出,会提示保存,一定要修改保存的文件名,把 sshd.tmp
中的.tmp
删去,因为按照README中的内容,如果有.
,那么这个文件就无效
直接在一个你喜欢的位置,写两个文件(同一目录下)文件1 : startsshd.bat,内容是:
cd C:\Windows\System32
bash.exe -c "sudo /usr/sbin/sshd -D"
文件2 : runinbackground.vbe (文件名随意),内容是:
dirPath = createobject("Scripting.FileSystemObject").GetFile(Wscript.ScriptFullName).ParentFolder.Path
shellPath = dirPath & "\" &"startsshd.bat"
' wscript.echo shellPath
set ws=wscript.createobject("wscript.shell")
ws.run shellPath & " /start",0
Win+Q , 然后cmd中输入taskschd.msc. 点开就是一个设置计划任务的程序。 点击菜单栏的操作,选择创建基本任务:
- 第一步,填任务名称和说明
- 触发器选 当用户登录时,当然其他也可以,随意。
- 操作,选 启动程序
- 通过浏览,定位到刚刚的runinbackground.vbe,
- 完成。
这样在开机的时候执行runinbackground.vbe就可以开机启动bash和sshd了。你也可以双击打开runinbackground.vbe试试服务正常与否,开启后在windows的任务管理器能看到linux中的进程。
如果启动不起来的故障排除小技巧,在cmd中输入
cd C:\Windows\System32
bash.exe -c "sudo /usr/sbin/sshd -D"
看看报什么错,例如我这边报错:
C:\Users\hisune>cd C:\Windows\System32
C:\Windows\System32>bash.exe -c "sudo /usr/sbin/sshd -D"
Missing privilege separation directory: /var/run/sshd
在bash中输入:
mkdir -p /var/run/sshd
另一个我遇到的错误:
C:\Windows\System32>bash.exe -c "mkdir -p /var/run/sshd && chmod 600 /var/run/sshd/ && sudo /usr/sbin/sshd -D"
/var/run/sshd must be owned by root and not group or world-writable.
在bash中输入:
chmod 600 /var/run/sshd/
如果提示需要密码,可以清空密码:
lxrun /setdefaultuser root
以上就是所有我在使用bash和lnmp环境下遇到的坑。最后列举一下到目前为止,windows bash所有支持或还不支持的网络命令:
支持:
- ping
- dig
- ifconfig
- ip link
- ip addr show
- ifconfig
- whois
- nslookup
- ip route
- ip addr add/delete
不支持:
- netstat
- nmap
- tracepath
- traceroute
- traceroute6
如果您觉得您在我这里学到了新姿势,博主支持转载,姿势本身就是用来相互学习的。同时,本站文章如未注明均为 hisune 原创 请尊重劳动成果 转载请注明 转自: win10的自带BASH ubuntu(WSL)下的一些使用情况汇总 - hisune.com
0 Comments