Linux 学习笔记
一、操作系统
1 不同主流操作系统
- 桌面操作系统
- 服务器操作系统
- 嵌入式操作系统
- 移动设备操作系统
1.1 服务器操作系统
Linux
- 安全、稳定、免费
- 占有率高
Windows Server
- 付费
- 占有率低
1.2 嵌入式操作系统
- Linux
1.3 移动设备操作系统
- iOS
- Android
2 虚拟机
虚拟机指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统
3 Linux 内核及发行版
内核用于直接控制硬件设备,包含一套终端命令
Linux发行版建立在内核的基础上,Ubuntu 是其中之一
4 Linux 文件系统
Ubuntu 没有盘符概念,只有一个根目录,所有文件都在它下面
1 | graph TD |
4.1 Linux 主要目录
- /:根目录,一般根目录下只存放目录,在linux 下有且只有一个根目录
- 当在终端输入
/home
,其实是在告诉电脑,先从根目录开始,再进入到home目录
- 当在终端输入
- /bin、/usr/bin:可执行二进制文件的目录,如常用的命令ls、tar、mv、cat等
- /etc:系统配置文件存放的目录,不建议在此目录下存放可执行文件,重要的配置文件有:
- /etc/inittab
- /etc/fstab
- /etc/init.d
- /etc/X11
- /etc/sysconfig
- /etc/xinetd.d
- /home:系统默认的用户家目录,新增用户账号时,用户的家目录都存放在此目录下
~
表示当前用户的家目录~edu
表示用户edu的家目录
二、Linux 操作系统的使用
1 Linux常用命令
序号 | 命令 | 对应英文 | 作用 |
---|---|---|---|
01 | ls | list | 查看当前文件夹下的内容 |
02 | pwd | print work directory | 查看当前所在的文件夹 |
03 | cd [目录名] | change directory | 切换文件夹 |
04 | touch [文件名] | touch | 如果文件不存在,新建文件 |
05 | mkdir [目录名] | make directory | 创建目录 |
06 | rm [文件名] | remove | 删除指定的文件名 |
07 | clear | clear | 清屏 |
08 | tree [目录名] | tree | 以树状图列出文件目录结构 |
使用技巧:
ctrl
+shift
+=
放大终端窗口字体显示ctrl
+-
缩小终端窗口的字体显示
2 Linux终端命令格式
command [-options] [parameter] |
说明:
command
:命令名,相应功能的英文单词或单词的缩写[-options]
:选项,可用来对命令进行控制,也可以省略[parameter]
:传给命令的参数,可以是零个、一个或者多个[]
代表可选命令(选项)可以合并使用,并且先后顺序不影响结果
3 常用命令补充
3.1 ls 命令
Linux 下文件和目录的特点:
- Linux 文件或者目录名称最长可以有256个字符
- 以
.
开头的为隐藏文件,需要用-a 参数才能显示 - . 代表当前目录
- .. 代表上一级目录
ls 常用选项:
参数 | 含义 |
---|---|
-a | 显示指定目录下所有子目录与文件,包括隐藏文件 |
-l | 以列表方式显示文件的详细信息 |
-h | 配合-l 以人性化的方式显示文件大小 |
ls通配符的使用:
通配符 | 含义 |
---|---|
* | 代表任意个数字符 |
? | 代表任意一个字符,至少一个 |
[] | 表示可以匹配字符组中的任意一个 |
[abc] | 匹配a、b、c中的任意一个 |
[a-f] | 匹配从a到f范围内的任意一个字符 |
通配符可以用于其他命令
3.2 cd 命令
命令 | 含义 |
---|---|
cd | 切换到当前用户的主目录(/home/用户目录) |
cd ~ | 切换到当前用户的主目录 |
cd . | 保持在当前目录不变 |
cd .. | 切换到上级目录 |
cd - | 可以在最近两次工作目录之间来回切换 |
相对路径和绝对路径:
- 相对路径:在输入路径时,最前面不是/或者~,表示相对 当前目录 所在的目录位置
- 绝对路径:在输入路径时,最前面是/或者~,表示从 根目录/家目录 开始的具体目录位置
3.3 touch 命令
- 如果文件不存在,可以创建空白文件
- 如果文件已经存在,可以修改文件的末次修改日期
3.4 mkdir 命令
选项 | 含义 |
---|---|
-p | 可以递归地创建目录 |
新建的目录的名称不能与当前目录中已有的目录或文件同名
3.5 rm 命令
选项 | 含义 |
---|---|
-f | 强制删除,忽略不存在的文件,无需提示 |
-r | 递归地删除目录下的内容,删除文件夹时必须加此参数 |
3.6 tree 命令(需要安装)
选项 | 含义 |
---|---|
-d | 只显示目录 |
4 文件系统相关命令
序号 | 命令 | 对应英文 | 作用 |
---|---|---|---|
09 | cp 源文件 目标文件 | copy | 复制文件或者目录 |
10 | mv 源文件 目标文件 | move | 移动文件或者目录/文件或者目录重命名 |
11 | cat 文件名 | concatenate | 查看文件内容、创建文件、文件合并、追加文件内容等功能 |
12 | more 文件名 | more | 分屏显示文件内容 |
13 | grep 搜索文本 文件名 | grep | 搜索文本文件内容 |
14 | echo 文本 | echo | 会在终端中显示参数指定的文字,通常会和重定向联合使用 |
4.1 cp 命令
选项 | 含义 |
---|---|
-f | 已经存在的目标文件直接覆盖,不会提示 |
-i | 覆盖文件前提示 |
-r | 若给出的源文件是目录文件,则cp 将递归复制该目录下的所有子目录和文件夹,目标文件必须为一个目录名 |
4.2 mv 命令
选项 | 含义 |
---|---|
-i | 覆盖文件夹前提示 |
4.3 cat 命令
cat
会一次性显示所有的内容,适合查看内容缺少的文本文件
选项 | 含义 |
---|---|
-b | 对非空输出行编号 |
-n | 对输出的所有行编号 |
Linux 中还有一个
nl
的命令和cat -b
的效果等价
4.4 more 命令
more
每次只显示一页的内容,适合于查看内容较多的文本文件more
的操作键和man
除了无搜索基本一致
4.5 grep 命令
grep
允许对文本文件进行模式查找,又被称为正则表达式
选项 | 含义 |
---|---|
-n | 显示匹配行及行号 |
-v | 显示不包含匹配文本的所有行 |
-i | 忽略大小写 |
常用的两种模式查找:
参数 | 含义 |
---|---|
^z | 行首,搜寻以’z’开头的行 |
tp$ | 行尾,搜寻以’tp’结束的行 |
4.6 重定向
- Linux 允许将命令执行结果重定向到另一个文件
- 将本应显示在终端上的内容输出/追加到指定文件夹中
其中:
>
表示输出,会覆盖文件原有的内容>>
表示追加,会将内容追加到已有文件夹的末尾
4.7 管道 |
- Linux 允许将一个命令的输出通过管道作为另一个命令的输入
- 可以理解为现实生活中的管子,
|
分左右两端,左端塞东西(写),右端取东西(读)
常用的管道命令有:
more
:分屏显示内容grep
:在命令执行结果的基础上查询指定的文本
5 远程管理常用命令
序号 | 命令 | 对应英文 | 作用 |
---|---|---|---|
01 | shutdown 选项 时间 | shutdown | 关机/重新启动 |
02 | ifconfig | configure a network interface | 查看/配置计算机当前的网卡配置信息 |
03 | ping ip地址 | ping | 检测目标ip 地址的链接是否正常 |
04 | ssh 用户名@ip | secure shell | 关机/重新启动 |
05 | scp 用户名@ip:文件名或路径 | secure copy | 远程复制文件 |
5.1 shutdown 命令
选项 | 含义 |
---|---|
-r | 重新启动 |
- 不指定选项和参数,默认表示1分钟后关闭电脑
- 远程维护服务器时,最好不要关闭系统,而应该重新启动系统
- 常用命令示例:
重新启动操作系统,其中now 表示现在: shutdown -r now 系统立刻关机: shutdown now 系统在今天的20:25会关机: shutdown 20:25 系统再过10分钟后自动关机: shutdown +10 取消之前指定的关机计划: shutdown -c |
5.2 ifconfig 命令
查看网卡对应的IP 地址:
ifconfig | grep inet |
一台计算机可能会有一个物理网卡和多个虚拟网卡,在Linux 中物理网卡的名字通常以
ensXX
表示
- 127.0.0.1 被称为本地回环/环回地址,一般用来测试本机网卡是否正常
5.4 ping 命令
检测到目标主机是否连接正常: ping IP地址 检测本地网卡是否工作正常: ping 127.0.0.1 |
ping
一般用于检测当前计算机到目标计算机之间的网络是否通畅,数值越大,速度越慢
ping
的工作原理与潜水艇的声呐类似,ping
这个命令就是取自声呐的声音- 网络管理员之间也常将
ping
用作动词——ping一下计算机x,看它是否开着
5.5 ssh 基础(重点)
在Linux 中 SSH 是非常常用的工具,通过SSH 客户端我们可以连接到运行了SSH 服务器的远程机器上
- SSH 客户端是一种使用
Secure Shell(SSH)
协议连接到远程计算机的软件程序 - SSH 是目前比较可靠,专为远程登录会话和其他网络服务提供安全协议
- 利用SSH 协议可以有效防止远程管理过程中的信息泄露
- 通过SSH 协议可以对所有传输数据进行加密,也能够防止DNS 欺骗和IP 欺骗
- SSH 的另一项优点是传输的数据可以是经过压缩的,所以可以加快传输的速度
- 常见服务器端口号列表:
序号 | 服务 | 端口号 |
---|---|---|
01 | SSH 服务器 | 22 |
02 | Web 服务器 | 80 |
03 | HTTPS | 443 |
04 | FTP 服务器 | 21 |
ssh 命令使用示例:
ssh [-p port] user@remote |
user
是在远程机器上的用户名,如果不指定的话默认为当前用户remote
是远程机器的地质,可以是IP/域名,或者是别名port
是SSH Sever 监听的端口,如果不指定,就为默认值22
Windows 下SSH 客户端的安装
使用Putty 工具登录远程主机
打开Putty 输入IP,也可以保存设置方便下次登录:
开始会有警告信息,先不用理睬。
下面在弹出框中输入账户和密码回车登录:
- 使用完毕可采用下面几种方法登出:
- 直接关闭终端
- 输入
logout
命令退出 - 输入
exit
命令退出 - 使用
ctrl
+D
退出
pscp 工具传输文件
使用pscp 工具可以向主机传输文件:
从cmd命令行进入Putty 安装目录:
类似于Linux 系统的
scp
命令,可以直接拷贝Windows 上的文件到Linux 服务器中:这里username是账户名称,ip是主机IP 地址,后面跟上的是目标文件夹
也可以将Linux 服务器上的文件转移到Windows 上,参考下面
scp
命令的使用方法进行操作^2
问题及解决
在连接Ubuntu 系统时可能出现问题,按照如下步骤进行排查(Windows 系统,VBox 虚拟机):
在cmd 中执行ping 命令,看是否连接上Ubuntu 系统,若失败,则尝试以桥接模式开启网卡2:
重启系统,连接成功即可进行下面排查
如果使用Putty 连接提示connection refused,考虑未开启ssh-server,在Ubuntu 中键入命令如下:
sudo apt-get install openssh-server 接下来检查ssh-server 是否正确启动:
ps -e | grep ssh 若显示既有ssh-agent 又有sshd 说明服务已经启动,可以用putty 连接Ubuntu系统了
若以上方法都不行,尝试整一下防火墙^1:
开启防火墙:
sudo ufw enable
开启22号端口:
sudo ufw allow 22
重启防火墙:
sudo ufw reload
查看状态:
sudo ufw status检查ssh 服务是否启动:
ssh localhost
SSH 高级
- 免密码登录
配置公钥
- 执行
ssh-keygen
即可生成SSH 钥匙,一路回车即可
- 执行
上传公钥到服务器
- 执行
ssh-copy-id -p port user@remote
,可以让远程服务器记住我们的公钥
示意图
- 执行
有关SSH 配置的信息都保存在用户家目录下的
.ssh
目录下
配置别名
每次都输入
ssh -p port user@remote
,时间久了会很麻烦,而且不好记忆配置别名可以进一步偷懒,譬如用:
ssh windows
来替代上面内容,那么就在~/.ssh/config 里面追加以下内容:Host windows
HostName ip地址
User [username]
Port 22保存之后,即可用
ssh mac
实现远程登录了,scp
同样可以使用
5.6 scp 命令
- scp 就是
secure copy
,是一个在Linux下用来进行远程拷贝文件的命令 - 它的地址格式与ssh 基本相同,需要注意的是,在指定端口时用的是大写的
-P
而非小写
把本地当前目录下的 01.py 文件复制到远程家目录下的 Desktop/01.py: 注意:':'后面的路径如果不是绝对路径,则以用户家目录作为参照路径 scp -P port 01.py user@remote:Desktop/01.py 把远程家目录下的 Desktop/01.py 文件复制到本地当前目录下的 01.py: scp -P port user@remote:Desktop/01.py 01.py 加上 -r 选项可以传送文件夹 把当前目录下的 demo 文件夹复制到远程家目录下的 Desktop: scp -r demo user@remote:Desktop 把远程家目录下的 Desktop 复制到当前目录下的 demo 文件夹: scp -r user@remote:Desktop demo |
scp
这个终端命令一般在Linux 或者Unix 系统下使用如果在Windows 系统中,可以安装putty,使用
pscp
命令行工具或者安装FileZilla
使用FTP 进行文件传输如果Windows 下的路径存在中文,则会导致
scp
命令复制失败,原因未明FileZilla
官方网站:https://www.filezilla.cn/download/client
FileZilla
在传输文件时,使用的是FTP 服务而不是SSH 服务。因此端口号应该设置为21
6 用户权限相关命令
6.1 用户和权限的基本概念
基本概念
用户是Linux 系统工作中重要的一环,用户管理包括用户与组管理
在Linux系统中,不论是由本机或是远程登录系统,每个系统都必须拥有一个账号,并且针对不同的系统资源拥有不同的使用权限
在Linux中,可以指定每一个用户针对不同文件或者目录的不同权限
对文件/目录的权限包括:
序号 权限 英文 缩写 数字代号 01 读 read r 4 02 写 write w 2 03 执行 excute x 1 在实际应用中,可以预先针对组设置好权限,然后将不同的用户添加到对应的组中,从而不用依次为每一个用户设置权限
6.2 ls-l 用户权限信息解释
ls -l
查看的文件详细信息从左到右为:- 权限(第一个字符如果是d 表示目录)
- 硬连接数(通俗的讲,就是有多少种方式,可以访问到当前的目录/文件)
- 拥有者(家目录下文件/目录的拥有者通常都是当前用户)
- 组(很多时候会出现组名和用户名相同的情况)
- 大小
- 时间
- 名称
6.3 修改文件权限
序号 | 命令 | 作用 |
---|---|---|
01 | chown | 修改拥有者 |
02 | chgrp | 修改组 |
03 | chmod | 修改权限 |
chmod 命令
chmod
可以修改用户/组对文件/目录的权限命令格式如下:
直接修改文件|目录的 读|写|执行 权限,但是不能精确到 拥有者|组|其他:
chmod +/-rwx 文件名|目录名
递归修改文件权限,三个数字分别对应拥有者|组|其他 用户的权限:
chomod -R 755 文件名|目录名
6.4 超级用户
- Linux 系统中的
root
账号通常用于系统的维护和管理,对操作系统的所有资源具有所有访问权限 - 在大多数版本Linux 系统中,都不推荐直接使用root 账号登录系统
- 在Linux 安装的过程中,系统会自动创建一个用户账号,而这个默认的用户就称为“标准用户”
sudo 命令
su
是substitute user 的缩写,表示使用另一个用户的身份sudo
命令用来以其他身份来执行命令,预设的身份为root
用户使用
sudo
时,必须先输入密码,之后有5分钟的有效期限,超过期限则必须重新输入密码
若未经授权的用户企图使用
sudo
,则会发出警告邮件给管理员
7 组管理终端命令
创建组/删除组的终端命令都需要通过
sudo
执行
序号 | 命令 | 作用 |
---|---|---|
01 | groupadd 组名 | 添加组 |
02 | groupdel 组名 | 删除组 |
03 | cat /etc/group | 确认组信息 |
04 | chgrp -R 组名 文件/目录名 | 递归修改文件/目录的所属组 |
- 组信息保存在
/etc/group
文件中/etc
目录是专门用来保存系统配置信息的目录- 在实际应用中,可以预先针对组设置好权限,然后将不同的用户添加到对应的组中,从而不用依次为每个用户设置权限
8 用户管理终端命令
8.1 创建用户/设置密码/删除用户
序号 | 命令 | 作用 | 说明 |
---|---|---|---|
01 | useradd -m -g 组名 新建用户名 | 添加新用户 | -m 自动建立家目录 -g 指定用户所在的组,否则会建立一个和用户同名的组 |
02 | passwd 用户名 | 设置用户密码 | 如果是普通用户,直接用passwd 可以修改自己的密码 |
03 | userdel -r 用户名 | 删除用户 | -r 选项会自动删除用户家目录 |
04 | cat/etc/passwd | grep 用户名 | 确认用户信息 | 新建用户后。用户信息会保存在/etc/passwd 文件中 |
- 创建用户时,如果忘记
-m
选项指定新用户的家目录,最简单的方法是删除用户重新创建。- 创建用户时,默认会创建一个和用户名同名的组名
- 用户信息保存在
/etc/passwd
文件中
8.2 查看用户信息
序号 | 命令 | 作用 |
---|---|---|
01 | id [用户名] | 查看用户UID 和GID 信息 |
02 | who | 查看当前所有登录的用户列表 |
03 | whoami | 查看当前登录用户的账户名 |
passwd 文件
etc/passwd
文件存放的是用户信息,由6个分号组成的7个信息,分别是:
- 用户名
- 密码(x,表示加密的密码)
- UID(用户标识)
- GID(组标识)
- 用户全名或本地账号
- 家目录
- 登录使用的Shell,就是登陆之后,使用终端命令,Ubuntu 默认是
dash
usermod 命令
usermod
可以用来设置用户的主组/附加组和登录Shell,命令格式如下:- 主组:通常在新建用户时指定,在
etc/passwd
的第四列GID 对应的组 - 附加组:在
etc/group
中最后一列表示该组的用户列表,用于指定用户的附加权限
设置用户的附加组之后,需要重新登录才能生效
修改用户的主组(passwd 中的GID): usermod -g 组 用户名 修改用户的附加组: usermod -G 组 用户名 修改用户登录 Shell: usermod -s /bin/bash |
默认使用
useradd
添加的用户是没有权限使用sudo
以root
身份执行命令的,可以使用一下命令,将用户添加到sudo
附加组中
usermod -G sudo 用户名 |
which 命令
/etc/passwd
是用于保存用户信息的文件
/usr/bin/passwd
是用于修改用户密码的程序
which
命令可以查看执行命令所在位置,例如:
which is 输出: /bin/ls which useradd 输出: /usr/sbin/useradd |
bin 和sbin
- 在Linux 中,绝大多数可执行文件都是保存在
/bin
、/sbin
、/usr/bin
、usr/sbin
/bin
(binary)是二进制执行文件目录,主要用于具体应用/sbin
(system binary)是系统管理员专用的二进制代码存放目录,主要用于系统管理/usr/bin
(user commands for applications)后期安装的一些软件/usr/sbin
(super user commands for application)超级用户的一些管理程序
cd
这个终端命令是内置在系统内核中的,没有独立的文件,因此用which
无法找到cd
命令位的置
8.3 切换用户
序号 | 命令 | 作用 | 说明 |
---|---|---|---|
01 | su -用户名 | 切换用户,并且切换目录 | -可以切换到用户目录,否则保持不变 |
02 | exit | 退出当前登录账户 | 会返回上一次调用su命令的用户 |
su
不接用户名,可以切换到root
,但是不推荐使用,因为不安全
9 系统信息相关命令
9.1 时间和日期
序号 | 命令 | 日期 |
---|---|---|
01 | date | 查看系统时间 |
02 | cal | calender 查看日历,-y 选项可以查看一年的日历 |
9.2 磁盘信息
序号 | 命令 | 作用 |
---|---|---|
01 | df -h | disk free 显示磁盘剩余空间 |
02 | du -h [目录名] | disk usage 显示目录下的文件大小 |
-h
以人性化的方式显示文件大小
9.3 进程信息
序号 | 命令 | 作用 |
---|---|---|
01 | ps aux | process status 查看进程的详细状况 |
02 | top | 动态显示运行中的进程并且排序 |
03 | kill [-9] 进程代号 | 终止制定代号的进程,-9 表示强行终止 |
ps
选项控制:
选项 | 含义 |
---|---|
a | 显示终端上的所有进程,包括其他用户的进程 |
u | 显示进程的详细状态 |
x | 显示没有控制终端的进程 |
ps
默认只会显示当前用户通过终端启动的应用程序- 要退出
top
可以直接输入q
- 使用
kill
命令时,最好只终止由当前用户开启的进程,而不要终止root
身份开启的进程,否则可能导致系统崩溃
10 其他命令
10.1 find 命令
序号 | 命令 | 作用 |
---|---|---|
01 | find [路径] -name “*.py” | 查找指定路径下扩展名是.py 的文件,包括子目录 |
- 如果省略路径,表示在当前文件夹下查找
- 之前学习的通配符,在使用
find
命令时同时可用
10.2 ln 命令
序号 | 命令 | 作用 |
---|---|---|
01 | ln -s 被连接的源文件 链接文件 | 类似于Windows创建快捷方式 |
- 没有
-s
选项建立的是一个硬链接文件。两个文件占用相同大小的硬盘空间,工作中几乎不会建立文件的硬链接- 源文件要使用绝对路径,不能使用相对路径,这样可以方便移动连接文件,仍能够正常使用
10.3 tar 命令
tar
是 Linux 中最常用的备份工具,此命令可以把一系列文件打包到一个大文件中,也可以吧一个打包的大文件恢复成一系列文件命令格式如下:
打包文件:
tar -cvf 打包文件.tar 被打包的文件/路径...
解包文件:
tar -xvf 打包文件.tar
tar
选项说明:
选项 | 含义 |
---|---|
c | 生成档案文件,创建打包文件 |
x | 解开档案文件 |
v | 列出归档解档的详细过程,显示进度 |
f | 指定档案文件名称,f 后面一定是.tar 文件,所以必须放选项最后 |
10.4 gzip 命令
tar
与gzip
命令结合可以实现文件打包和压缩tar
只负责打包文件,但不压缩- 用
gzip
压缩tar
打包后的文件,其扩展名一般用xxx.tar.gz
在
tar
命令中有一个选项-z 可以调用gzip
,从而可以方便实现压缩和解压缩的功能命令格式如下:
压缩文件:
tar -zcvf 打包文件.tar.gz 被压缩的文件/路径...
解压缩文件:
tar -zxvf 打包文件.tar.gz
解压缩到制定路径:
tar -zxvf 打包文件.tar.gz -C 目标路径
使用-C 选项时,要解压缩的目录必须存在
10.5 bzip(two) 命令
tar
与bzip2
命令结合可以实现与gzip
命令相同的功能- 用
bzip2
压缩tar
打包后的文件,其扩展名一般用xxx.tar.bz2
- 用
在
tar
命令中只有一个选项-j可以调用bzip2
,从而可以方便实现压缩和解压缩的功能命令格式如下:
压缩文件:
tar -jcvf 打包文件.tar.bz2 被压缩的文件/路径...
解压缩文件:
tar -jxvf 打包文件.tar.bz2
10.6 apt 命令
apt
是Advanced Packing Tool,是Linux 下的一款安装包管理工具可以在终端方便的安装/卸载/更新软件包
命令格式如下:
安装软件:
sudo apt install 软件包
卸载软件:
sudo apt remove 软件名
更新已安装的包:
sudo apt upgrade
5 查询命令帮助
5.1 –help
command --help |
说明:
- 显示
command
命令的帮助信息
5.2 man
man command |
说明:
- 查询
command
命令的使用手册
man
是manual的缩写,是Linux 提供的一个手册,包含了绝大部分的命令、函数的详细使用说明
操作键 | 功能 |
---|---|
空格键 | 显示手册页的下一屏 |
Enter键 | 一次滚动手册页的一行 |
b | 回滚一屏 |
f | 前滚一屏 |
q | 退出 |
/word | 搜索word 字符串 |
6 终端快捷键
6.1 自动补全
- 在敲出
文件
/目录
/命令
的前几个字母后,按下tab
键:- 如果无歧义,系统会自动补全
- 如果存在其他
文件
/目录
/命令
,再按一下tab
键,系统会提示可能存在的命令
6.2 曾经使用过的命令
- 按
上
/下
光标键可以在曾经使用过的命令之间来回切换 - 如果想要退出选择,并不想执行当前选中的命令,可以按
ctrl
+c
87