赞
踩
文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州
⚪ 了解Linux的网络相关设备和网络结构、远程拷贝和远程登录、SSH免密登录;
⚪ 了解Linux的进程管理和任务管理、系统资源监控;
⚪ 掌握Linux的自带下载工具;
⚪ 掌握Linux的VIM文本编辑器;
OSI七层网络模型 | TCP/IP四层 概念模型 | 对应网络协议 |
应用层(Application) | HTTP、TFTP, FTP, NFS, WAIS、 | |
表示层(Presentation) | 应用层 | Telnet, Rlogin, SNMP, Gopher |
会话层(Session) | SMTP, DNS | |
传输层(Transport) | 传输层 | TCP, UDP |
网络层(Network) | 网络层 | IP, ICMP, ARP, RARP, AKP, UUCP |
数据链路层(Data Link) | 数据链路层 | FDDI, Ethernet, Arpanet, PDN, SLIP, PPP |
物理层(Physical) | IEEE 802.1A, IEEE 802.2到IEEE 802.11 |
1 OSI引入了服务、接口、协议、分层的概念,TCP/IP借鉴了OSI的这些概念建立TCP/IP模型。
2 OSI先有模型,后有协议,先有标准,后进行实践;而TCP/IP则相反,先有协议和应用再提出了模型,且是参照的OSI模型。
3 OSI是一种理论下的模型,而TCP/IP已被广泛使用,成为网络互联事实上的标准。
由来,早期的时候并没有这个设备,当时使用HUB设备进行数据的发送,但是HUB发送数据的特性广播,这样的方式,数据不安全,增加网路带宽的消耗。
交换的工作原理,通电之后,在自己的内部建立一张设备Mac地址表。这张表中记录了设备的Mac地址或其他的信息。
交换机可以组建局域网(内网)。
(实现网络代理的功能,在公共网络上,上网的节点是路由器,并不是电脑。)
将局域网中的数据转发至公共网络(外网)。
早期上网的方式是,通过电话线插入电脑上,进行拨号上网。此方式的缺点。
1、电话一直占线。
2、有可能电话进来,掉线。
通信公司发现这样的缺点之后,出现了一个新的设备,这个设备的功能可以将电话线路一分为二。分别实现电话、上网的功能。调制解调器(猫)。
随着社会的发展,发现这种方式又不能满足日常的上网需求。一个猫只有一个接口,无法满足多台设备上网的需求的。
将多台设备接入交换,交换机的其中一个接口连接路由器。
连接顺序:猫上出的网线接入路由器的WAN口,路由器的LAN口接入交换机。
无线设备。大约在2008年,家用无线路由器开始普及。
无线路由器是将交换机和有线路由器和在一起产品。
IP地址 | PC在网络中的通信地址。 |
子网掩码 | 子网掩码有且只有这一个功能,用于划分网络,将一个IP地址中的网络位和主机位进行划分。是一个32位的地址。 |
网关 | 网络的关口,用于数据转发,通常理解为路由器的地址,大部分硬件厂家的出厂默认地址是,192.168.0.1 | 192.168.1.1 |
DNS | 用于解析域名的作用,Domain Name System 域名解析系统。 |
IP地址分析
IP地址=网络位+主机位
相同的网络,网络位肯定相同,主机位不一样
不同的网络,网络位肯定不同,主机位可能一样
比如:电话号码:网络-主机
• 北京:010-88889999
• 上海:021-12345678
• ——:021-88889999
在网络中,一般来说.0这个IP被用来当作网段的标识。255这个IP被用来当作广播地址使用,正常使用的IP范围中,其中一个IP地址要被拿来当作网关(路由器)使用。
一个网络中有多少个IP地址,取决于子网掩码。
比如:家用网络中,一般都是
• 192.168.1.2-254
• 255.255.255.0
• 192.168.1.1
其中,192.168.1.2-254为主机IP地址。255.255.255.0子网掩码(用于划分网络,子网掩码可以计算IP地址的数量。)。
• 192.168.1.1作为网关使用。
• 192.168.1.0用来表示网段。
公司建立机房,决定投资建设10000台服务器的机房,那么设计网络时,掩码应该如何设计,网关应该如何设计。
16位掩码有效IP地址65534个。完全可以满足10000台服务器的需求。
网关建议大家紧贴广播地址。当前这个网络中,网关地址是192.168.255.254。
• 静态:
优点 | 可以使我们PC/服务器有一个更快的解析速度。维护方式是手动配置服务器上hosts文件。 |
缺点 | hosts一般都是为本机系统所有,维护一台服务器还好说。如果是上千台集群,那么维护的工作很困难 |
• 动态:
优点 | 只需要给服务器指明DNS服务器地址即可,无需手动配置hosts文件 |
缺点 | 有一定响应时间,(延迟)。若DNS服务器宕机,那么我们就立即失去访问域名的能力。 |
优点: | 同一个局域网中的任意一台物理机想要访问虚拟机时,只要拥有账户和密码,就可以直接进行通信。 |
缺点: | 如果宿主主机没有连接网络,那么虚拟机也就不存在与该真实网络环境中,换句话,虚拟机使用桥接模式的时候,它的网络依赖于宿主的网络环境。会占用真实的ip |
优点: | 可以无视物理机(宿主主机)网络环境。即便是物理机没有网络,也不影响本机和虚拟机进行通信,也不影响本机上的其他虚拟机之间互相通信。因为虚拟机真正通信网卡是VMNet8提供(网络环境) |
缺点: | 其他物理机想要访问NAT模式下的虚拟机时,比较麻烦。需要做端口的转发 |
方式一:临时修改
hostname demo02
方式二:永久修改(重启服务器生效)
编辑/etc/hostname文件进行修改
从本机拷贝数据到远程的服务器上
要求:必须知道对方的账户和密码,且具备相应的权限。
语法:scp [-r] [path]/fie | dir {UserName}@Host_IP:/[path]
-r | 该选项用于传输文件夹的时候使用。 |
案例:
将本机的文件拷贝到远程服务器上
# bash
scp /root/install.log root@192.168.89.128:/home
注意, 如果是第一次访问该服务器,那么会询问,是否要继续连接。每次访问都需要输入远程服务器的密码。
从远程服务器上拷贝数据到本机:
要求:必须知道对方的账户和密码,且具备相应的权限。
语法:scp {UserName}@Host_IP:/[path]/file /[path]
案例:
将远程服务器中/home目录下的install.log拷贝到本地的root目录下
# bash
scp root@192.168.89.128:/home/install.log /root
语法:ssh {UserName}@Host_IP
回车之后,如果首次访问,会提示是否继续连接。接下来要求输入远程服务器的密码。
案例:
# bash
ssh root@192.168.89.128
如果想退出当前登录
# bash
exit
Linux系统下,ssh服务的默认端口是22。如果在访问是没有指明端口,默认按照22端口访问,如果远程服务器,提供的端口不是22,那么就需要在访问的时候指定远程服务器的端口:
# bash
ssh [-p port] {UserName}@Host_IP
如果想要通过主机名来进行远程登录或者远程拷贝。需要配置/etc/hosts文件,将虚拟机ip和主机名进行一一映射
Linux免密登录使用的RSA算法。
RSA本身是一种非对称加密算法,会生成公钥和私钥。
公钥 | 使用公钥对内容进行加密 | 天王盖地虎 |
私钥 | 持有私钥的PC才能正常访问公钥加密的内容 | 宝塔镇河妖 |
只要持有私钥就能访问公钥加密的内容,这种事情本身就是存在风险的。一旦私钥丢失,那么服务器上的数据就存在被窃取的风险。
但是Linux生成公钥和私钥的时候支持对私钥证书文件添加密码。
场景一:只是单纯的使用证书来登录服务器。
使用证书的登录方式可以避免密码遗忘、泄漏的问题。
使用证书登录服务器的方式也是服务器加固(服务器安全相关问题)的方式。
服务器可以设置不允许使用密码进行远程登录。只允许证书的方式登录。
证书本身支持加密,就算证书丢失,再不知道证书密码的情况,证书属于无效文件。
场景二:集群中使用证书进行免密登录。
因为但凡设计到集群的时候,一般都不会是小数目的服务器数量。众多的服务器之间进行互相访问,频繁的输入密码的事情将会成为开发工程师噩梦。
所以,使用证书管理集群的时候,可以免除集群中的服务器互相访问时工程师手工输入密码的问题。
# bash
ssh-keygen
第一次提示:你的证书文件存放位置
第二次提示:对私钥加密,输入密码。如果不需要输入密码,直接回车。
第三次提示:私钥证书的密码确认操作。
证书文件会存放在当前账户的家目录下的隐藏目录".ssh"目录下,在该目录下会有以下4个文件:
id_rsa | 私钥 | 执行证书生成命令才会有 |
id_rsa.pub | 公钥 | 执行证书生成命令才会有 |
known_hosts | 曾经访问过的服务器信息 | 每次ssh、scp、ssh-copy-id到远程服务器时就会保存记录到此文件中,以后再此访问该服务器时就不会再提示那一句"你确定要继续访问吗 yes/NO?" |
authorized_keys | 记录来访服务器的公钥文件内容 | 该文件会记录访问本机的远程服务器的公钥证书文件内容,只有对应的私钥才能进行验证。 |
将本机的公钥证书文件注册到远程服务器上,此后就可以使用私钥证书进行登录。
# bash
ssh-copy-id {UserName}@Host_IP
执行此命令,会要求输入远程服务器的对应账户的密码。
这一步就是向远程服务器注册本机的id_rsa.pub文件(公钥)内容。此后只有本机上与公钥文件共同生成的私钥才能够进行免密登录。
用于从网络上下载资源,没有指定目录,下载资源默认存储到当前目录。
wget [参数] [URL地址]
–支持断点下载功能
–同时支持FTP和HTTP下载方式
–支持代理服务器
• 使用wget下载单个文件
wget http://www.tedu.cn
• 使用wget -O下载并以不同的文件名保存
wget -O NewName.new http://www.tedu.cn
• 使用wget --limit-rate限速下载(单位,byte/秒)
wget --limit-rate=300k http://mirrors.hust.edu.cn/apache/httpd/httpd-2.2.34.tar.bz2
• 使用wget -b后台下载
wget -b http://mirrors.hust.edu.cn/apache//httpd/mod_fcgid/mod_fcgid-2.3.9.tar.gz
wget http://mirrors.hust.edu.cn/apache//httpd/mod_fcgid/mod_fcgid-2.3.9.tar.gz
• 使用wget -i下载多个文件
wget -i urlfile.txt # urifile文件名称仅仅为了见名知意。
urlfile.txt内容为 http://big.tedu.cn/index.html
进程通俗来说,运行中的程序。
在linux下,知道程序要运行,首先就是将磁盘中相应的可执行文件加载到内存中,那么我们怎么知道他在内存中哪呢?这个时候就需要我们通过一个叫做进程标识符的东西找到它。类似于我们自己的身份证。
进程分为临时进程和持久进程。
临时进程 | 执行完命令,自动结束 |
持久进程 | 程序运行后,需要手动结束。 |
1、用户执行程序。
2、程序加载到内存中。
2.1、给程序一个临时的pid。
2.2、查看执行的权限,如果用户没有执行权限,那么拒绝操作,如果有,开始加载程序执行的相关资料。
2.3、确认临时的PID。
在Linux系统中,不像windows那样方便,可以通过快捷键调出图形化的任务管理器来管理进程。
静态查询:
• ps:
将某个时间点的程序运作情况截取下来
常用组合选项 -aux
a | 关联的所有 process,通常与x一起使用,列出完整信息。 |
x | 后台进程 |
u | 有效使用者的相关联的进程 |
ajxf | 可以让ps的结果以树状的格式显示出来。 |
举例:当我们新开一个通道编辑一个文件的时候,我们通过ps -aux可以查看到。
查询特定进程用
ps -aux | grep sshd #查询sshd服务
ps查询结果各项解释:
USER | 用户 |
PID | 进程ID |
%CPU | cpu占用率 |
%MEM | 内存使用率 |
VSS | 虚拟内存使用量 |
RSS | 物理内存使用量 |
TTY | tty1-tty6 是本机上面的登入者程序。 pts/0 等等的,则表示为由网络连接进主机的程序。 如果显示?则表示与终端机无关。 |
STAT | 进程的状态 |
START | 进程启动的时间 |
TIME | 累计消耗CPU的时间 |
COMMAND | 表示哪个命令/程序运行的该进程 |
状态标识:
R | 正在运行,或在队列中的进程 |
S | 处于休眠状态 |
l | 多进程 |
Z | 僵尸进程 |
T | 停止或者被追踪 |
< | 高优先级 |
N | 低优先级 |
s | 包含子进程 |
+ | 位于后台的进程组 |
僵尸进程:
由于该进程已经执行完毕,但是父进程没有终止或其他原因导致该进程并没有真正的结束,所形成的进程称之为僵尸进程。
此进程对服务器的危害在于它会持续的消耗服务器资源,消耗量会越来越大。最终导致其他的进程无资源可用,服务器崩溃。
• pstree:
选项:
A | 各程序之间的连接以ASCII字符来连接 |
U | 各程序之间的连接以UTF-8的字符来连接 |
u | 列出每个process的所属账号名称 |
p | 同时列出每个程序的进程的ID |
举例:
#bash
pstree -up
注:使用哪个账户运行此命令,那么与其相关的进程则不会显示用户名
动态查询:
• top:
动态查询系统的进程状态。默认是3秒一更新。
选项:
-d | 跟时间,可以修改top默认更新(刷新)的时间 |
-b : | 以批次的方式执行 top ,还有更多的参数可以使用,通常会搭配数据流 重导向来将批次的结果输出成为档案; |
-n Number: | 与 -b 搭配,意义是需要进行几次 top 的输出结果; |
-p : | 指定某些个 PID 来进行观察监测而已; |
案例:
每秒刷新一次top
# bash
top -d 1
每2秒刷新一次top,以批次输出2次。
#bash
top -d 2 -n 2
每秒刷新一次top,以批次输出5次。
# bash
top -d 1 -b -n 5 >> top.log
# >>表示以追加的方式输出,>表示以覆盖的方式输出
交互式按键:(并不常用)
? : | 显示在 top 当中可以输入的按键指令 |
P : | 以CPU的使用资源排序显示 |
M : | 以Memory的使用资源排序显示 |
N : | 以PID来排序 |
T : | 由该Process使用的CPU时间累积 (TIME+) 排序 |
q : | 离开top软件的按键 |
单进程的管理:
kill:结束某个进程
语法:kill 信号量 PID
信号量:
-15: | 以正常的程序方式终止一个进程!!! |
-9 : | 立刻强制终止一个进程!!!(!!不能强制结束系统级别的进程) |
-2 : | 代表由键盘输入 [ctrl] + c 同样的动作; |
-1 : | 对于sshd这样的守护进程,重新读取一次参数的配置文件 (类似 reload),如果进程为非守护进程,默认为终止进程; !! |
多进程的管理:
killall:结束基于某个程序运行进程。
语法:killall 信号量 程序名/命令名
信号量:
-15: | 以正常的程序方式终止一个进程!!! |
-9 : | 立刻强制终止一个进程!!!(!!不能强制结束系统级别的进程) |
-2 : | 代表由键盘输入 [ctrl] + c 同样的动作; |
-1 : | 对于sshd这样的守护进程,重新读取一次参数的配置文件 (类似 reload),如果进程为非守护进程,默认为终止进程; !! |
案例:
结束所有httpd的进程(如果没有可以先安装一下yum install -y httpd)
# bash
killall -9 httpd
结束所有java的进程
# bash
killall -9 java
选项:
-b | bytes |
-k | kb |
-m | mb |
-g | gb |
-t | 统计总量 |
free -m
free -mt
在真实的公司中有第三方,甚至公司自己开发的监控工具。不属于我们负责。
选项:
-a | 将目前系统上所有的已经连接、监听、Socket数据都列出来 |
-t | 列出tcp网络包的信息 |
-u | 列出udp网络包的信息 |
-n | 以端口(port number)方式来显示(不以程序的服务名称) |
-l | 列出目前正在监听(listen)的服务; |
-p | 列出该网络服务的进程id(PID)、程序名 |
案例:
列出当前系统中正在监听的TCP服务。
# bash
netstat -lt
列出当前系统中正在监听的TCP服务,并且显示进程ID。
# bash
netstat -ltp
列出当前系统中正在监听的TCP服务,并且显示进程ID、端口号。
# bash
netstat -lntp
列出当前系统中已连接的TCP服务,并显示进程ID、端口号。
# bash
netstat -tnp
监听udp一般监听不出来
各项含义:
Proto | 协议名 |
Recv-Q | 接收消息缓冲区 |
Send-Q | 发送消息缓冲区 |
Local Address | 本地地址和端口号 |
Foreign Address | 远程地址和端口号 |
State | 状态。连接、监听 |
PID/Program name | 进程ID和程序名 |
统计目前主机CPU状态,每秒一次,共计四次
[root@tedu ~]# vmstat 1 4
• procs(进程字段 )
r : | 等待运行的进程数量; cup处理不过来 |
b: | 不可被唤醒的进程数量 |
这两个项目越多,代表系统越忙碌 (因为系统太忙,所以很多进程就无法被执行或一直在等待而无法被唤醒)
• memory (内存字段)
swpd: | 虚拟内存被使用的容量; |
free: | 未被使用的内存容量; |
buff/cache: | 用于缓冲的内存; |
• swap(交换分区字段) (重点记忆下si和so)
si: | 每秒从交换分区写到内存的数据量大小,由磁盘->内存; |
so: | 每秒写入交换分区的内存数据量大小,由内存->磁盘。 |
如果si/so的数值太大,表示内存内的数据常常得在磁盘与主存储器之间传来传去,系统效能会很差。
• io(磁盘读写字段)
bi: | 从块设备读入数据的总量(读磁盘)(每秒kb); |
bo: | 从块设备写入数据的总量(写磁盘)(每秒kb)。 |
如果这部份的值越高,代表系统的I/O非常忙碌
• system(系统字段 )
in: | 每秒被中断的进程次数; 发生在cup争抢的过程中 |
cs: | 每秒钟进行的事件切换次数。发生在cup争抢的过程中 |
这两个数值越大,代表系统与接口设备的通信非常频繁
• CPU (cpu字段)
us: | (user)非内核态的(用户进程) CPU 使用情况; |
sy: | (system)内核态所使用(系统进程)的 CPU 情况; |
id: | (idle )闲置的CPU情况; |
wa: | (wait)等待I/O所耗费的CPU; |
st: | 被虚拟机(virtual machine)所盗用的CPU(2.6.11 以后才支持) |
它具备一定的防护功能,比如说端口的开放和禁止,也可做数据的转发(类似路由功能),策略及其他功能。
临时处理防火墙:如果系统重启,那么防火墙将恢复到之前的状态。
开启 | systemctl start firewalld |
关闭 | systemctl stop firewalld |
重启 | systemctl restart firewalld |
查看 | systemctl status firewalld |
永久处理防火墙:(需重启系统后才能生效)
开启: | systemctl enable firewalld |
关闭: | systemctl disable firewalld |
前台任务:可以控制与执行命令的bash环境称为前台。
后台任务:在操作系统中自行运行,你无法使用[ctrl]+c终止称为后台。
将前台任务放置后台暂停:
Ctrl + z就可以将前台的任务放置后台
如何运行任务时,使其在后台运行:
在运行命令之前加上"&"
例如:
cp file1 file2 &
不是所有的任务都能够在后台运行的,比如需要与用户进行交互的程序或命令就不允许在后台运行, 比如vi文本编辑器。
用来查看后台任务:
jobs
选项:
-r | 仅查看后台运行的任务 |
-s | 仅查看后台暂停的任务 |
-l | 查看后台的任务,并显示其PID |
如果将后台任务调至前台:
fg命令+jobnumber来把后台任务调至前台。(无论在后台是暂停还是运行)
fg命令不加jobnumber也是可以调后台的任务,但是默认就会调取后台带有+号的那个任务。最后放置后台的任务就会带有+号。
+ | 表示最近一次放置后台的任务 |
案例:
[root@bogon ~]# jobs
[1] Stopped vi 1.txt
[2] Stopped vi 2.txt
[3] Stopped vi 3.txt
调取2号任务:
# bash
fg 2
如何将后台任务修改为运行状态:
bg命令 + jobnumber 可以将后台任务的暂停状态修改为运行状态。(交互式的应用无法修改为运行状态)
bg命令不加jobnumber也是可以调后台的任务,但是默认就会调取后台带有+号的那个任务。(最后放置后台的任务就会带有+号。)
案例:
[root@bogon ~]# jobs
[1] Stopped vi 1.txt
[2] - Stopped vi 2.txt
[3] + Stopped vi 3.txt
修改2号任务的后台状态:
# bash
bg 2
失败案例!!
[root@bogon ~]# bg 2
[2] - vi 2.txt &
[root@bogon ~]#
[2] + Stopped vi 2.txt
[root@bogon ~]#
修改4号任务在后台的工作状态。
# bash
bg
终止job:
jobs -l查询出ID,之后通过kill -9 PID 结束。
是一个类似vi的文本编辑器,不过在vi的基础上增加了很多新特性,vim被公认为类vi编辑器中最好用的一个。
vim在vi的基础之上增加了很多的小功能。可以有效的帮助程序员快速的排查问题。
很多系统都内建vi编辑器,其他的文本编辑器不一定有,很多软件都会主动调用vi的接口。
一般模式、编辑模式、命令模式
三种模式的转换图:
一般模式(默认模式)的快捷键:
• h或←光标左移一个字符。如果是20h,表示左移20个字符。
• j或→光标下移一个字符 同上
• k或↑光标上移一个字符 同上
• l或↓光标右移一个字符 同上
• [Ctrl]+[f]屏幕向下移动一页 Page Down!!
• [Ctrl]+[b]屏幕向上移动一页 Page Up !!
• 0或[Home]移动到此行最前面字符处!!
• $或[End]移到光标所在行的行尾!!
• H 光标移到当前屏幕最上方行的第一个字符!!
• M光标移到当前屏幕中间行的第一个字符!!
• L光标移动到当前屏幕最下方行第一个字符!!
• G移到此文件最后一行!!!
• nG移到第n行
• gg相当于1G,即移到第一行!!!
• n[Enter]光标下移n行
• /word向下查找单词“word”(!!!)
• ?word向上查找单词“word”(!!!)
• n表示重复前一个查找操作
• N与n相反(反向查找)
• yy复制光标所在行(!!)
• nyy复制光标所在向下n行(n为数字)
• y1G复制光标所在行到第一行所有数据
• yG复制光标所在行到最后一行所有数据
• y$复制光标所在处到同行最后一个字符
• y0复制光标所在处到同行第一个字符
• p将已复制的数据粘贴到光标所在下一行
• P将已复制的数据粘贴到光标所在上一行
• u复原前一个操作(类似于windows中的ctrl+z)!!!
• Ctrl+r恢复一个操作。
• x向后删除一个字符
• nx向后删除n个字符(n为数字)
• X向前删除一个字符
• dd删除光标所在行(!!!)
• ndd删除光标所在行以下n行(n为数字,包含当前行在内)
• d1G删除光标所在行到第一行所有数据(包括所在的行)
• dG删除光标所在行到最后一行(!!)
• d$或d end删除光标所在处到同行最后一个字符(!!)
• d0或d home删除光标所在处到同行第一个字符。(!!)
编辑模式:
进入编辑模式:
• i从光标所在处插入(!!!)
• I从所在行第一个非空白字符处插入(!!)
• a从光标所在下一个字符处插入
• A从光标所在行最后一个字符处插入(!!)
• o在光标所在处下一行插入新的一行(!!)
• O在光标所在处上一行插入新的一行(!!)
• r替换光标所在处字符一次
• R一直替换光标所在处文字直到按下Esc(!!!)
命令模式:
如何进入命令模式:
: ? / | 三个符号任意都可以进入命令模式 |
• :w [filename] 另存为filename
• :r [filename] 读取filename指定文件中的内容到光标所在的行。
• :n1,n2 w [filename] 将n1到n2行另存为filename
• :! command 临时切换到命令行模式下执行command命令。
例如 “:!find / -name Helllo.java”即可在vim当中执行命令。
• :wq 保存后离开
• :q 不保存离开(未改可以离开,如果修改了需要q!强制离开)
• :q! 不保存离开
• :set nu 显示行号 (number)
• :set nonu 取消显示行号 (noNumber)
• :s/word1/word2/g 在当前行将word1替换成word2(!!)
• :%s/word1/word2/g 在当前文件将word1替换成word2(!!)
• :n1,n2s/word1/word2/g在n1到n2行查找word1替换成word2 (n1、n2为数字)
• :10,$ s/word1/word2/g从第一行到最后一行查找word1替换成word2
• :%s/word1/word2/gc 同上,在替换前确认是否替换。(!!!)只能单行确认,需要逐个确认。替换为 b (y/n/a/q/l/^E/^Y)?
• y表示yes,n表示no,
• a表示all(限光标当前到最后一行),
• q表示quit,
• l表示替换后移动光标到行首,
• ^E(Ctrl+E)表示向下翻,
• ^y(Ctrl+Y)表示向上翻。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。