突然间发现子系统这种新鲜东西,故写篇笔记整理一下
开始WSL之旅的第一步是启动Windows Subsystem for Linux功能
,有两种方法实现:
以管理员
身份打开PowerShell
。右键单击屏幕左下角“开始”
菜单,找到“Windows PowerShell(管理员)”并打开
复制以下命令并运行
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
安装完成后重启电脑~
打开屏幕左下角“Cortana搜索框”输入“control panel”搜索并打开搜索结果中的“控制面板”
找到启用或关闭Windows功能,如图所示,打开“程序”——“启用或关闭Windows功能”,找到并勾选“适用于Linux的Windows子系统”,点击“确定”。
安装完成后重启电脑~
打开Win10应用商店搜索你喜欢的Linux发行版并安装。目前,WSL支持Ubuntu,Kali Linux,GNU,OpenSUSE等发行版。
以安装Ubuntu
为例,安装完成后搜索并打开Ubuntu
执行后续安装。
安装完成后按提示输入默认用户名、密码。
在这里时,在输入用户名、密码时我将安装窗口直接关闭(才不会说是因为点错了呢!),结果,再次打开就直接是root,算是误打误撞?反正以后打开都是root权限,有、强0.0
而在这里也出现了一个问题,我想装的东西太多了,C盘不够用咋办?软链接到非系统盘呗!
mklink
: 本质上是一个创建链接的工具,这里使用mklink 欺骗系统,使系统误以为还是安装在了C盘
正常是:C:\Users\xxxx\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows
(_xxxxxxx)(xxxxx可能有也可能没有,反正我是有(79rhkp1fndgsc))
直接粗暴的方法的是:先装一遍Linux子系统,在C:\Users\xxxx\AppData\Local\Packages\
下查看带有类似 CanonicalGroupLimited.UbuntuonWindows 字眼的新文件夹,记下它的名字
卸载的原因在于Linux子系统下的文件系统的权限更改十分复杂,这里面的一些文件不属于Windows下的管理员用户所有,也不属于你的用户,它就是Linux下用户所有的,使用一般的修改权限文件方法很容易出问题。因此还是推荐先备份后再卸载。
使用管理员打开cmd
, 输入下面的命令:
mklink /j C:\Users\XXXX\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc D:\WSL-ubuntu\
D:\WSL-ubuntu\
即非系统盘的位置
在这里我花了很长的时间查文档寻求解决方法,结果都是些简单问题0.0…
问题出现在文件权限上。解决方法:
对着你非系统盘的储存文件夹,右键->属性->安全->编辑->设置完全控制,即可解决。
或:icacls D:\WSL-ubuntu\ /grant “你的用户名:(OI)(CI)(F)”
这里问题出现在LxssManager服务上。
Lxss Manager 服务支持运行本机 ELF 二进制文件。该服务提供在 Windows 上运行 ELF 二进制文件所需的基础结构。如果停止或禁用该服务,这些二进制文件将不再运行。
解决方法:重启电脑->此电脑->右键->管理->服务->找到LxssManager->启动
同样的道理,使用 mklink
工具可以将其他大文件迁移到非系统盘后再创造软链接,用于减小C盘负担是很不错的。接下来开始折腾优化0.0…
因为Linux子系统的apt源使用的是官方源,需要连接到国外的服务器。所以安装一些软件时下载会很慢,我们可以改用国内的镜像apt源。
国内的镜像源主要有:
阿里源
deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
中科大源
deb https://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
网易源
deb http://mirrors.163.com/ubuntu/ wily main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ wily-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ wily-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ wily-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ wily-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ wily main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ wily-security main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ wily-updates main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ wily-proposed main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ wily-backports main restricted universe multiver
个人觉得科大源好用点0.0
先进行一下备份。
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
然后
sudo nano /etc/apt/sources.list
选择一个源添加到文件最前面或直接替换掉原文件。
[Ctrl+o 写入 Ctrl+x 退出 Ctrl+k 删除整行,大概就用到这仨吧]
保存后运行
sudo apt-get update
sudp apt-get upgrade
win10下可有、丑了。推荐大家一个开源软件cmder,可以完美解决这一问题。这个软件同样可以在官网上下载到,而且是免安装。选择下载mini版即可,因为bash我们已经有了嘛!
![在这里插入图片描述](https://raw.githubusercontent.com/Alikas0/files/master/img/2019040919033478.png
?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E4MzE4MjAzNA==,size_16,color_FFFFFF,t_70)
贴张我修改后的图0.0,是不是好看很多。
打开cmder直接进入的是cmd,我们可以在设置中更改它的startup方式,选择command line ,填入bash -cur_console:p
。
保存设置,下次打开时就直接进入Linux子系统了。
还可以在colors选项中选择自己喜欢的主题,在transparency中更改主界面的透明度。
而且cmder还有分屏功能。这些功能请自行发掘0.0
我们可以将cmder添加进win10的环境变量中,这样我们就可以像在Linux系统中那样,在任意文件目录下直接右键打开cmder并进入当前路径了。
比如在桌面点击右键,选择cmder here,这样打开cmder就可以直接进入桌面的路径了。
设置环境变量的具体方法是,依次进入控制面板->系统和安全->系统->高级->环境变量->编辑系统环境变量Path->新建->把cmder路径添加进来,保存之后就可以用win+R的方式打开cmder了。
接下来,以管理员方式打开cmd,输入命令Cmder.exe /REGISTER ALL
。之后就可以直接在右键中打开cmder了!
shell的类型有很多种,linux下默认的是bash,虽然bash的功能已经很强大,但对于以懒惰为美德的程序员来说,bash的提示功能不够强大,界面也不够炫,并非理想工具。
而zsh的功能极其强大,只是配置过于复杂,起初只有极客才在用。后来,有个穷极无聊的程序员可能是实在看不下去广大猿友一直只能使用单调的bash, 于是他创建了一个名为oh-my-zsh
的开源项目,then,我这种蒟蒻也能用上zsh了。
(1)安装zsh
sudo aptitude update
sudo aptitude install zsh
(2)设zsh
为默认shell
chsh -s /bin/zsh
(3)全自动安装on-my-zsh
wget https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | sh
通过如下命令可以查看可用的Theme
:
# ls ~/.oh-my-zsh/themes
如何修改zsh主题呢?
编辑~/.zshrc
文件,将ZSH_THEME="candy"
,将candy修改为你需想要的主题。
在~/.zshrc
中找到plugins
关键字,就可以自定义启用的插件了,系统默认加载git
。
命令内容可以参考cat ~/.oh-my-zsh/plugins/git/git.plugin.zsh
。
常用的:
gapa git add --patch
gc! git commit -v --amend
gcl git clone --recursive
gclean git reset --hard && git clean -dfx
gcm git checkout master
gcmsg git commit -m
gco git checkout
gd git diff
gdca git diff --cached
gp git push
grbc git rebase --continue
gst git status
gup git pull --rebase
完整列表:https://github.com/robbyrussell/oh-my-zsh/wiki/Plugin:git
解压文件用的,所有的压缩文件,都可以直接x filename
,不用记忆参数
当然,如果你想要用tar
命令,可以使用tar -
加tab
键,zsh会列出参数的含义。
按照官方文档介绍,需要使用如下命令安装,而不是一些博客中的介绍:
yum install autojump-zsh
安装好之后,需要在~/.zshrc
中配置一下,除了在plugins
中增加autojump
之外,还需要添加一行:
[[ -s ~/.autojump/etc/profile.d/autojump.sh ]] && . ~/.autojump/etc/profile.d/autojump.sh
安装好之后,记得source ~/.zshrc
,然后你就可以通过j+目录名
快速进行目录跳转。支持目录名的模糊匹配和自动补全。
j -stat
:可以查看历史路径库zsh-autosuggestions
git clone git://github.com/zsh-users/zsh-autosuggestions $ZSH_CUSTOM/plugins/zsh-autosuggestions
在 ~/.zshrc
中配置
plugins=(其他的插件 zsh-autosuggestions)
因为箭头→
不太方便,在.zshrc
中自定义补全快捷键为逗号,但是又一次遇到了需要输入逗号的情况,所以,并不太推荐如下修改:
bindkey ',' autosuggest-accept
zsh-syntax-highlighting
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
~/.zshrc
文件中配置:
plugins=(其他的插件 zsh-syntax-highlighting)
git-open插件可以在你git项目下打开远程仓库浏览项目。
git clone https://github.com/paulirish/git-open.git $ZSH_CUSTOM/plugins/git-open
bat
代替 cat
cat
某个文件,可以在终端直接输出文件内容,bat
相比 cat
增加了行号和颜色高亮
brew install bat
~/.zsh_history
文件中),方便再次运行之前的命令。可以按方向键↑和↓来查看之前执行过的命令r
来执行上一条命令ctrl-r
来搜索命令历史记录.zshrc
中添加 alias shortcut='this is the origin command'
一行就相当于添加了别名alias
可以查看所有的命令别名cd
命令了。在你知道路径的情况下,比如 /usr/local/bin
你可以输入cd /u/l/b
然后按进行补全快速输入kill
就会列出所有的进程名和对应的进程号ls -l **/*.sh
,可以递归显示当前目录下的 shell 文件,文件少时可以代替 find
。使用 **/
来递归搜索setopt HIST_IGNORE_DUPS
可以消除重复记录,也可以利用sort -t ";" -k 2 -u ~/.zsh_history | sort -o ~/.zsh_history
手动清除sudo apt update
sudo apt install lib32ncurses5 lib32z1
sudo apt install qemu-user-static
sudo update-binfmts --install i386 /usr/bin/qemu-i386-static --magic '\x7fELF\x01\x01\x01\x03\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x03\x00\x01\x00\x00\x00' --mask '\xff\xff\xff\xff\xff\xff\xff\xfc\xff\xff\xff\xff\xff\xff\xff\xff\xf8\xff\xff\xff\xff\xff\xff\xff'
aptitude 与 apt-get 一样,是 Debian 及其衍生系统中功能极其强大的包管理工具。与 apt-get 不同的是,aptitude 在处理依赖问题上更佳一些。举例来说,aptitude 在删除一个包时,会同时删除本身所依赖的包。这样,系统中不会残留无用的包,整个系统更为干净;aptitude在安装软件时,会同时安装/更新其依赖包。
以下是大佬(不是我0.0)总结的一些常用 aptitude 命令,仅供参考。
aptitude update 更新可用的包列表
aptitude upgrade 升级可用的包
aptitude dist-upgrade 将系统升级到新的发行版
aptitude install pkgname 安装包
aptitude remove pkgname 删除包
aptitude purge pkgname 删除包及其配置文件
aptitude search string 搜索包
aptitude show pkgname 显示包的详细信息
aptitude clean 删除下载的包文件
aptitude autoclean 仅删除过期的包文件
aptitude软件包列表中的软件包状态:
v | 虚拟 |
---|---|
B | 损坏 |
u | 解包 |
C | 预配置 |
H | 预安装 |
c | 卸载未清除 |
p | 清除软件 |
i | 已经安装 |
E | 内部错误 |
在aptitude软件包列表中的请求操作:
h | 保持 |
---|---|
p | 清除 |
d | 删除(卸载) |
B | 损坏 |
i | 安装 |
r | 重装 |
u | 升级 |
有的问题 apt-get 解决不了,必须使用 aptitude 解决,有的问题,用 aptitude 解决不了,必须使用 apt-get
*aptitude 解决得更好的地方: install, remove, reinstall(apt-get无此功能), show(apt-get无此功能), search(apt-get无此功能), hold(apt-get无此功能), unhold(apt-get无此功能),
*apt-get 解决得更好的地方: source(aptitude无此功能), build-dep (低版本的aptitude没有build-dep功能)
apt-get 跟 aptitude 没什么区别的地方:update, upgrade (apt-get upgrade=aptitude safe-upgrade, apt-get dist-upgrade=aptitude full-upgrgade)
提示
/usr/lib/python2.7/dist-packages/gtk-2.0/gtk/__init__.py:57: GtkWarning: could not open display
warnings.warn(str(e), _gtk.Warning)
Traceback (most recent call last):
File "/usr/bin/ccsm", line 94, in
import ccm
File "/usr/lib/python2.7/dist-packages/ccm/__init__.py", line 1, in
from ccm.Conflicts import *
File "/usr/lib/python2.7/dist-packages/ccm/Conflicts.py", line 26, in
from ccm.Constants import *
File "/usr/lib/python2.7/dist-packages/ccm/Constants.py", line 30, in
CurrentScreenNum = gtk.gdk.display_get_default().get_default_screen().get_number()
AttributeError: 'NoneType' object has no attribute 'get_default_screen'
无法解决。
参考资料:
1.https://onlycaptain.github.io/2018/09/30/Windows下Linux子系统迁移到非系统盘/
2.https://zhuanlan.zhihu.com/WindowsSubsystemForLinux
3.https://www.jianshu.com/p/dc32a75e2de4
4.https://blog.csdn.net/shengerjianku/article/details/82290482
5.https://blog.csdn.net/yili_xie/article/details/4803314
6.https://segmentfault.com/a/1190000013612471