大家都知道,微软在 Windows 10 周年更新中为用户带来了 Bash on Ubuntu on Windows 环境。大家千万不要被这个功能名称所迷惑,其实微软取的这个名字并不是那么准确,该功能绝不仅限于 Bash Shell,它是一个让 Linux 应用程序可直接在 Windows 10 中运行的完全兼容层。
应部分网友要求,下面我们就一起来看看 Windows Subsystem for Linux(WSL)到底能做些什么。
安装Bash on Windows
Bash on Windows 可以在所有 Windows 10 周年更新的版本中进行安装,包括最低级别的 Windows 10 家庭版,但是要启用该功能至少需要 64 位系统。如果所有条件都满足了,在启用「开发人员模式」之后,再在启用 Windows 功能中激活该功能即可。当你首次运行 Bash 程序之后,会自动下载 Ubuntu 系统文件,具体操作步骤可以参考如何启用 Bash on ubuntu on Windows。
在此我对之前的文章内容进行一些补充,如果在打开 Bash 命令行时没有自动从 Windows Store 中下载安装 Ubuntu 系统文件,还可以在 CDM 中执行如下命令手动安装:
lxrun /install /y
安装好之后可以使用 lsb_release -a 命令查看系统版本。
管理Ubuntu系统和软件包
Ubuntu 系统和基于 Debian 的 Linux 发行版使用 apt-get 命令来安装软件,apt 即(Advanced Package Tool)高级包管理工具的简称,由于 Bash on Windows 使用的是 Ubuntu 14.04 系统,所以也完全兼容 apt 系列命令,其中就包括:
- apt-get update
- apt-get upgrade
- apt-get install
- apt-cache search
- apt-get remove
- apt-get purge
- apt-get autoremove
由于引入新的系统环境可能会引入新的安全隐患,所以在安装好 Ubuntu on Windows 环境后,建议大家先对系统进行更新:
apt-get update apt-get upgrade
上述两条命令可以从更新库中获取最新的软件包列表,并将安全更新和最新可用版本的软件包应用到当前系统环境中。
除了系统更新外,对软件包的管理也与 Ubuntu 系统无异,例如要安装 ruby 就可以使用如下命令:
apt-get install ruby
如何使用 apt 系列命令管理 Linux 软件包,可以直接参考 Linux 软件包管理基本操作入门。
在Bash中访问Windows文件
Bash 环境文件和 Windows 文件通常是分开的,但还是有办法在 Windows 中访问 Bash 环境文件,或者在 Bash 环境访问 Windows 文件。
当 Bash 将 Ubuntu 系统文件下载到磁盘中时,它会自动为 Linux 兼容环境创建一个目录,这些文件夹默认是隐藏状态,但我们也可以在 Windows 用户账户的 AppData 文件夹中找到他们。
说明 | 路径 |
Ubuntu 系统文件 | C:\Users\USERNAME\AppData\Local\Lxss\rootfs |
Ubuntu 用户主目录 | C:\Users\USERNAME\AppData\Local\Lxss\home\USERNAME |
root 账户主目录 | C:\Users\USERNAME\AppData\Local\Lxss\root |
其实 Ubuntu Bash Shell 也完全可以访问存储于 Windows 系统分区中的文件,但 Bash 环境并不支持 c:\ 这样的分区写法,因此我们只能以 /mnt/c 这样的方式代表 C 盘,以此类推,/mnt/d 当然就代表 D 盘了。
当然对文件或文件夹的常规操作也与普通的 Linux 终端命令类似,例如:
操作 | Bash环境 | CMD环境 |
更改目录 | cd | cd或chdir |
列出 | ls | dir |
移动或重命名 | mv | move或rename |
复制 | cp | copy |
删除 | rm | del或erase |
创建目录 | mkdir | mkdir |
文本编辑 | vi或nano | edit |
在Bash Shell之外运行Linux命令
由于 Windows 与 Ubuntu「合体」这一先天优势,在 Bash on Ubuntu on Windows 环境之外其实也是可以执行 Linux 命令的,这一些都要归功于 bash -c 命令行,通过它我们可以直接在 CMD 甚至 PowerShell 中直接执行 Linux 命令:
bash -c "命令"