Windows 运行 Linux 命令的方法:wsl、Git Bash、Cygwin、虚拟机安装Linux、busybox、powershell、cmder

1、wsl

​wsl 文档:https://docs.microsoft.com/zh-cn/windows/wsl/
From :https://blog.csdn.net/weixin_34101784/article/details/88729575
From :https://www.cnblogs.com/Flat-White/p/13501639.html
玩转 WLS:Windows 10 Ubuntu子系统 :https://www.jianshu.com/nb/38447202

给 WSL安装图形管理工具 Webmin:https://www.jianshu.com/p/63a38da17fa0

Windows Subsystem for Linux(简称WSL)是一个在Windows 10上能够运行原生Linux二进制可执行文件(ELF格式)的兼容层。它是由微软与Canonical公司合作开发,其目标是使纯正的Ubuntu 14.04 "Trusty Tahr"映像能下载和解压到用户的本地计算机,并且映像内的工具和实用工具能在此子系统上原生运行。

为什么 Linux 上的程序无法在 Windows 上运行

了解过一点操作系统原理的同学应该都知道,这是 Windows 与 Linux 的内核提供的接口不同(系统调用、API 等)导致的。举个栗子,我们想知道某目录下的内容,在 Linux 下我们会使用 ls 命令,而在 Windows 下我们会使用 dir 命令。

当我们在 Linux 上执行 ls 命令,ls 会调用 getdents 这个系统调用,Linux 内核收到请求,将目录的内容返回给应用程序;当我们在 Windows 上执行 dir 命令,dir 会调用 NtQueryDirectoryFile 这个 API,NT 内核收到请求,将目录的内容返回给应用程序。虽然系统不同,但基本上都是一个道理。

然而,当我们把 Linux 上的应用程序拿到 Windows 上运行时,应用程序和内核就双双懵逼了。比如 ls 会尝试调用 getdents 系统调用(理想化的情况下,暂不考虑可执行文件格式等问题),Windows 的 NT 内核一看,心说:「这他娘的什么东西,老子不认识啊,啥情况啊」,ls 也想:「尼玛,内核怎么不回话啊,咋回事儿啊」……两边语言不通,应用程序自然无法正确执行。

但是有了 WSL,情况就不一样了。

依然拿 ls 举例,当我们在 WSL 中运行 ls 命令时,ls 会调用 getdents 系统调用(这个系统调用接口是 WSL 提供的,Windows 本身并没有这个接口),WSL 收到这个请求,明白了应用程序是想要知道目录的内容,于是把 Linux 的系统调用转换为 NT API NtQueryDirectoryFile。NT 内核收到 WSL 的请求,将目录的内容返回给 WSL,WSL 再把返回的内容包装好后返回给 ls

也就是说,WSL 在 Linux 应用程序与 Windows NT 内核之间起到了翻译者的作用。很简单的道理,既然 NT 内核无法理解 Linux 应用程序的 POSIX 系统调用,那就弄个翻译来将 POSIX 系统调用实时转换为 NT 内核能理解的 API 调用,突出一个见人说人话、见鬼说鬼话。

只要实现了足够多的系统调用翻译,那么理论上 WSL 可以完全模拟成一个 Linux 内核。

相信各位都听说过鼎鼎大名的 Cygwin。同样是能让 Linux 应用程序运行在 Windows 上,WSL 和 Cygwin 有什么不同呢?其实差别还是挺大的。

虽然 Cygwin 提供了完整的 POSIX 系统调用 API(以运行库 Cygwin*.dll 的形式提供),但其依然工作在 User Mode;而 WSL 中的 Linux 应用程序进程会被包裹在一个叫做 Pico Process 的东西里,这个东西里发出的所有系统调用请求都会被直接送往 Kernel Mode 中的 lxcore.sys 与 lxss.sys 处理。

同样是将 POSIX 系统调用转换为 Windows 中的 API,Cygwin 是转换成 Win32 API 的调用(因为它架设在 Win32 子系统上,很多内核操作受限于 Win32 的实现,比如 fork),而 WSL 则是转换为更底层的 NT API 调用(WSL 是与 Win32 平行的子系统,直接架设在 NT 内核上,可以通过 NT API 原生实现 fork 等系统调用)。

WSL 架构示意图。图片来源:Windows for Linux Nerds :https://blog.jessfraz.com/post/windows-for-linux-nerds/

最重要的一点:如果使用 Cygwin,Linux 应用程序的源码必须 link 至 Cygwin 运行库(Cygwin*.dll),修改源码重新编译后才能在 Windows 下运行。这些重新编译后的 Linux 应用程序在调用 POSIX API 时不会直接去请求内核,而是会去调用 Cygwin 运行库,由运行库翻译成 Win32 API、执行调用后返回结果。这也就意味着,重新编译后的应用程序需要依赖 Cygwin 运行库才能正常运行(有时候你会碰到的「缺少 Cygwin1.dll」报错就是这个原因),而且这样编译出来的可执行程序是纯正的 Win32 PE 格式封装,只能在 Windows 上运行。Cygwin 目录下,被编译成 Win32 可执行程序的 Linux 应用程序们。

 而在 WSL 下,我们可以直接运行未经任何修改的 ELF 格式 Linux 可执行程序。

总结:WSL 就像是一个翻译官,就算那些未经修改的 Linux 应用程序们操着一口纯正的 POSIX 系统调用语法,WSL 也能快速准确地将其翻译为 NT 内核能听懂的 API 调用;而那些使用了 Cygwin 重新编译后的 Linux 应用程序,就像是改造人一样变成了 Win32 应用程序的形状,还被套了个翻译机。程序自己(源码中)说的是 POSIX,经过翻译机(Cygwin 运行库)之后就变成 Win32 API 调用了,这样 NT 内核也能听得懂。但是每次添加新程序都要改造,多麻烦啊,还是 WSL 原生态更健康(笑)。

安装 WSL,拥抱可爱的 Linux

注意:WSL 仅支持 64 位系统

第一步,打开「控制面板」中的「程序与功能」,点击左侧边栏的「启用或关闭 Windows 功能」选项,在弹出的窗口中勾选「适用于 Linux 的 Windows 子系统」,然后点击确定(可能需要重启)。如果你懒得用 GUI,也可以直接在 PowerShell 中以管理员权限执行命令:

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

 第二步,打开 Microsoft Store,搜索「WSL」。挑选一个你喜欢的 Linux 发行版,然后点击安装。(截至目前,商店中可用的发行版有 Ubuntu、openSUSE、SUSE Linux Enterprise Server、Debian 以及 Kali Linux。)

 第三步,在开始菜单中找到你刚刚安装的发行版,打开它。等待几分钟的初始化过程,设定好用户名与密码后(不需要与 Windows 的相同,用过 Linux 的选手应该都懂的)就会自动进入 Linux 环境。至此,你已经完成了 WSL 的安装。你也可以同时安装多个发行版,它们的数据都是独立的,互不影响。

Microsoft store下载的kali不包含任何工具 需要后续安装完整版kali

先更新源 使用命令:apt-get update

安装 vim:sudo apt-get install vim

更换 kali 源

sudo vim /etc/apt/sources.list

然后复制下面的源

#中科大
deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
deb-src http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
 
#阿里云
deb http://mirrors.aliyun.com/kali kali-rolling main non-free contrib
deb-src http://mirrors.aliyun.com/kali kali-rolling main non-free contrib
 
#清华大学
deb http://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free
deb-src https://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free
 
#浙大
deb http://mirrors.zju.edu.cn/kali kali-rolling main contrib non-free
deb-src http://mirrors.zju.edu.cn/kali kali-rolling main contrib non-free
 
#东软大学
deb http://mirrors.neusoft.edu.cn/kali kali-rolling/main non-free contrib
deb-src http://mirrors.neusoft.edu.cn/kali kali-rolling/main non-free contrib
 
#官方源
deb http://http.kali.org/kali kali-rolling main non-free contrib
deb-src http://http.kali.org/kali kali-rolling main non-free contrib

然后使用如下命令查看源是否更换成功:cat /etc/apt/sources.list

更新源并安装完整版 kali

sudo apt-get update          # 更新源
sudo apt-get dist-upgrade    # 更新软件
sudo apt-get install kali-linux-large  # 安装完整版kali

许多教程这里的安装命令都是 sudo apt-get install kali-linux 或 sudo apt-get install kali-linux-full

这里也是找了很久才知道主要数据包名字改了 导致很多教程现在都失效了

链接:Major Metapackage Makeover | Kali Linux Blog 

 执行完第二条命令后有一个报错提示

/* 这个报错笔者第一次安装时没有遇到 但是后续多次尝试都有遇到这个问题= =

暂时不清楚原因 */

 执行如下命令修复可解决

sudo mv /var/lib/dpkg/info/ /var/lib/dpkg/info_old/
sudo mkdir /var/lib/dpkg/info/
sudo apt-get update
…
sudo apt-get -f install
…
sudo mv /var/lib/dpkg/info/* /var/lib/dpkg/info_old/
sudo rm -rf /var/lib/dpkg/info
sudo mv /var/lib/dpkg/info_old/ /var/lib/dpkg/info/

参考:https://blog.csdn.net/heray1990/article/details/47803541

然后再执行第三条命令安装完整版kali

如果更新源后没有更新软件直接执行第三条命令

可使用:sudo apt-get install kali-linux-large --fix-missing

这里中途会有一些图形化界面的选择选项 类似这种

 这里用翻译软件自行翻译选择合适选项

//有教程写有Yes选Yes有OK选OK 最后一个选“from inetd”

安装时大致查看过这些选项影响应该不大请自行斟酌

然后就等着黑框框里闪啊闪啊 等待安装完成

这里提一下Windows Terminal从PowerShell进入子系统只需使用kali或者bash命令

其中bash命令是在当前目录进入子系统

CTRL+D可以回到PowerShell/cmd

安装完成后简单的测试一下

 可以发现kali内置Python2 Python3 以及binwalk可以正常使用。至此 安装结束。

使用软件源镜像

由于众所周知的原因,各大发行版默认的软件源在中国大陆的访问速度是龟速。

我目前使用的是 ​ 清华大学的 Ubuntu 镜像源: :https://mirror.tuna.tsinghua.edu.cn/help/ubuntu/

安装多个发行版

Windows 10 Fall Creators Update 之后,WSL 支持同时安装多个 Linux 发行版,直接在 Microsoft Store 中搜索想要的发行版并点击安装即可。这些发行版可以同时运行,并且数据互相独立。你可以使用 wslconfig.exe 来查询已安装的发行版,或者更改默认的发行版。

删除发行版也很简单,直接卸载对应的商店应用即可(记得备份哦)。 

多种进入 WSL 的方式比较

新版支持同时安装多个发行版,那自然不能像以前那样只提供一个 bash.exe 入口了。

秋季创意者更新之后的 Windows 提供了 多种进入 WSL 环境的方式

  • wsl.exe

    打开默认发行版中的默认 Shell。

  • <distroname>.exe

    打开指定发行版中的默认 Shell。

  • bash.exe (DEPRECATED)

    打开默认发行版中的 bash Shell。

    如果你更改了默认 Shell 却总是打开 bash,就说明你使用了这个入口。

你也可以通过这些入口直接在 WSL 中执行命令并返回结果:

  • <distroname> -c [command]
  • bash -c [command]
  • wsl [command](不再需要指定 -c) 

与 Windows 的互操作性

WSL 与 Windows 之间的互操作性 (Interoperability) 很牛逼。怎么个牛逼法呢?

Windows 下的所有盘符都挂载在 WSL 中的 /mnt 目录下,可以直接操作。WSL 中的所有数据则存放于 C:\Users\{你的用户名}\AppData\Local\Packages\{Linux发行版包名}\LocalState\rootfs 目录中(不要在 Windows 中修改这些文件,这会造成文件权限错误):

$ ls /mnt
c  d  e
$ mount -l
rootfs on / type lxfs (rw,noatime)
C: on /mnt/c type drvfs (rw,noatime,uid=1000,gid=1000)
D: on /mnt/d type drvfs (rw,noatime,uid=1000,gid=1000)
E: on /mnt/e type drvfs (rw,noatime,uid=1000,gid=1000)

可以在 Windows 命令行环境中直接调用 WSL 中的命令:

PS C:\temp> wsl ls -al
total 0
drwxrwxrwx 1 printempw printempw 4096 Sep  7 19:04 .
drwxrwxrwx 1 printempw printempw 4096 Sep  7 18:38 ..
-rwxrwxrwx 1 printempw printempw    4 Sep  7 19:04 foo.txt

也可以在 WSL 中直接启动 Windows 应用:

$ notepad.exe "C:\temp\foo.txt"

还可以通过 pipes 与 Windows 程序通信:

# 复制内容至 Windows 剪贴板
$ cat foo.txt | clip.exe

甚至可以把 Windows 命令和 WSL 命令混着用:

PS> ipconfig | wsl grep IPv4
IPv4 Address. . . . . . . . . . . : 192.168.1.114
 
$ ipconfig.exe | grep IPv4 | cut -d: -f2
192.168.1.114
 
$ ls -al | findstr.exe foo.txt
-rwxrwxrwx 1 printempw printempw    4 Sep  7 19:04 foo.txt
 
$ cmd.exe /c dir
 Volume in drive C is Windows
 Volume Serial Number is B263-****
 
 Directory of C:\temp
 
2018/09/07  19:04    <DIR>          .
2018/09/07  19:04    <DIR>          ..
2018/09/07  19:04                 4 foo.txt
               1 File(s)              4 bytes
               2 Dir(s)  194,422,341,632 bytes free

同时,WSL 与 Windows 共享网络栈,也就是说你可以:

  • 在 WSL 中启动 web server,在 Windows 上使用浏览器访问;
  • 在 Windows 下启动 MySQL/Redis 服务器,在 WSL 中连接;
  • 诸如此类。

如果你对 WSL 与 Windows 之间互操作的原理有兴趣,可以参考一下这些文章:

DrvFs 文件权限问题

虽然 WSL 中可以直接访问 Windows 磁盘的内容,但如果你曾经这么做过,你应该对这样绿油油一片的 ls 不会感到陌生。为什么 NTFS 文件系统中的文件到 WSL 下权限就全部成 0777 了呢?

这主要是 DrvFs 中 Linux 文件权限的实现导致的。

在 WSL 中,Microsoft 实现了两种文件系统,用于支持不同的使用场景:

  • VolFs

    着力于在 Windows 文件系统上提供完整的 Linux 文件系统特性,通过各种手段实现了对 Inodes、Directory entries、File objects、File descriptors、Special file types 的支持。比如为了支持 Windows 上没有的 Inodes,VolFs 会把文件权限等信息保存在文件的 NTFS Extended Attributes 中。记得我上面警告过你不要在 Windows 中修改 WSL 里的文件吗?就是因为 Windows 中新建的文件缺少这个扩展参数,VolFs 无法正确获取该文件的 metadata,而且有些 Windows 上的编辑器会在保存时抹掉这些附加参数。

    WSL 中的 / 使用的就是 VolFs 文件系统。

  • DrvFs

    着力于提供与 Windows 文件系统的互操作性。与 VolFs 不同,为了提供最大的互操作性,DrvFs 不会在文件的 NTFS Extended Attributes 中储存附加信息,而是从 Windows 的文件权限(Access Control Lists,就是你右键文件 > 属性 > 安全选项卡中的那些权限配置)推断出该文件对应的的 Linux 文件权限。

    所有 Windows 盘符挂载至 WSL 下的 /mnt 时都是使用的 DrvFs 文件系统。

由于 DrvFs 的文件权限继承机制很微妙,最后导致的结果就是所有文件的权限都变成了 0777。而且由于早期的 DrvFs 不支持 metadata,所以你无法给这些文件 chown/chmod,只能对着绿油油的 ls 干瞪眼。不过好消息是,Windows Insider Build 17063 之后,DrvFs 也像 VolFs 一样支持给文件写入 metadata 了

要启用 DrvFs 的 metadata 支持,你需要添加参数重新挂载磁盘:

# 修改成你自己的盘符
$ sudo umount /mnt/e
$ sudo mount -t drvfs E: /mnt/e -o metadata

不过如果仅仅是执行了这个,虽然支持了文件权限的修改,但磁盘下的文件权限默认依然还是 0777,除非你给它们整个 chmod 一遍。如果你不想这么做,也可以指定其他的 mount 参数:

$ sudo mount -t drvfs E: /mnt/e -o metadata,uid=1000,gid=1000,umask=22,fmask=111

这样磁盘下的文件的默认权限就是 0644ls 也不会再是绿油油一片啦。

 不过每次使用时都要重新挂载未免也太烦,我们可以通过另一个新特性 Automatically Configuring WSL 实现自动挂载。在 WSL 中创建 /etc/wsl.conf,在其中填写如下内容:

[automount]
enabled = true
root = /mnt/
options = "metadata,umask=22,fmask=111"
mountFsTab = true
 
# 这个文件里还可以添加其他配置项,有兴趣的可以看看上面的链接

重启终端,所有的盘符就会使用上面的配置自动挂载啦(可以使用 mount -l 查看)。

另外,如果你想要给不同的盘符设定不同的挂载参数(上面的方法对所有盘符都有效,如果你想在 WSL 中运行 Windows 下的应用程序,就得每次都 chmod +x 一下,所以我一般都会把 C: 排除掉),就需要手动修改 /etc/fstab。首先确保 wsl.conf 中的 mountFsTab 为 true,然后编辑 /etc/fstab,添加如下内容:

# 不在此列表中的盘符会使用 wsl.conf 中的参数挂载
# 格式可以自己去查 fstab 的帮助文档
E: /mnt/e drvfs rw,relatime,uid=1000,gid=1000,metadata,umask=22,fmask=111 0 0

其他关于 WSL 的折腾

虽然 Microsoft 开发 WSL 出来主要是着重于命令行环境的使用,但经过测试,WSL 是可以通过 X Server 执行 GUI 应用程序的,甚至还可以在 WSL 里面用 Wine 执行 Windows 程序……(??)

也有人试过在 WSL 中运行完整的 DE,体验似乎还不错,有兴趣的同学可以去试试。

另外,你也可以通过某些神秘的方法用上 Microsoft Store 未提供的 Linux 发行版,比如 Arch Linux

如果你对 WSL 的底层实现有兴趣,也可以去围观一下 WSL 的官方博客:

总结

虽然 WSL 很不错,但是其比起真正的 Linux 系统还是有很多不足(Docker 等涉及未实现的内核特性的软件无法使用,Raw socket 相关的操作依然容易出错,I/O 性能相比之下较为孱弱等)。如果你日常开发中需要使用到那些 WSL 未提供的 Linux 特性,那么还是乖乖跑 VM 或者装 Linux 吧。

对我来说,WSL 最大的意义就是,让我能够用我熟悉的 Linux 那一套去操作 Windows

如果你和我的需求一样,那么比起 Cygwin、VM 等解决方案,WSL 有着完整的 Linux 环境、强大的互操作性、更低的资源占用。离不开 Windows,却又羡慕 Linux 下强大命令行工具的各位,相信你们会喜欢 WSL 的。

而且最近几年 Microsoft 在笼络开发者方面的努力大家有目共睹,这里就容我夸上一句:

Microsoft,干得漂亮!

wsl 命令

wsl --help            显示wsl帮助
wsl --list --online        查看有哪些可用的系统
wsl --list                 查看所有安装的发行版
wsl -l -v                  查看已安装的Linux子系统
wsl --list --running       查看正在运行的发行版
wsl --install -d Ubuntu    安装系统Ubuntu
wsl -d Ubuntu              多个子系统时 ,-d 指定启动
wsl -s Ubuntu              设置默认发行版
wsl                        启动默认发行版
wsl --unregister Ubuntu-20.04               删除 某个 wsl 子系统,例如 Ubuntu-20.04
wsl -t Ubuntu #或者 wsl --terminate Ubuntu  让某个子系统关机

在CMD中直接运行Linux命令,使用方法很简单:wsl + Linux 命令
wsl free -m     查看电脑内存
wsl ls          打印文件夹
wsl top         运行TOP命令

用 Windows 资源管理器打开 Linux 文件系统
首先运行 wsl 进入 WSL 环境,运行explorer.exe . (注意不要忘了"点")

2、Git Bash

你可能知道 Git 是什么。它是由 Linux 创建者 Linus Torvalds 开发的版本控制系统。Git for Windows 是一组工具,能让你在命令行和图形界面中使用 Git。Git for Windows 中包含的工具之一是 Git Bash。

Git Bash 为 Git 命令行提供了仿真层。除了 Git 命令,Git Bash 还支持许多 Bash 程序,如 ssh、scp、cat、find 等。

3、Cygwin

官网:https://www.cygwin.com/index.html

Cygwin 速查表:http://www.voxforge.org/home/docs/cygwin-cheat-sheet

Cygwin 提供功能的大量 GNU 和开源工具,可以在 windows 上体验 linux 命令。 cygwin1.dll 提供了大量的POSIX API功能。

4、虚拟机 安装 Linux

另一种方法是使用虚拟化软件并在其中安装 Linux。这样,你可以在 Windows 中安装 Linux 发行版(带有图形界面)并像常规 Windows 应用一样运行它。

5、busybox

BusyBox 是一个包含 许多常见的Unix工具。它经常出现在嵌入式Linux系统中。 像路由器、安卓智能手机、Linux 容器和任何地方 否则,拥有一组紧凑的Unix命令行工具会很方便。

busybox-w32 是 BusyBox 到 Microsoft Windows WIN32 API 的端口。 它将 BusyBox 功能的一个子集带到 Windows 中 单个自包含本机可执行文件。

这个版本的 BusyBox 实现了一百多个 Unix 风格的命令。 其中一些比较重要:ash、awk、sed、vi、find、grep 等。。。

如果您需要 bash 或其他 GNU 实用程序的全部功能,busybox-w32 可能不是你想要的:CygwinGowUnxUtils可能是 更合适。但是,如果您需要提供一些 shell 脚本 您的软件,或者如果您需要在Windows上运行一些随机的Unix实用程序 busybox-w32 可能是一个紧凑的替代方案。完整的可执行文件更少 比Cygwin设置程序的一半大!

6、powershell

powershell 可以执行一些 linux 命令

7、cmder

From:终端利器Cmder:https://www.e-learn.cn/topic/3885768

1. 安装 Cmder

打开 Cmder官网( https://cmder.app/ ),下拉页面找到 Download 项选择下载,下载的时候,两个版本,分别是 mini 与 full 版;唯一的差别在于有没有内建 git-for-windows 工具,这是 Git for Windows 的标准配备;全安装版 Cmder 自带了 msysgit,除了 git 本身这个命令之外, cmder 完全支持 Linux 命令行,里面可以使用大量的 linux 命令,比如 grep、curl (没有 wget)、vim、grep、tar、unzip、ssh、ls、bash、perl 等,而且可以多开,快捷键复制粘贴,分屏等,功能非常强大

这里选择 full 版本点击下载。下载的是 Cmder 的压缩包,解压即可以使用。

启动 Cmder

Cmder 解压后,双击 Cmder.exe 即可运行。

如果每次都进入到 Cmder 解压目录双击 Cmder.exe 打开的方式很麻烦,可以使用下面几种方式很好的解决问题;

  • 1、把 Cmder 加到环境变量。把 Cmder.exe 存放的目录添加到系统环境变量;加完之后,win+r 然后输入cmder 即可。
  • 2、添加 cmder 到右键菜单。添加后在任意文件夹中即可打开Cmder,上一步的把 Cmder 加到环境变量就是为此服务的,在管理员权限的终端输入以下语句即可: Cmder.exe /REGISTER ALL
  • 3、为 Cmder.exe创建快捷方式,右击 Cmder.exe 选择 "创建快捷方式" 点击即可,或者把创建的 快捷方式 放到 C:\Windows\System32,加完之后,win+r 然后输入cmder 即可。

Cmder 常用功能介绍

cmder 功能极为强大,这里就先说下常用的功能:

  • 1. Cmder 常用快捷键
            tab           自动路径补全;
            ctrl + t      建立新页签;
            ctrl + w      关闭页签;
            ctrl + tab    切换页签;
            ctrl + 1      快速切换到第1个页签
            ctrl + n      快速切换到第n个页签( n值无上限)
            alt + F4      关闭所有页签
            ctr + r       历史命令搜索
            alt + enter   切换到全屏状态
            alt + shift + 1    开启 cmd.exe
            alt + shift + 2    开启 powershell.exe
            alt + Shift + 3    开启 powershell.exe (系统管理员权限)
  • 2. 可在 视窗内 搜寻 画面上 出现过的任意关键字。
  • 3. 新增 页签 按钮。
  • 4. 切换 页签 按钮。
  • 5. 锁定 视窗,让视窗无法再输入。
  • 6. 切换 视窗 是否提供卷轴功能,启动时可查询之前显示过的内容。
  • 7. 按下滑鼠左键可开启系统选单,滑鼠右键可开启工具选项视窗。 Win+Alt+P  :开启 工具选项 视窗

cmder分屏功能: ctrl + t  或者 点击 右下角 + 号

分屏功能 快捷键 设置:

Cmder 进阶功能

  • Cmder 增加了 alias 功能:可以给 超长又难以记忆的指令 起一个 别名 输入 alias 可以查看已有的 别名。打开安装目录 config/user-aliases.cmd 文件,直接修改。

    自定义 aliases:打开 Cmder 目录下的 config 文件夹,里面的 aliases 文件就是我们可以配置的别名文件,直接修改。
        这里将 ls 命令的别名按下列方式修改,添加至文件末尾,就可以在 ls 命令下显示中文,同时增强命令并添加颜色区分。
            l=ls --show-control-chars
            la=ls -aF --show-control-chars
            ll=ls -alF --show-control-chars
            ls=ls --show-control-chars -F

  • 主控台文字自动放大缩小功能,只要按下 Ctrl + 滑鼠滚轮 就可以办到,还有 up 向上翻历史命令。

  • 鼠标选中自动复制到剪切板。直接 鼠标右键 即可 粘贴,或者使用 Ctrl + v 进行粘贴。

2. Cmder 设置

右下角 的 三杠,然后选择 Settings ,或者 使用快捷键 Windows+Alt+p 打开 设置

解决文字重叠

Win + ALT + P 打开设置界面 monospce,去掉勾勾即可。

如果不行,可以把 Compress long strings to fit space 关掉。

设置编码,解决中文乱码

设置:set LC_ALL=zh_CN.UTF-8    或者    set LANG=zh_CN.UTF-8

查看 git log 时乱码

在 Startup ---> Environment 中添加下面的语句:

set LANG=zh_CN.UTF-8

然后执行下面的命令,来配置git log的输出

git config --global i18n.logoutputencoding utf-8

或者在 .gitconfig 文件中配置

更多乱码问题见: https://blog.csdn.net/guiying123456/article/details/62881400

设置中文界面: 选择  General ---> Interface language ---> zh:简体中文

设置为默认终端

setting ---> 集成 ---> 默认终端 ---> 强制使用ConEmu作为控制台应用程序的默认终端。如果允许某些程序出现错误,需要关闭此选项;比如 mkcert。

  • 图中绿色设置可以强制将cmder注册成Windows的默认终端

    设置此选项后,系统启动后就会生效,且,即使你打开的是cmd,也会被放到cmder的窗口中执行

  • 红色选项可以解决每次关闭控制台时,弹出确认关闭的弹窗

窗口位置大小记忆:勾选这两个设置,只需要设置一次,下次会自动记住上次终端在桌面出现的位置和窗口大小

设置 vi 模式下 ESC 键最小化窗口的问题

  • 将图中红色改成除了总是的其他选项,否则使用vi时会出现无法切换模式的问题
  • 勾选绿色的选项可以解决打开多个终端,任务栏显示多个窗口的问题

解决粘贴多行文本时的弹窗

例如在终端中执行多行SQL语句,总会弹出提示,勾选选项可以解决

将命令提示改成 $

默认的命令提示符是λ,大家都知道Linux是$,这里提供一下修改的方法,并不是必须的

  • 1) 首先在cmder的安装目录下,找到vendor/目录,然后找到clink.lua文件
  • 2) 打开后可以Ctrl+F查找下面的字段 local lambda =
  • 3) 将local lambda =""的值替换成$

可以修改文件 ${CMDER_HOME}\vendor\clink.lua
    if env == nil then
        lambda = "λ"
    else
        lambda = "("..env..") λ"
    end
改成
    if env == nil then
        lambda = "$"
    else
        lambda = "("..env..") $"
    end

将 Idea 的 Terminal 终端换成 cmder 

1) 在 idea 中打开其他设置界面,在 idea 中 settings 是对当前项目生效,Other Settings 是对所有项目生效

2) 修改 shell Path 的路径,替换成下面的内容

注意将 cmder 安装目录换成你的安装目录

//这种方式比较可靠,避免了环境变量失效的问题
"cmd.exe" /k ""你的cmder安装目录\vendor\init.bat""

//或者,这个需要有环境变量
"cmd.exe" /k ""%环境变量配置的cmder home目录名称%\vendor\init.bat""

3) 再次打开Terminal终端就可以使用Linux命令了

将 vscode 的 Terminal 终端设置成 cmder

1)打开设置

2) 搜索code save,点击打开设置json文件

3)将下面的代码粘贴到文件中,修改为自己需要的内容。注意:修改cmder的安装目录为自己的安装目录

// 设置终端为cmder
"terminal.integrated.shell.windows": "cmd.exe",
"terminal.integrated.env.windows": {
    //设置cmder的根目录
    "CMDER_ROOT": "cmder的根目录" }, "terminal.integrated.shellArgs.windows": [ "/k", //设置启动初始化目录 "cmder的根目录\\vendor\\init.bat" ], //下面的设置可以不需要 //终端颜色配置 "workbench.colorCustomizations": { //可以将鼠标放到下面的色号上根据自己的偏好进行选择 "terminal.foreground": "#37FF13", "terminal.background": "#2b2424" }, "terminal.integrated.cursorBlinking": true, //设置terminal中的行高 "terminal.integrated.lineHeight": 1.1, "terminal.integrated.letterSpacing": 0.1, "terminal.integrated.fontSize": 12, //字体大小设置 "terminal.integrated.fontFamily": "monaco", //字体设置 "terminal.integrated.shell.linux": "/bin/zsh"

4) Ctrl+J打开终端,就可以使用了

Cmder 启动选项

默认选择的启动项应该是 {cmd::Cmder} 这个命名任务,我们可以更改成其它的命令任务或者直接切换到其它的启动项。

默认的是 cmd,这里演示设置 PowerShell 的方法。也可使 设置 默认使用 bash,这个看个人需求。

自定义启动目录

下面就来克隆现有的{cmd::Cmder}添加一个设置自定义的启动目录的任务(Task):

  • 任务参数:下面来看  "Task parameters" 命令参数,阅读实例可知参数 /icon指定图标位置,/dir 指定启动目录,所以我们可以添加下面的参数:/icon "%CMDER_ROOT%\icons\cmder.ico" /dir "C:\Users\Fan"
  • 记得在 startup 的 "Specified named task" 处选择 cmd::diy1
  • 保存设置,退出,重新打开 cmder 查看效果

具体配置和使用可见:https://github.com/cmderdev/cmder 。

cmder 连接 Linux 子系统(WSL)

Windows Subsystem for Linux(简称WSL)。

ConEmu(包括基于 ConEmu 修改的 cmder) 等终端模拟器也已经适配了 WSL 环境。

连接方式:

  • 添加一个标签页时(点击右下角的 ➕),选择 WSL ---> bash
  • 或直接将启动任务指定为 {WSL::bash}

Windows系统的分区全部挂载于 Linux 子系统的 /mnt 目录

$ ls /mnt
c  d  e  f  g

WSL的安装见: https://docs.microsoft.com/zh-cn/windows/wsl/install-win10

ssh agent

ssh-agent 介绍可参考: SSH相关命令 中的 ssh-agent 部分

cmd 模式中:

官方文档中有说在 cmd 模式中如何处理 ssh agent的相关问题:

To start the vendored SSH agent simply call start-ssh-agent, which is in the vendor/git-for-windows/cmd folder.

If you want to run SSH agent on startup, include the line @call "%GIT_INSTALL_ROOT%/cmd/start-ssh-agent.cmd" in %CMDER_ROOT%/config/user-profile.cmd (usually just uncomment it).

bash模式中:

官方文档中没有说,但我们可以这样解决。

$HOME/.bashrc$HOME/.profilec文件中添加如下内容:

# 启动一个 ssh-agent 进程 
eval "$(ssh-agent -s)"
# 这里同时添加了两个私钥
ssh-add "C:/Users/Fan/.ssh/one_rsa" "C:/Users/Fan/.ssh/two_id_rsa"
# 清除上面命令的输出内容
clear

调节背景的透明度

我调整透明度的目的是编写前端代码时可以透过cmder直接看到浏览器页面的变化,无需切换到浏览器再看变化,减少软件切换成本。其实调整好透明度可以更美观。

alias 别名机制

Cmder 增加了alias功能: 它让你用短短的指令执行一些常见但指令超长又难以记忆的语法;
在其控制台输入alias可以查看。

1. cmd aliases:

%CMDER_ROOT%\config\user-aliases.cmd中添加cmd aliases,它仅用于 cmd 命令

示例:

ls=ls --show-control-chars -F --color $*
pwd=cd
clear=cls

user-aliases.cmd: aliases in cmd; called from vendor\init.bat; autocreated from
vendor\user-aliases.cmd.example.

参考:cmder/README.md at master · cmderdev/cmder

2. Bash/Mintty aliases:

对于bash,其配置文件的加载顺序是:

$CMDER_ROOT/config/profile.d/*.sh
$CMDER_ROOT/config/user-profile.sh
$HOME/.bashrc

所以我们可以在上面的文件中添加 alias 即可。

几个示例:

alias l.='ls -d .* --color=tty'
alias ll='ls -l --color=tty'
alias ls='ls --color=tty'

由于 Git for Windows 会自动创建 ~/.bash_profile,而对此cmder会提示有冲突,此时可以创建一个~/.profile并在该文件中添加别名。(这里 ~表示$HOME

原本是想添加ssh-agent bash相关的别名的,但是一旦执行此命令后启动了一个子shell,在此子shell里不可以使用别名。可参考下文的ssh agent部分。(这里属于ssh代理相关问题)

3.Power Shell aliases:

直接使用alias命令添加或在下面的文件中添加:

'$ENV:CMDER_ROOT\config\profile.d\*.ps1'
'$ENV:CMDER_ROOT\config\user-profile.ps1'

补充: 锁定视窗 ,可以让视窗无法再输入

Chocolatey 软件包管理系统

以管理员权限打开窗口,运行下面的语句

@powershell -NoProfile -ExecutionPolicy unrestricted -Command "iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))" && SET PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin

安装软件命令 choco install softwareName,

  • 短写是 cinst softwareName

查询安装包是否存在 clist softwareName

可安装包列表

choco install autohotkey.portable    #安装 AutoHotkey (Portable)
choco install nodejs.install  #安装 node
choco install git.install     #安装 git
choco install python          #安装 python
choco install ruby            #安装 ruby
choco install jdk8            #安装 JDK8
choco install googlechrome    #安装 Chrome
choco install google-chrome-x64 #Google Chrome (64-bit only)
choco install firefox         #安装 firefox
choco install notepadplusplus.install #安装 notepad++
choco install Atom                    #安装 Atom
choco install SublimeText3            #安装 SublimeText3

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值