🏕 2022 独立开发者训练营(全栈)开营啦 ~~,查看介绍 / 立即报名(早鸟优惠) →

宁皓独立开发者训练营:工具篇 — 命令行界面(Cmder、终端)

宁皓独立开发者训练营中,有些训练任务需要在命令行界面下完成。Windows 用户可以安装一个 Cmder,macOS 用户可以使用系统自带的终端作为命令行界面。

在训练任务中需要使用在命令行界面下做的一些事情:

  • 使用命令创建应用
  • 启动应用在本地的开发服务
  • 安装项目需要的功能包
  • 执行命令快速创建应用需要的各种零部件
  • 远程连接管理服务器
  • 部署服务端应用
  • 对开发的项目做源代码管理

Cmder(Windows)

Cmder 是一款在 Windows 系统中使用的命令行界面。

我们需要安装一个完整版的 Cmder 作为在 Windows 系统中使用的命令行界面工具。当您在训练视频中听到 “打开终端”,如果您的电脑的操作系统用的是 Windows,就可以打开 cmder。

官方网站https://cmder.net/

安装与使用

在 cmder 官方下载完整版的 cmder,将解压之后得到的 cmder 目录放在系统的 Program Files 目录中,然后可以在桌面上创建一个 cmder.exe 的快捷方式。

使用 cmder,可以右键点击 cmder 或是它的快捷方式,然后选择以 管理员身份运行,打开以后可以点击右下角的绿色加号小图标,新建一个 Bash as admin 类型的标签窗口,在这个标签窗口输入要执行的命令。

配置文件

因为我们会选择使用 Bash as admin 类型的 cmder,对应的配置文件应该是 cmder/config/user_profile.sh,也就是在这个文件里的配置会影响 Bash as admin 类型的 cmder。暂时我们只需要知道这个文件的存在即可。

终端(macOS)

终端(Terminal)是 macOS 系统中自带的一款命令行界面。在训练视频中,执行命令的时候一般都会在终端下面完成,如果您用的操作系统是 Windows,可以使用 Cmder 代替终端。

使用终端

终端是 macOS 系统自带的工具,不需要额外安装,在系统的启动台或者使用聚焦搜索,都可以打开终端,打开以后就可以在上面执行文字命令了。

通过聚焦搜索找到终端

偏好设置

通过终端的 偏好设置,你可以设置终端使用的主题、字体字号、光标的样式等等。

打开终端,在终端菜单下面可以打开编好设置(command + ,),然后在描述文件标签的下面,选择使用 Homebrew,字体是 Monaco 18,光标用的是下划线。

终端的偏好设置

配置文件

通过用户主目录下的 .zshrc 与 .zprofile 这两个文件可以修改终端的相关配置。

因为文件的名字里是以点开头的,这种文件在系统里默认会被隐藏起来,也就是即使你打开了文件所在的目录,也可能看不到 .zshrc 或 .zprofile 这两个文件。在终端可以使用 vi 或 code(VSCode 编辑器里带的一个命令行工具) 命令打开并编辑这两个文件。

使用 vi 命令编辑

vi ~/.zprofile

执行上面的命令会用 vi 编辑器打开当前登录用户主目录下的 .zprofile 文件。

使用 code 命令编辑

code ~/.zprofile

执行上面的命令会使用 VSCode 编辑器打开当前登录用户主目录下的 .zprofile 这个文件。

修改提示符

打开终端,在光标左边的东西就是提示符,默认这个提示符看起来可能像下面这样:

wanghao@wanghaodeMacBook ~ %

在提示符里会显示当前登录到系统中的用户(wanghao)与电脑的名字(wanghaodeMacBook),还有当前所在的目录(~),另外在结尾还有一个 % 符号。在训练营的视频内容中,终端的提示符是一个简单的 → 符号,如果你希望使用同样的提示符,可以通过修改 ~/.zshrc 这个文件。

vi ~/.zshrc

vi 是一个在命令行界面下使用的文本编辑器,它后面是要编辑的文件的位置,如果文件不存在就会新创建一个。打开以后,先按一下小写的 i 按键,这会打开编辑器的编辑模式,这样就可以编辑文件内容了,在文件中添加下面这行代码:

PROMPT='→ '

上面这行配置的就是终端的命令提示符。完成编辑以后,按一下 esc 退出编辑模式,再输入 :wq 并按下回车这样会保存并且退出文件,注意要在英文状态下输入这些命令。修改了配置文件以后,需要重启终端才能生效,或者可以执行一下 srouce ~/.zshrc,这时你会发现命令提示符就会是我们修改之后的样子了。

修改了描述文件与提示符之后的终端

常用命令

下面是几个经常会用到的命令行工具。

pwd(输出当前位置)

pwd (print working directory)命令可以查看当前所在的位置。

执行 pwd ,得到的结果是一个路径,这个路径是用目录名字加斜线表示的通过这个路径我们就可以知道自己当前所在的位置,这个位置其实就是系统里的某个目录。

示例

→ pwd
/Users/wanghao/desktop

执行 pwd 命令,显示当前所在位置是 /Users/wanghao/desktop。

ls(列出资源)

ls(list)命令可以列出指定位置里的资源,也就是列出某个位置里包含的文件与目录。

列出当前位置里的资源

执行 ls 命令,如果不指定具体位置,就会列出当前所在位置里的东西。

示例

→ ls
README.md    dist        package.json    src ...

列出指定位置里的资源

在 ls 命令的后面可以加上一个具体的位置,这样可以列出这个位置里包含的资源。

示例

→ ls ~/desktop/xuanwu
README.md    dist        package.json    src ...

列出资源的详细信息

如果想列出资源更详细的信息,可以配合使用 l(长格式) 与 a(所有) 这两个选项。

示例

→ ls -la
total 832
drwxr-xr-x   20 wanghao  staff     640 Feb 25 17:31 .
drwxr-xr-x@  59 wanghao  staff    1888 Apr 26 10:50 ..
drwxr-xr-x   12 wanghao  staff     384 Apr 26 10:55 .git
-rw-r--r--    1 wanghao  staff     283 Mar  7 22:15 .gitignore
-rw-r--r--    1 wanghao  staff     315 Mar  7 22:15 README.md
drwxr-xr-x@   8 wanghao  staff     256 Feb  5 09:41 dist
drwxr-xr-x  860 wanghao  staff   27520 Jan 24 09:01 node_modules
-rw-r--r--    1 wanghao  staff    1580 May  5 09:45 package.json
drwxr-xr-x   22 wanghao  staff     704 May  5 09:45 src
...

使用 l 选项会用长格式显示资源,每一行是一个资源(文件或目录),每一栏分别表示不同的东西,比如 drwxr-xr-x 表示的是资源的权限,wanghao 是资源的拥有者,staff 表示资源所属的用户组。使用了 a 这个选项以后会列出所有资源(包含隐藏文件),比如 .git 与 .gitignore,这两个文件的名字是以点开头的,在不使用 a 选项的情况下,列出资源时是不会显示这种文件的。

cd(改变当前位置)

cd(change directory)命令可以改变当前位置,也就是进入到系统的某个目录的下面。

进入到某个位置

在 cd 命令的后面加上一个具体的路径,可以进入到这个指定的位置。

示例

cd ~/desktop

~/desktop 是一个路径,这里的 ~(波浪号)指的位置就是用户的主目录。执行上面这行命令可以进入到用户主目录下面的 desktop 这个目录里面,这个目录里的东西默认会出现在你的电脑桌面上。 确定当前所在位置可以用 pwd 命令,列出当前位置里的资源可以执行 ls 命令。

回到上一级目录

在 cd 命令的后面加上 ../,可以进入到当前目录的上一级目录。

示例

cd ../

../两个点加一条斜线)表示的是上一级目录,比如当前位置是在 /Users/wanghao/desktop对于这个位置来说,它的上一级目录就是 /Users/wanghao。这样如果执行 cd ../ 以后,用 pwd 输出当前的位置,得到的结果会显示当前是在 /Users/wanghao 这个位置上。

../../ 表示的是上一级目录的上一级目录, ./ 一个点加一条斜线表示的是当前目录。

mkdir(创建目录)

mkdir(make directory)命令可以创建目录。

在当前位置创建目录

在 mkdir 命令的后面加上要创建的目录的名字,可以创建一个目录。

示例

mkdir xuanwu

上面命令会在当前目录下创建一个叫 xuanwu 的目录。

在指定位置创建目录

在 mkdir 命令的后面可以加上要创建的目录的具体位置。

示例

mkdir -p ~/desktop/projects/xuanwu

注意上面我们在命令里用了一个 p 选项,如果不用这个选项必须要保证新目录的父目录是存在的,也就是在桌面上应该有个 projects 目录,这样才能正常地创建 xuanwu 这个目录,如果 projects 这个目录不存在,执行命令时就会报错:No such file or directory。用了 p 选项以后,如果需要的目录不存在就会自动创建需要的目录。

cp(复制)

cp(copy)命令可以复制文件或目录。

复制文件

执行 cp 命令的时候需要提供想要复制的文件与复制到的位置。

示例

cp assets/example.env .env

上面这行命令会复制当前位置里的 assets 目录里的 example.env 这个文件,复制到的位置是当前目录,名字叫 .env。也就是在当前目录下应该会有一个 .env 文件,这个文件就是 assets/example.env 的复制品。

复制目录

用 cp 命令复制目录的时候需要加上 R 选项,这样可以复制指定的目录以及它里面包含的所有东西。

示例

cp -R config ../config_bak

执行上面这个命令会复制当前位置里的 config 这个目录(包含目录里的所有文件与目录),将复制品放在上一级目录里,名字是 config_bak。

rm(删除)

rm(remove)命令可以删除文件或目录。

删除文件

执行 rm 命令删除文件时,需要提供要删除的文件。

示例

rm package-lock.json

执行上面这个命令会将当前目录下的 package-lock.json 这个文件删除掉。

删除目录

用 rm 命令删除目录时可以提供 r(递归) 与 f(强制) 这两个选项,这样会强制将指定目录以及它里面包含的全部东西一块删除掉。

示例

rm -rf ~/desktop/nid-node/node_modules

执行上面这个命令,会强制将桌面上的 nid-node 目录里的 node_modules 这个目录以及它里面包含的东西全部都删除掉。

vi(命令行编辑器)

vi(visual)是一个在命令行界面下使用的编辑器,可以用它编辑或创建文本文件。

打开编辑器

在 vi 命令的后面加上要编辑的文件的具体位置,执行以后就会用 vi 编辑器打开指定的文件。如果要编辑当前目录下的文件,可以直接输入文件的名字。

示例

vi ~/desktop/xuanwu/README.md

用 vi 编辑的文件可以不存在,但要保证文件所在目录是存在的,如果目录不存在,保存文件时就会报错:Can't open file for writing。所以在用 vi 编辑或创建文件之前,先保存文件目录是存在的,如果不存在,可以使用 mkdir 命令创建所需目录。

编辑文件

使用 vi 编辑文件内容,需要打开编辑模式,按一下 i 按键可以打开编辑模式,这时窗口底部会显示 — INSERT —,完成编辑以后按 esc 按键可以退出编辑模式。

保存文件并退出

编辑了文件内容以后,如果想要保存对文件的修改并退出 vi 编辑器,先确定当前在正常模式下,按 esc 可以退出其它模式回到正常模式,然后执行:

:wq

w 表示写入,q 表示退出,输入 :wq 以后按下回车,这样就会保存对文件的修改,然后关掉 vi 编辑器。

放弃修改直接强制退出

如果不想保存对文件的修改,打算强制退出 vi 编辑器,可以执行:

:q!

q 表示退出,! 表示强制。

翻页查看文件

按 ctrl + f 按键可以向下翻页查看文件,按 ctrl + b 按键可以向上翻页查看文件。

搜索文件内容

在正常模式下,输入 /,后面加上要搜索的关键词,按下回车,可以搜索并定位到当前文件包含指定关键词的地方。按 n 可以定位到下一个匹配的地方,按 N 可以定位到上一个匹配的地方。

cat(输出文件内容)

cat(concatenate)命令可以将多个文件合并成一个文件,也可以输出指定文件里的内容。

输出文件内容

在 cat 命令的后面提供要查看内容的文件,可以输出这个文件里的内容。

示例

cat ~/.ssh/id_rsa.pub

执行上面这行命令会输出在用户主目录下的 .ssh 目录里的 id_rsa.pub 这个文件里的内容。

相关概念

终端

终端就是一种命令行界面工具,当您在训练营中听到或看到 “在终端” 或 “打开终端” 时,Windows 用户可以打开 cmder,macOS 用户可以打开系统自带的终端。

用户主目录

在操作系统里的用户一般都有一个主目录,这个目录的位置在不同的操作系统里是不一样的,比如在 macOS 系统里,wanghao 这个用户的主目录的位置应该是 /Users/wanghao,在 Ubuntu 系统里,wanghao 这个用户的主目录应该是在 /home/wanghao。

进入用户主目录

在终端可以使用 ~(波浪号)表示当前用户的主目录所在的位置,比如在 macOS 系统里,当前登录的用户如果是 wanghao,这个 ~ 表示的位置应该就是 /Users/wanghao,所以进入到这个位置,可以执行:

cd ~

根目录

根目录指的是某个地方的第一级别的目录。

比如一个项目的位置是 ~/desktop/nid-node,对于这个项目来说,它的根目录指的就是 ~/desktop/nid-node。如果我们在这个项目的根目录下创建了一个 README.md 文件,那这个文件的位置应该就是 ~/desktop/nid-node/README.md。

系统根目录

在 macOS 与 Linux 类型的操作系统里,系统的根目录指的是 / 这个位置,比如执行 cd / 命令,会进入到系统根目录的下面。/Users 这个路径,可以描述为系统根目录下面的 Users 这个目录。

路径

路径可以用来表示在操作系统里的一个目录或文件的位置,路径由目录与斜线组成,如果是表示文件的路径,在路径中还会包含文件的名字。

目录的路径

表示目录的路径由目录的名字与斜线组成。

示例

/Users/wanghao/desktop/xuanwu

上面这个路径从系统的根目录开始,这个路径指的就是系统根目录下的 Users 里面的 wanghao 里的 desktop 目录里的 xuanwu 这个目录。

文件的路径

表示文件的路径由目录的名字、斜线与文件组成。

示例

/Users/wanghao/desktop/xuanwu/src/main.ts

上面这个路径从系统的根目录开始,这个路径指的就是系统根目录下的 Users 里面的 wanghao 里的 desktop 目录里的 xuanwu 这个目录里的 src 目录里的 main.ts 这个文件。也就是 main.ts 这个文件在 src 目录的下面,src 在 xuanwu 的下面,xuanwu 在 desktop 目录里,desktop 在 wanghao 这个目录里,wanghao 在 Users 这个目录里,Users 这个目录在系统的根目录的下面。

相对路径

相对路径指的是相对于当前位置的路径。相对路径表示的实际位置,会随着当前位置的变化而变化。

示例

src/main.ts

相对路径不以系统根目录(/)开始。描述上面这个相对路径,可以说当前目录下的 src 目录里的 main.ts。如果当前位置是 /Users/wanghao/desktop/xuanwu,相对于这个位置,上面这个路径在系统中的实际位置应该就是:

/Users/wanghao/desktop/xuanwu/src/main.ts

绝对路径

绝对路径指的就是一个目录或文件在系统中的实际位置。

示例

/Users/wanghao/desktop

绝对路径会从系统的根目录开始。描述上面这个绝对路径,可以说在系统根目录下的 Users 里的 wanghao 里的 desktop 这个目录。

环境变量

环境变量(environment variables)就是在系统环境中存在的一些变量,程序可以读取这些环境变量并获取到它们的值。

查看环境变量

printenv

在终端执行 printenv 命令可以输出当前已有的一些环境变量以及它们对应的值。环境变量的名字一般全部使用大写字母,等号右边是环境变量对应的值。

示例

LANG=zh_CN.UTF-8

LANG 是环境变量的名字,zh_CN.UTF-8 是 LANG 这个环境变量对应的值。

在 Windows 系统中通过 Cmder 执行 printenv 命令

在 macOS 系统中通过终端执行 printenv 命令

设置环境变量

在终端,执行 export 命令可以添加环境变量,被添加的环境变量只能在当前这个终端标签里使用。

示例

export MACHINE_NAME=玄武

执行上面的命令会添加一个环境变量叫 MACHINE_NAME,它的值是 玄武。这样在当前这个终端标签里运行的程序,都可以读取到 MACHINE_NAME 这个环境变量,得到的值就是 玄武 。执行 printenv 可以确定一下是否包含了 MACHINE_NAME 这个环境变量。

关掉这个终端标签,重新再打开,之前设置的环境变量就不见了。如果你希望每次打开终端的时候自动设置一些环境变量,可以将设置环境变量用的命令添加到终端的配置文件里,在 macOS 系统里就是 ~/.zprofile,Windows 系统里是 cmder/config/user-profile.sh。

PATH

PATH 是一个环境变量,它的值是一组路径,在终端执行命令的时候,会在这些路径里查找是否包含要执行的命令程序。

输出 PATH 的值

printenv PATH

得到的结果应该是一组路径,不同的路径之间会用冒号分隔开,在这些路径里都会包含一些可以执行的命令程序。

/usr/local/bin:/usr/bin:/bin: ...

设置 PATH 的值

安装了软件以后,可能会包含一些命令行工具,如果想在终端直接使用它们,需要将包含这些命令行工具的目录添加到 PATH 里。

示例

export PATH=$PATH:/Applications/flutter/bin

在终端的配置文件里添加上面这行代码,结果就是在 PATH 这个环境变量里添加了一个新的路径,位置是 /Applications/flutter/bin,也就是在这个位置里包含的命令行工具,以后都可以直接在终端执行。这里的 $PATH 引用的是原来的 PATH 这个环境变量的值。

钥匙

钥匙(keys)是加密解密用的东西(文本文件),在训练营中,向远程仓库推送代码的时候,登录管理远程服务器的时候都会用到在本地电脑里存放的钥匙。钥匙一般都成对出现,一个密钥(private key)对应一个公钥(public key)。我们可以给当前登录到系统的用户生成一对钥匙,其中密钥是私密的,决对不能交给别人,但是公钥可以放心交到其它地方使用。

生成钥匙对

当前用户的钥匙对会放在用户主目录下的 .ssh 这个目录里,你可以先确定一下是否已经为当前用户生成了钥匙对。

ls ~/.ssh

执行上面的命令,如果发现用户主目录下的 .ssh 里面,有 id_rsa(密钥) 与 id_rsa.pub(公钥) 这两个文件,说明当前用户已经拥有了钥匙对。如果没有这两个文件,可以执行 ssh-keygen 命令生成它们。

ssh-keygen

在终端,执行 ssh-keygen 命令,并一路回车,完成以后就会在用户主目录下的 .ssh 目录里生成一对钥匙。这个命令只需要执行一次,重复执行会覆盖掉之前生成的钥匙对。

查看公钥文件内容

在配置三方服务使用钥匙验证身份的时候,我们需要复制用户的公钥文件里的内容。

查看公钥文件里的内容可以执行:

cat ~/.ssh/id_rsa.pub

输出的内容看起来像这样:

ssh-rsa AAAAB3NzaC1yc2EAAX...

技巧

知道命令来自哪里

如果你想知道一个命令行工具到底在哪儿,可以用 which 命令,比如我想知道 ls 这个命令行工具的位置,可以执行:

which ls

得到的结果就是 ls 这个命令行工具的位置,具体在哪取决于你的操作系统。在 macOS 系统里,这个工具是在 /bin/ls 。在 Windows 系统里,如果你用的是 bash 类型的 Cmder,会显示这个工具的位置是 /usr/bin/lsusr 一般表示的是 user,也就是用户的意思,bin 这个目录里通常包含的是一些可以执行的程序。

这个 /usr/bin 应该是 Cmder 设置的一个目录的别名,因为在 Windows 系统里并没有这个地方,实际的位置应该是 Cmder 里的某个目录的下面。在我的系统里,/usr/bin 真正的位置是 /C/Program\ Files/cmder/vendor/git-for-windows/usr/bin ,进入到这个目录的下面,列出目录里的资源,你会发现一些 .exe 后缀的文件。

在 Windows 系统里,带这种 .exe 后缀的文件就是可执行的程序。在后面我们会用到这里面的一些命令行工具,比如远程连接服务器用的 ssh ,生成密钥文件用的 ssh-keygen 等等。Windows 系统默认都不带这些东西,这也是我们为什么要用 Cmder 来代替 Windows 系统自带的命令行界面。

获取命令的帮助信息

如果你了解某个命令行工具的用法,可以在命令的后面加上 help 选项,比如:

ls --help

如果命令不提供 help 这个选项,可以试着用 man(manual) 命令查看命令的使用说明,比如:

man ls

命令的说明文档可能会分页显示,按 f 键可以向后翻页,按 b 键可以向前翻页,按 q 键可以退出文档。

相关课程

练习使用命令行界面

训练营

参加宁皓网独立开发者训练营,立即报名



微信好友

用微信扫描二维码,
加我好友。



微信公众号

用微信扫描二维码,
订阅宁皓网公众号。



240746680

用 QQ 扫描二维码,
加入宁皓网 QQ 群。

统计

13799
分钟
0
你学会了
0%
完成

社会化网络

关于

微信订阅号

扫描微信二维码关注宁皓网,每天进步一点