「万字解析」是体验少数派付费栏目内容的最佳体例。我们但愿用一万字的篇幅,系统、深度地分享有价值的内容,让少数派读者能够享受获得新知的愉悦。本期「万字解析」内容选自《 出产力超频:Windows 号令行适用手册 》,做者 Mirtle 引见了人人学得会、事事用得上的号令行东西,但愿让新手入门,高手进阶,控制强大的号令行东西,成为让 14 亿 Windows 用户爱慕的效率高手。绝大大都的读者利用 Windows 的过程中,不免会碰到个体问题需要求帮于收集,譬如浏览器俄然打不开首页时,此时某条材料会:有些读者正在更新到 Windows 11 后,不习惯新左键菜单,找不到换回旧菜单的选项,此时会正在网上的材料中发觉如许的方式:打开一个黑黝黝的窗口,输入一串似乎有可循的文字,最初完成。它显著区别于我们日常所习惯的键鼠交互模式,也是本系列文章的配角:号令行界面(Command Line Intece,缩写 CLI),本文简称其为号令行。部门读者可能对号令行有着敬而远之的心理,这不难理解。正在无数的科幻片子中,黑客们对着老式从机猛敲键盘,顷刻之间改变时局,世界。可惜,我无法教授给大师如许的本领,那些影视片段大都是唬人的。可是从另一方面考虑证书印刷制作,号令行不是和役机,也不是坦克,它只是家里仓库里停放许久的一辆皮卡,日常平凡大概不会想到它,需要的时候仍然皮实耐用。然而片子里的有一幕镜头十分贴切:《黑客帝国》中 Mouse 小哥指着黑底绿字的屏幕说:「一个红衣女郎」,初来乍到的 Neo 一愣,惊讶于 Mouse 竟然能看懂屏幕上看似没有任何层次的文字。正在很多 Windows 用户的眼中,号令行是奥秘的,它似乎和日常用到的各类软件使用毫无联系关系。但恰好相反,号令行很是通俗,它仅仅是利用使用的别的一种体例罢了。不妨用一个最常见的场景来举例:正在 Windows 上打开 Word。绝大大都人城市找到桌面的快速体例,或者正在起头菜单中使用名「Word」,然后双击,轻松完成。还有少部门人会晓得一串快速键:Win + Ctrl + Shift + Alt + W,按下后系统会间接打开 Word,所有润色键一按下被称为 Office 键,再按下分歧的字母会间接打开分歧的 Office 套件。当然,同时按下这么多键会让你手抽筋,更无效的做法是左键快速体例 属性 快速键,为这个快速体例设定一套按键组合。此时,当核心位于桌面时,按下设定好的按键,也能启动使用。然而正在 1990 年,Windows 开机后并不会进入桌面,用户也没有起头菜单能够点击,只要一个界面上清洁利落的MS-DOS系统期待着你的输入。Windows 上保留了一个雷同于 MS-DOS 的使用——号令提醒符(cmd.exe)。我们暂且不管它到底是什么,先来体验若何用号令行打开 Word。正在 Windows 上「cmd」并打开该使用。起首要做的是到 Word 使用所正在的文件夹。这就像利用一些绿色软件时,由于它们安拆时不会建立快速体例,用户必需先用文件资本办理器找到 exe 文件所正在的目次。只不外这一次我们用的是号令:cd,你能够将它理解为英文 change directory 的缩写,cd 后跟上空格以及 Word 所正在的目次(不要忘了两边的引号)回车确认施行:第一种利用的是 Windows 供给的图形用户界面(GraphicalUserIntece,GUI,/ˈɡuːi/),我们看到的是各类按钮,用鼠标辅以键盘来和这些控件交互;快速键往往是对 GUI 的辅帮,它之所以会存正在,最主要的缘由就是用鼠标点太麻烦了,出格是对于 Photoshop 这类功能繁多的的使用而言;孔乙己曾向矫饰道:「回字有四样写法」,分歧的写法现实上表达的都是统一种字。号令行、快速键、键鼠操做其实也是同样的事理,它没有什么奥秘和出格的处所。故宫有很多门,每一个门都能进入内;使用有很多种利用的方式,鼠标辅以键盘、快速键、号令行都是和使用交互的一种子,仅此罢了。既然都是操做使用的一种体例,那么我们为什么还放着简单快速的图形界面不消,「返璞」地用号令行呢?这就要提到号令行的两大劣势:功能强大、组合矫捷。例如我的 D 盘上有一份荣誉证书模板d:\honor.dotx,我需要以此模板为根本,制做二十份分歧的证书:图形界面确实能够实现:为了不显示启动界面,我们需要正在 Word 的选项中细心搜索一番对应的设置;从模板新建文档需要双击图标启动 Word,找到 D 盘中的模板,最初正在新建菜单中双击模板。二十份的话反复二十次即可。正在号令行中,我们仍然需要打字:同样是打开 cmd 并到 Word 目次,此次输入的是winword.exe /q /td:\honor.dotx,细心的读者估量曾经能猜出winword.exe后的两个小尾巴的意义:q天然是指quiet,t后面既然是模板的径,那可能代表着template,整句话就像正在发号出令:「很酷,可惜打这么多字也没简单几多。」你可能如许想。但号令行奇异之处就正在于:看似它只能用正在黑漆漆的号令提醒符里,现实上却无处不正在。我们左键 Word 的快速体例选择属性,此中有一个「方针」栏写着 Word 的使用径。给它后面添加上我们方才写的两个小尾巴,方针栏此时的值该当是从 Word 示例中能够看出,常用的软件同样供给了号令挪用的体例,其实,还有很多号令行东西供给了很多图形软件所不具备的功能。好比说我们正在 Bilibili 上看到一个视频,很是喜好,想要下载珍藏,或者想要用正在本人的做品中。目前大部门视频网坐都不再供给下载为通用格局的功能。下面我们用到的是视频下载东西 yt-dlp。和文章一开首提到的 reg.exe 分歧,它并非系统内置使用,需要事后下载到当地,就像我们要玩逛戏起首得下载安拆一样。我大师把我们后续下载的小东西全数放到C:\tools或者D:\tools目次下。下载到当地若双击系统弹出,需要先左键文件 属性 解除锁定。若是你测验考试双击此使用,会间接「闪退」。它没有图形界面,需要正在号令提醒符中利用。这类使用其实有个出格的名字,叫做台使用(Console App Terminal App)。现正在我们从起头菜单并打开 cmd.exe,这一次,我们不消 cd 到法式所正在的文件夹,而是间接写出使用的全名,也就是它的完整径。获取使用径的方式有两个,其一是左键文件(Windows 10 需要按住 Shift 再左键),选择「复制文件地址」,最初正在 cmd.exe 窗口上左键点击以粘贴。留意,正在 cmd 中,点击鼠标左键不会呼出一套图形化菜单,Ctrl+V也不起。选中文本按左键是复制功能,不选中文本按左键是粘贴功能,这是当前会经常用到的技巧。我们以少数派的 视频 为例,复制视频的地址(正在 Chrome 中,能够按住 Ctrl,顺次按 L,C 键),最初正在号令提醒符窗口把链接粘贴到 yt-dlp 的全名后面,最终号令是:不外,视频下到哪去了?默认下,yt-dlp 会正在视频存正在当前的目次下,也就是我们每次输入号令前都显示的阿谁目次,正在就截图中,就是 C:\User\Kepa,C:\User 下面的这个以用户名定名的子目次又被称为 Windows 的用户目次,之后我们还会提到。我不太对劲默认下载的,想着间接下载到 D 盘的 Videos 文件夹多好。别的我还想存一份视频的封面图。就像 Word 示例一样。此时我们需要给号令加小尾巴,这个小尾巴的正式名称多种多样,好比说参数(parameters,arguments)、标识(flags)、开关(switches)、选项(options)等等,本系列文章同一利用参数指代,它的就是应器具体该当若何完成我们给的指令,雷同于语法中的润色成分,好比说本例:相较于前面的号令这行长了不少,但同样不难理解。前面仍是号令加链接,只不事后面多了两个参数,-- 号的和第一个例子中的 / 是一样的,暗示「这后面的是参数」,整行号令翻译成天然言语:不外不得不认可,图形界面完成不了的需求仍是少数,似乎绝大大都下图形界面简单曲不雅。出格正在 Windows 如许一个图形界面做得很是完美的系统下,没需要给本人找麻烦。但微软仍然没有丢弃看似保守掉队的号令行,能让微软留住开辟资本的缘由,是号令行那无取伦比的矫捷性和自正在组合的能力。截至目前,本文曾经向大师引见了几个通过号令行形式利用的使用,每一次我城市让大师从网坐下载,解压,然后挪动到tools文件夹,再将使用所正在目次添加到变量的 Path 中,用起来比通俗的 GUI 还要更麻烦一点。有没无方法能够省心省力一点,把这些流程从动化呢?连系上一章中对脚本的阐述,读者可能顿时就会想到:把这些过程编写成脚本不就行了?这其实就是 Windows 下的包揽理器了。正在 GitHub 上 Windows 平台三大包揽理器 的软件库,不难发觉它们供给的并非安拆包,而是脚本。包揽理器是对于通俗人来说最为适用的号令行东西。它们能够帮帮你批量安拆、卸载、升级 PC 中的使用,无需再去官网获得安拆包。对于前面的例子中,需要手动添加进变量的使用,包揽理器也会从动帮你处置好。值得一提的是,除了 Scoop 有社区的国内镜像,其他平台的包揽理城市用到办事器位于之外的收集资本,因此默认下载速度不太抱负。这一末节会以 Chocolatey 为例引见包揽理器的各类用法。按照官网的 教程 ,正在包管收集畅达的下, PowerShell,并以办理员权限打开。我们会正在后面几章中细致引见 PowerShell,目前读者能够讲它理解为雷同于 cmd 的使用,它们就像做统一个营业的两个分歧的人员,虽然都能运转号令,但干事方式和气概大不不异。我们正在 PowerShell 中逐条粘贴并运转下面两条号令:期待进度条走完,此时 Chocolatey 曾经安拆完毕,试着输入choco -?会有以下输出:下面需要用 choco 来一下我们之前用到过的几个小东西。 ytp-dl 的号令是:你可能感觉这个不那么精确,别的里面有太多不相关的内容,此时就能够用上参数。-r 参数会让输出不显示无关内容,而 -e 参数代表仅显示完全婚配的条目:一些读者可能很是正在意空格问题。空格只是其分隔,无论有几多都无所谓。例如说,我想查看 youtube-dl 的具体消息,施行 CHOCO info YOUTUBE-DL 也是完全没问题的。读者务必熟悉 Chocolatey 和 scoop 包揽理器的根基操做,由于接下来若是利用到其他号令行使用,我不会再像本文一样细致地给出安拆下载的体例,大师需要用 CLI 的体例安拆它们。Chocolatey 其实供给了 GUI 版本(choco install ChocolateyGUI -y),读者能够测验考试一番,但想必不外多久就会用回号令行,终究 CLI 的资本占用和流利度必然会比封拆后的 GUI 好上不少。前文中我们引见了很多号令行东西,但正在利用这些东西之前,我们都要打开 cmd 或 PowerShell,它们到底是什么?之前我们提到了 Windows 的前身,MS-DOS,这是一个只能通过号令行操做的陈旧系统。而所谓系统,素质上也是一个软件,但凡是的软件是系统和用户的中介,例如我们没法子不开机就利用 Office 办公套件,用 Word 编纂一个文档必需先让 Windows 启动。但系统中的某些部门纷歧样,它间接和硬件打交道,用户和软件都通过系统这个中介来利用硬件资本完成。正在系统,软件,用户这三个脚色中,系统中担任安排硬件的那一部门手焦点比来,地位最焦点,因此有了一个抽象的名字:内核(Kernel)。雷同于一个坚果,有内核必然有外壳。最早人们既然用号令行的体例和系统交互,那么能运转号令的工具也天然就成了壳(shell)。shell 还有一个愈加抽象的名字:号令行注释器。我们曾经碰到过一些号令:cd 会进入某个目次、del 能删除文件。这些号令很大程度上从天然言语精简而来,明显,操做系统并不克不及理解人类的言语,而 shell 把 cd、del 等号令翻译成计较机能读懂的言语,它正在用户和系统间充任了翻译官的脚色。因此也能够想见,分歧的 shell 是分歧的言语之间翻译官。一条号令能够正在 PowerShell 中施行成功,但 cmd 却可能会报错。例如,正在 PowerShell 中施行 ls(list 的简称)能够列出当前目次下的所有条目,但 cmd 却不认识这个号令:不外虽然这么说,细心察看不难发觉,cmd 和 PowerShell 的窗话柄是太像了,若是没有菜单栏的图标,你几乎看不出它们的区别。之所以会如许,是由于我们看到的不是 shell 本体,而是叫做 Windows 台(conhost.exe)的使用,我们正在地址栏上输入统一个网址后,两个浏览器城市展现同样的网页,这是由于两个浏览器担任衬着网页的焦点是一样的。但 Edge 和 Chrome 的左键样式、设置页面、各类按钮等外正在却完全分歧。拓展:*NIX 系统简直如斯,但 Windows 的终端、shell 设想有所分歧,Windows 台承担着愈加复杂的,所有第三方终端都要通过 Windows 台供给的 API 和 shell 通信 。各类终端不只 UI 上有所区别,正在功能也有所分歧。例如,上一篇文章我们提到:正在 Windows 台中需要选中文本,然后左键才能够复制所选文本。但正在 Windows 终端中,用户能够设置选中文本间接复制,无需左键:下面的演示中,我会一曲利用这个愈加现代美妙的 Windows 终端。没有安拆的读者,能够从 Microsoft Store 中下载。之后,正在Windows 设置 现私和平安性 开辟者选项中,将其设置为默认终端:综上所述,shell 和终端的定义和区别正在于:shell 将用户的输入注释成计较机可以或许理解的言语,是运转各类号令的处所,分歧的 shell 语法分歧;而终端是 shell 的可视化界面,掌管着输入和输出,我们能够用 Windows 终端来替代 Windows 台以获取更好的体验。一些读者可能有疑问:那为什么良多东西既能够正在 cmd 上运转,也能正在 PowerShell 上运转,而且用法完全分歧呢?现实上,这些东西不只正在 Windows 平台语法不异,正在 Linux 和 macOS 的 shell 中也是一样的。它们不依赖于 shell 而存正在,被称为外部号令,取之对应的,是shell 自带的号令,被称为 shell 号令。此外还有一部门跨平台的号令行东西既非外部号令,也非 shell 号令,它们其实是脚本。开辟者为分歧的 shell 写了分歧的脚本文件来包管利用体验分歧。回忆一下第一篇中我们提到的一些例子。ping、Word、yt-dlp、adb、notepad 等等号令,其时我们是正在 cmd 中运转的,你能够测验考试用 PowerShell 来施行这些号令,能够发觉语法、功能都完全分歧。道理很简单。打个例如,Windows 和 macOS 是两个系统操做逻辑大相庭径,但两个系统上的 Chrome 浏览器按钮、菜单、功能大致是一样的。同样的事理,yt-dlp 等外部号令是以可施行法式(exe 文件)形式存正在的,号令的参数和功能曾经由第三方开辟人员事后设想好,无论是什么 shell 都不会影响它们的用法。那若何理解 shell 号令呢?外部号令之间没有什么联系,就像 Notepad 和 Word 之间没相关系一样;但 shell 号令雷同于 Word 这个使用中的一个个小功能,它们是由统一个开辟商为了一个大的方针,用一套规整的逻辑设想出来的。例如,cmd 自带的所有号令的参数都用 / 标识表记标帜,而 PowerShell 号令的参数则是由 - 标识表记标帜的。还记得之前用 adb 禁用使用的号令吗?有没有想过为什么它这么长?缘由正在于这行代码做了两件事,adb shell担任进入 adb 供给的 shell;pm disable-user才是禁用使用的号令,adb 供给的 shell 中,其他的号令长得都和pm disbale-user差不多:细心揣摩的话,「利用号令行」这个话题似乎有些奇异。由于号令行使用也是使用法式,类比来看,经常利用手机的用户很少会问「若何利用淘宝」、「若何利用微信」等问题。可号令行恰恰分歧,若是我不正在第一篇文章中告诉大师 Word 能够加 /t 参数,你可能从来没想过 Word 能够这么用。因而有一种概念认为,CLI 最大的缺陷就是「可发觉性」差。但现实并非完全如斯。之所以很多人会感觉号令行难,是由于他们习惯了别的一种逻辑。还记得第一篇文章中我若何阐述 CLI 的吗?只需理解了点、按、滑这三个根基操做,不消任何人教我们也能控制一个新 APP 的根基用法。桌面端的使用交互也有雷同的逻辑,鼠标左键、左键、中键不恰是对应着确认、更多和滑动吗?反过来说,你会感觉各类快速键记起来很麻烦,背后的缘由是不是快速键背后贫乏一套同一的设想逻辑呢?这就是第一篇所说的「和使用交互的子」的素质。控制了点按滑就会利用手机的各类使用,那学会了什么样的逻辑,就学会了所有的号令行使用呢?和 GUI 分歧,号令行中,我们就像写文章一样是通过输入字符来完成的,因此利用号令行的逻辑表示为语法(Syntax)。就像所有手机 App 都能点、按、滑一样,无论是 PowerShell、cmd 仍是 Bash,所有运转正在 CLI 上的号令都恪守着一些配合的语律例范。虽然它们功能、用法截然不同,但号令的形成却出奇地分歧:号令名,动做,参数,它们之间以空格分隔。号令行的语法能够总结为:shell 下各类号令都能笼统为的布局,只不外它们正在某些字符的写法和挨次上有所分歧,一些号令可能没有后两个部门。我们暂且把号令间的区别放一边,先逐一部门注释此中的共性。第一部门是号令名。无论利用什么号令,都必需先叫出它的名字。就像时,必需先指定担任人一样。对于外部号令而言,号令名就是外部使用的文件名。正在前面的中,我们既看到过简短如 notepad、choco 的使用名称,也认识到:若是使用所正在径没有加进变量,就必需写出使用的完整径,不然 shell 就会报错:该输入什么号令名,取决于使用开辟者给他的使用起了什么名字,我们能用 where.exe 看到外部号令的具体径。不外那些自行下载到当地的使用,我们完全能够把它们改成本人喜好的名字,下图中我就把之前用到过的 yt-dlp.exe 沉定名为 yt.exe,施行起来也没有任何问题:和类 Unix 系统分歧,Windows 文件系统不区分大小写,因此使用名也不区分大小写。ping、PING甚至 piNG 都是统一个使用:若是一个使用的完整径含有空格,必需加双引号。由于一行号令的分歧部门之间就是用空格分隔的,若是不加引号,shell 就会把它当做几份别离解析。此外务必记住,和 cmd 分歧,PowerShell 正在施行加引号的号令时,前面必需加 (见下图第命了),背后的缘由我们之后会学到:第二部门是动做。若是说号令名对应着一句话的从语的话,那么动做部门就相当于谓语和宾语。分歧的号令的动做部门可能是雷同的,例如scoop install yt-dlp和choco install yt-dlp都是安拆 yt-dlp 的意义。要想理解一行号令的功能,第一和第二部门是环节,例如 Chocolatey 还原代办署理的号令:一些使用本身功能单一,号令名本身的意指就很是明白了,那么它就不需要第二部门。譬如第二篇文章中提到的 Chrome,用号令行的体例挪用它的时候,Chrome 独一的就是打开浏览器。实正的难点正在于第三部门参数,它的是细致一个动做要若何完成。良多下,号令行东西就是正在学参数。一个号令能够有几十个参数,它们看似复杂,现实也有纪律可循。参数部门由特殊符号开首。本节一起头列出的四个号令,它们的参数前面是 -(减号)、--(两个减号)或 /(斜杠)这三种特殊符号,后面则是相对切近天然言语的字母或者单词:virtualdesktop /w /right的切换到左侧的桌面,参数right指向左,参数w是 Wrap的缩写,暗示当切换到最左侧的桌面时,绕回第一个桌面。我们还能发觉两类分歧参数:-file D:\tools\init.ps1是常规参数,其布局是「参数名 参数值」,也就是说D:\tools\init.ps1是file的具体值。对于常规参数而言,一旦我们写了参数名,往往需要为它指定一个合适的数值:参数名和参数值的毗连体例因使用而异。大大都号令用的是空格,不外也有用 = 或者 : 的案例。譬如用 choco 锁定使用(不进行更新)的号令:常规参数之外,-nologo被称为开关参数(switch parameter)。这类参数只要是和否两种形态。若是我们不写-nologo,那么 PowerShell 就会显示版权消息,反之则会现去相关消息。choco号令中的 r 和 e 也是雷同的事理。参数的大小写和号令名分歧,是由使用开辟者的。-f 和 -F 极有可能是两个分歧的参数,因此正在输入参数的时候务必小心。领会完号令的三大次要成分,正在键入号令时你该当会更有决心了。但理解了号令行的语法并不脚以帮帮我们控制目生的号令,我们还需要明白地晓得一个号令能够加哪些动做,有哪些参数。而正在我们接触了这么多号令行东西之后,不难发觉,正在 号令名 动做 参数 这个组合中,外部号令的前两部门都大同小异,但参数部门则各有特点。按照这些特点,我们能够将外部号令分为三类。领会完这三种「模具」,你便能更快地控制新的外部号令。计较机成长过程中,正在 Unix 时代几个最为风行的 shell —— sh(bin/sh)、Bash(/bin/bash)影响下,号令行的最后规范逐渐确立,之所以 Linux、macOS 等 Unix-like 系统上的各类 shell 号令根基分歧,现代的开辟者们正在设想本人的使用时,常常倾向于和类 Unix 系统上的 shell 号令气概连结分歧。因此,Unix sh 气概的外部号令很是常见。好比说我们方才用到的 cURL,通过文档察看其语法和参数:- 后接短参数,即一个字母,-- 后接长参数,即完整的单词,多个单词由 - 毗连。前者往往是后者的简写形式;以上四点是所有 Unix sh 气概号令的共有特征,若是碰着了这类号令,利用command --help大要率能调出其文档。不只是 cURL,我们用过的 npm、yt-dlp 等大部门使用属于此类气概,好比说当初我们用 yt-dlp 下载视频的号令是:号令的文档告诉我们参数 --output 有一个简写形式 -o,因而,它和下面的号令是等价的:又由于 Unix-like 气概的号令区分大小写,所以万万不要写成了yt-dlp -O ……。不外有时候你会看到这类号令的短横线后跟了不只一个字母,git -am,这并没有和 Unix sh 气概冲突, 而是同时指定多个短参数的简单写法:curl -fsSL等同于curl -f -s -S -L。从各类意义上,Windows 都不遵照很多类 Unix 系统奉为圭臬的各种习惯。cmd 是微软从 MS-DOS 根本上拓展而来的 shell,这也培养了 Unix sh 气概之外的 Windows cmd 气概,它的典型例子就是 cmd 本身了:调出它们的文档的方式是command /?。除了 cmd,之前我们用过的 Word、VirtualDesktop 都属于此类。现实上,大部门 Windows 预置的外部号令,以及特地为 Windows 写的使用一般都遵照这类气概,例如 Windows 自带的电源办理小东西,powercfg.exe:用它来生成一份电池利用的号令是:powercfg.exe /BATTERYREPORT,将参数小写也是没问题的:相较于一板一眼的 Unix sh 气概,这类的号令设想得很是宽松,一些号令支撑省略参数前的 /符号,或者用 - 取代,这也是为什么大师能正在收集上看到统一个号令的各类写法。我仍然大师同一地利用 /,由于并非所有使用都支撑此特征。查阅这类号令文档的方式一般是command -help,能够缩写为 -h,少数跨平台的使用倾向于利用这种气概,前文展现过的 PowerShell、magick 都属于此类:这是最简单的一类号令,我们只需记住它的参数是由 - 指导的即可。但它们的错误是号令写起交往往很长。