LINUX基础第八章:引导过程和服务控制

目录

一.引导过程

1.开机自检BIOS

2.MBR引导

3.GRUB菜单

4.加载Linux内核

5.init进程初始化

6.Centos启动过程总结

7.系统初始化进程

7.1init进程

7.2Systemd

7.2.1Systemd单元类型

7.2.2运行级别所对应的Systemd目标

二.服务控制

1.修复MBR扇区故障

新建磁盘

将备份文件备份到新盘

模拟破坏

​编辑重启Linux系统,进入急救模式

​编辑

​编辑​编辑​编辑进行操作

​编辑查看效果并重启

​编辑总结

2.修复GRUB引导故障

实验操作过程

先模拟破坏grub.cfg配置文件

​编辑重启进入急救模式

先切换根目录

​编辑重新安装grub程序

重新生成配置文件

​编辑退出并重启

总结

3.破解密码

3.1有光驱

3.2无光驱

进入内核界面

​编辑进入单用户模式

​编辑修改密码

重新输入密码登录即可成功

总结

4.系统服务控制

控制类型

服务程序的特点

服务控制命令

Centos6

Centos7

 5.使用Systemd编译安装nginx程序

编译安装

开启Nginx服务并测试

编辑nginx服务项

开启Nginx服务并测试


kernel 实现进程管理、内存管理、网络管理、驱动程序、文件系统、安全功能等功能

内核设计流派

宏内核(monolithic kernel):又称单内核和强内核,Unix,Linux把所有系统服务都放到内核里,所有功能集成于同一个程序,分层实现不同功能,系统庞大复杂,Linux其实在单内核内核实现了模块化,也就相当于吸收了微内核的优点。

微内核(micro kernel):Windows,Solaris,HarmonyOS简化内核功能,在内核之外的用户态尽可能多地实现系统服务,同时加入相互之间的安全保护,每种功能使用一个单独子系统实现,将内核功能移到用户空间,性能差。

一.引导过程

1.开机自检BIOS

服务器主机开机后,根据主板BIOS的设置对cpu、内存、显卡等设备进行基础检测,检测成功后根据预设的启动程序移交系统控制权,大多时候会移交系统控制权,大多时候会移交给本机硬盘。

总结:如果是网络启动的话会开启pxe。

检测硬件是否正常然后根据BIOS中的启动项,去找操作系统

2.MBR引导

当从本机硬盘中启动系统时,首先根据硬盘第一个扇区中 MBR(Master Boot Record, 主引导记录)的设置,将系统控制权传递给包含操作系统引导文件的分区;或者直接根据 MBR 记录中的引导信息调用启动菜单(如 GRUB)

总结:运行放在MBR扇区里的启动 GRUB引导程序

统一启动加载器:MBR、GRUB

因为GRUB太大,在第一个扇区放不下,所以GRUB分为两部分

MBR是指引硬件找到内核文件

3.GRUB菜单

对于 Linux 操作系统来说,GRUB(GRand Unified Bootloader,统一启动加载器)是 使用最为广泛的多系统引导器程序。系统控制权传递给 GRUB 以后,将会显示启动菜单给 用户选择,并根据所选项(或采用默认值)准备加载 Linux 内核文件,然后将系统控制权转交给 内核。需要注意的是,CentOS 7 采用的是 GRUB2 启动引导器。

总结:GRUB引导程序通过读取GRUB配置文件/boot/grub2/grub.cfg,来获取内核和镜像文件系统的设置和路径位置

根据GRUB配置文件(grub.cfg)中记录的位置去找到内核文件(高级语言)

4.加载Linux内核

linux内核是一个预先编译好的内设二进制文件,介于各种硬件资源与系统程序之间,负责资源分配与调度,内核接过系统控制权后转交给内核后,将完全掌握整个linux操作系统的运行过程,在cenos中默认的内核文件放置位置在/boot/vmlinuz-3.10.0-514.el7.x86_64”。

总结:把内核和镜像文件系统加载到内存中 可以使用;把内核运行在内存中

5.init进程初始化

为了完成进一步的系统引导过程,linux内核首先将系统中的“/sbin/init”程序加载到内存运行(运行中的程序称为进程),init进程完成一系列的初始化过程,最后才会让用户登录

总结:加载硬件驱动程序,内核把init进程加载到内存中运行

第一个主进程

6.Centos启动过程总结

Centos7和Centos6的区别

1.普通用户的uid号范围不同

2.系统初始化进程Centos6是init,Centos7是systemd

开机启动的完整总结:

第一步加电后会BIOS程序会自检硬件,硬件无故障后,会根据第一启动项去找内核,一般来说第一启动项是硬盘,找到硬盘后,会根据MBR的指引找到完整的GRUB程序,再根据GRUB的配置文件找到内核文件的具体位置,然后将内核文件加载到内存中运行,内存加载好后会启动第一个程序。

7.系统初始化进程

7.1init进程

由Linux内核加载运行/sbin/init程序

init进程是系统中第一个进程

init进程的PID(进程标记)号永远为1

7.2Systemd

Systemd是Linux操作系统的一种init软件,是系统级程序,代为管理系统上的服务程序

Centos7中采用全新的Systemd启动方式,取代传统的SysVinit

Centos7中运行的第一个init进程是/lib/systemd/systemd

nit是串型启动后续的程序,程序之间有依赖关系,程序按顺序依次启动

systemd是并行启动程序,所有程序一起启动

引入:rpcbind程序如果启动,会监听111端口;如果rpcbind没有启动,systemd会代为监听systemd是保姆级程序,如果是yum或者编译安装的软件,都可以直接使用systemctl命令去启动、关闭、重启、开机自启等功能;但是如果是编译安装的话,需要手写一个配置文件才可以使用systemctl命令去管理程序。

7.2.1Systemd单元类型
单元类型扩展名说明
Service.service描述一个系统服务软件
Socket.socket描述一个进程间通信的套接字
Device.device描述一个内核识别的设备文件
Mount.mount

描述一个文件系统的挂载点

Automount.automount描述一个文件系统的自动挂载点
Swap.swap描述一个内存交换设备或交换文件
Path.path描述一个文件系统中文件或目录
Timer.timer描述一个定时器(用于实现类似cron的调度任务)
Snapshot.snapshot用于保存一个systemd的状态
Scope.scope使用systemd的总线接口以编程的方式创建外部进程
Slice.slice描述居于Cgroup的一组通过层次组织的管理系统进程
Target.target描述一组systemd的单元

Systemd unit(单元)是为了Systemd方便便利程序,将程序按照特定的功能分成了很多单元;其中服务单元最主要的是写配置文件

7.2.2运行级别所对应的Systemd目标
运行级别Systemd的target说明
0target关机状态,使用该级别时将会关闭主机
1rescue.target单用户模式,不需要密码验证即可登录系统,多用于系统维护
2muliti-user.target

用户定义/域特定运行级别。默认等同于3

3muliti-user.target字符界面的完整多用户模式,大多数服务器主机运行在此级别
4muliti-user.target用户定义/域特定运行级别。默认等同于3
5graphical.target图形界面的多用户模式,提供了图形桌面操作环境
6reboot.target重新启动,使用该级别时将会重启主机

runlevel  查看当前运行级别

3代表从哪个级别过来的;5代表当前级别

  • 查看默认运行级别

systemctl get-default

  • 设置默认级别

systemctl set-default

  • 设置混合模式

systemctl set-default multi-user.target

其中,multi-user.target 代表字符界面;graphical.target 代表图形界面

二.服务控制

1.修复MBR扇区故障

故障原因

  • 病毒、木马等造成的破坏
  • 不正确的分区操作、磁盘读写误操作

故障现象

  • 找不到引导程序,启动中断
  • 无法加载操作系统,开机后黑屏

解决思路

  • 应提前做好备份文件
  • 以安装光盘引导进入急救模式
  • 从备份文件中回复

新建磁盘

[root@localhost ~]#fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
 
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
 
Device does not contain a recognized partition table
使用磁盘标识符 0x38fd3e00 创建新的 DOS 磁盘标签。
 
命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
分区号 (1-4,默认 1):
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):
将使用默认值 41943039
分区 1 已设置为 Linux 类型,大小设为 20 GiB
 
命令(输入 m 获取帮助):w
The partition table has been altered!
 
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@localhost ~]#scan
[root@localhost ~]#lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   60G  0 disk 
├─sda1            8:1    0    5G  0 part /boot
└─sda2            8:2    0   54G  0 part 
  ├─centos-root 253:0    0   50G  0 lvm  /
  └─centos-swap 253:1    0    4G  0 lvm  [SWAP]
sdb               8:16   0   20G  0 disk 
└─sdb1            8:17   0   20G  0 part 
sr0              11:0    1  4.2G  0 rom  /run/media/root/CentOS 7 x86_64

将备份文件备份到新盘

模拟破坏

模拟破坏sda磁盘;if=/dev/zero代表不断往sda盘内写0

hexdump -C -n /dev/sda   可以查看输入后的效果

重启Linux系统,进入急救模式

进行操作

查看效果并重启

总结

第一步,新建磁盘,将备份文件备份到新盘

第二步,备份分区表及MBR

dd if=/dev/sda of=/mnt/mbr count=1 bs=512

第三步,模拟破坏

dd if=/dev/zero of=/dev/sda count=1 bs=512

第四步,进入急救模式

重启ESC进入急救模式选择Troubleshooting→Rescue a Centos system→Continue

第五步,新建文件夹、挂载、恢复

mkdir bak

mount /dev/sdb1 bak

dd if=/bak/mbr.bak of=/dev/sda count=1 bs=512

第六步,退出重启

exit→reboot

2.修复GRUB引导故障

故障原因

  • MBR中的GRUB引导程序遭到破坏
  • grub.conf文件丢失,引导配置有误

故障现象

  • 系统引导停滞,显示“grub>”提示符

解决思路

  • 尝试手动输入引导命令
  • 进入急救模式,重写或者从备份中恢复grub.conf
  • 向MBR扇区中重建grub程序

grub只需备份446字节

实验操作过程

进入急救模式与MBR修复一致

先模拟破坏grub.cfg配置文件
重启进入急救模式

与MBR分区抢修一致

先切换根目录

从光盘的根目录切换到当前系统的根

重新安装grub程序

重新生成配置文件
退出并重启

总结

第一步,先模拟破坏grub.cfg配置文件

mv /boot/grub2/grub.cfg /opt

第二步,重启进入急救模式选择Troubleshooting→Rescue a Centos system→Continue

第三步,先切换根目录,从光盘的根切换到当前系统的根

chroot /mnt/sysimage

第四步,重新安装grub程序在sda磁盘

grub2-install /dev/sda

第五步,重新生成配置文件

grub2-mkconfig -o /boot/grub2/grub.cfg

第六步,退出重启

exit→reboot

3.破解密码

3.1有光驱

最后exit退出

reboot重启 

Xshell连接成功即为成功

3.2无光驱

进入内核界面

进入单用户模式
修改密码

重新输入密码登录即可成功
总结

第一步,进入系统在选择内核界面,选择第一个选项按E键进入内核操作界面

第二步,光标移动到Linux开头行最后,添加rd.break,Ctrl + x 进入单用户界面

第三步,重新挂载

mount -o remount,rw /sysroot       #重新挂载 添加读写权限

第四步,切换到真正的根目录

chroot /sysroot

第五步,修改密码

passwd

第六步,退出并重启

exit→reboot

延伸:如果开启了selinux的话需要重新打上标记

4.系统服务控制

systemctl  控制类型  服务名称

控制类型

控制名含义
start启动
stop停止
reload重新加载
staus查看服务状态
  • Centos6    chkconfig
  • Centos7    systemd

0123456代表级别

0代表关机;1代表单用户;234代表字符界面(2没有nfs;4没有用过);5图形化界面;6重启

服务程序的特点

  • 一旦运行,一直运行
  • 一般是后台运行,不会影响前台操作

服务控制命令

Centos6
Service服务程序start开启
stop关闭
restart重启
reload重新加载配置文件
status查看服务状态

在/etc/init.d写一个同名文件的脚本(必须要有执行权限)

chkconfig  --add  服务名称

chkconfig  --level  35  服务程序  on    开机自启

chkconfig  --level  35  服务程序  off  关闭开机自启

Centos7
systemctlstart服务名开启服务(可以同时启动12345多个程序服务)
stop关闭服务
restart查看服务状态
reload重新加载配置文件
status重启服务

systemctl enable 服务名                开机自启

systemctl enable --now 服务名      开机自启并立即启动

systemctl disable 服务名               开机不自启

systemctl disable --now 服务名     开机不自启并立即关闭

如果用yum安装以及rpm安装 会自动生成一个配置文件 不需要我们手动加入systemd会自己添加

 5.使用Systemd编译安装nginx程序

编译安装

cd  /opt
wget http://nginx.org/download/nginx-1.18.0.tar.gz
tar xf   nginx-1.18.0.tar.gz
cd  nginx-1.18.0
yum -y install gcc pcre-devel openssl-devel zlib-devel openssl  openssl-devel 
#请使用网络源
mkdir /cxk/nginx -p    
./configure   --prefix=/cxk/nginx
make
make  install
 
ln -s /apps/nginx/sbin/nginx   /usr/sbin/nginx 
#做软链接   可以补全  
 
 
####以上操作可以直接新建vim.test.sh进行操作
 
 
###然后使用bash test.sh进行上述操作

开启Nginx服务并测试

编辑nginx服务项

开启Nginx服务并测试

[root@localhost nginx-1.18.0]#systemctl start nginx.service
 
##开启nginx服务
 
[root@localhost nginx-1.18.0]#systemctl status nginx.service
 
##查看nginx服务状态信息
 
● nginx.service - The nginx HTTP and reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
   Active: active (running) since 二 2024-01-02 22:04:16 CST; 6s ago
 Main PID: 5970 (nginx)
   CGroup: /system.slice/nginx.service
           ├─5970 nginx: master process /ghd/nginx/sbin/nginx
           └─5971 nginx: worker process
 
1月 02 22:04:16 localhost.localdomain systemd[1]: Started The nginx HTTP and r....
1月 02 22:04:16 localhost.localdomain systemd[1]: Starting The nginx HTTP and ....
Hint: Some lines were ellipsized, use -l to show in full.
[root@localhost nginx-1.18.0]#systemctl stop nginx.service
 
##终止nginx服务
 
[root@localhost nginx-1.18.0]#systemctl status nginx.service
 
##查看nginx服务状态信息
 
● nginx.service - The nginx HTTP and reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
 
1月 02 22:04:16 localhost.localdomain systemd[1]: Started The nginx HTTP and r....
1月 02 22:04:16 localhost.localdomain systemd[1]: Starting The nginx HTTP and ....
1月 02 22:04:29 localhost.localdomain systemd[1]: Stopping The nginx HTTP and ....
1月 02 22:04:29 localhost.localdomain systemd[1]: Stopped The nginx HTTP and r....
Hint: Some lines were ellipsized, use -l to show in full.

  • 11
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《嵌入式Linux应用程序开发标准教程(第2版)》主要分为3个部分,包括Linux基础、搭建嵌入式Linux环境和嵌入式Linux的应用开发。Linux基础部分从Linux基础、基本操作命令讲起,为Linux初学者能快速入门提供了保证。接着系统地讲解了嵌入式Linux的环境搭建,以及嵌入式Linux的I/O与文件系统的开发、进程控制开发、进程间通信开发、网络应用开发、基于中断的开发、设备驱动程序的开发以及嵌入式图形界面的开发等,并且还安排了丰富的实验内容与课后实践,使读者能够边学边用,更快更好地掌握所学知识。   《嵌入式Linux应用程序开发标准教程(第2版)》可作为高等院校电子类、电气类、控制类等专业高年级本科生、研究生学习嵌入式Linux的教材,也可供希望转入嵌入式领域的科研和工程技术人员参考使用,还可作为嵌入式培训班的教材和参考书。 第1章 Linux快速入门 1.1 嵌入式Linux基础 1.1.1 Linux发展概述 1.1.2 Linux作为嵌入式操作系统的优势 1.1.3 Linux发行版本 1.1.4 如何学习Linux 1.2 Linux安装 1.2.1 基础概念 1.2.2 硬件需求 1.2.3 安装准备 1.3 Linux文件及文件系统 1.3.1 文件类型及文件属性 1.3.2 文件系统类型介绍 1.3.3 Linux目录结构 1.4 实验内容——安装Linux操作系统 1.5 本章小结 1.6 思考与练习 第2章 Linux基础命令 2.1 Linux常用命令 2.1.1 用户系统相关命令 2.1.2 文件相关命令 2.1.3 压缩打包相关命令 2.1.4 文件比较合并相关命令 2.1.5 网络相关命令 2.2 Linux启动过程详解 2.2.1 概述 2.2.2 内核引导阶段 2.2.3 init阶段 2.3 Linux系统服务 2.3.1 独立运行的服务 2.3.2 xinetd设定的服务 2.3.3 系统服务的其他相关命令 2.4 实验内容 2.4.1 在Linux下解压常见软件 2.4.2 定制Linux系统服务 2.5 本章小结 2.6 思考与练习 第3章 Linux下C编程基础 3.1 Linux下C语言编程概述 3.1.1 C语言简单回顾 3.1.2 Linux下C语言编程环境概述 3.2 常用编辑器 3.2.1 进入vi 3.2.2 初探emacs 3.3 gcc编译器 3.3.1 gcc编译流程解析 3.3.2 gcc编译选项分析 3.4 gdb调试器 3.4.1 gdb使用流程 3.4.2 gdb基本命令 3.5 make工程管理器 3.5.1 makefile基本结构 3.5.2 makefile变量 3.5.3 makefile规则 3.5.4 make管理器的使用 3.6 使用autotools 3.6.1 autotools使用流程 3.6.2 使用autotools所生成的makefile 3.7 实验内容 3.7.1 vi使用练习 3.7.2 用gdb调试程序的bug 3.7.3 编写包含多文件的makefile 3.7.4 使用autotools生成包含多文件的makefile 3.8 本章小结 3.9 思考与练习 第4章 嵌入式系统基础 4.1 嵌入式系统概述 4.1.1 嵌入式系统简介 4.1.2 嵌入式系统发展历史 4.1.3 嵌入式系统的特点 4.1.4 嵌入式系统的体系结构 4.1.5 几种主流嵌入式操作系统分析 4.2 ARM处理器硬件开发平台 4.2.1 ARM处理器简介 4.2.2 ARM体系结构简介 4.2.3 ARM9体系结构 4.2.4 S3C2410处理器详解 4.3 嵌入式软件开发流程 4.3.1 嵌入式系统开发概述 4.3.2 嵌入式软件开发概述 4.4 实验内容——使用JTAG烧写NandFlash 4.5 本章小结 4.6 思考与练习 第5章 嵌入式Linux开发环境的搭建 5.1 嵌入式开发环境的搭建 5.1.1 嵌入式交叉编译环境的搭建 5.1.2 超级终端和minicom配置及使用 5.1.3 下载映像到开发板 5.1.4 编译嵌入式Linux内核 5.1.5 Linux内核源码目录结构 5.1.6 制作文件系统 5.2 U-Boot移植 5.2.1 Bootloader介绍 5.2.2 U-Boot概述 5.2.3 U-Boot源码导读 5.2.4 U-Boot移植主要步骤 5.3 实验内容——创建Linux内核和文件系统 5.4 本章小结 5.5 思考与练习 第6章 文件I/O编程 6.1 Linux系统调用及用户编程接口(API) 6.1.1 系统调用 6.1.2 用户编程接口(API) 6.1.3 系统命令 6.2 Linux中文件及文件描述符概述 6.3 底层文件I/O操作 6.3.1 基本文件操作 6.3.2 文件锁 6.3.3 多路复用 6.4 嵌入式Linux串口应用编程 6.4.1 串口概述 6.4.2 串口设置详解 6.4.3 串口使用详解 6.5 标准I/O编程 6.5.1 基本操作 6.5.2 其他操作 6.6 实验内容 6.6.1 文件读写及上锁 6.6.2 多路复用式串口操作 6.7 本章小结 6.8 思考与练习 第7章 进程控制开发 7.1 Linux进程概述 7.1.1 进程的基本概念 7.1.2 Linux下的进程结构 7.1.3 Linux下进程的模式和类型 7.1.4 Linux下的进程管理 7.2 Linux进程控制编程 7.3 Linux守护进程 7.3.1 守护进程概述 7.3.2 编写守护进程 7.3.3 守护进程的出错处理 7.4 实验内容 7.4.1 编写多进程程序 7.4.2 编写守护进程 7.5 本章小结 7.6 思考与练习 第8章 进程间通信 8.1 Linux下进程间通信概述 8.2 管道 8.2.1 管道概述 8.2.2 管道系统调用 8.2.3 标准流管道 8.2.4 FIFO 8.3 信号 8.3.1 信号概述 8.3.2 信号发送与捕捉 8.3.3 信号的处理 8.4 信号量 8.4.1 信号量概述 8.4.2 信号量的应用 8.5 共享内存 8.5.1 共享内存概述 8.5.2 共享内存的应用 8.6 消息队列 8.6.1 消息队列概述 8.6.2 消息队列的应用 8.7 实验内容 8.7.1 管道通信实验 8.7.2 共享内存实验 8.8 本章小结 8.9 思考与练习 第9章 多线程编程 9.1 Linux线程概述 9.1.1 线程概述 9.1.2 线程机制的分类和特性 9.2 Linux线程编程 9.2.1 线程基本编程 9.2.2 线程之间的同步与互斥 9.2.3 线程属性 9.3 实验内容——“生产者消费者”实验 9.4 本章小结 9.5 思考与练习 第10章 嵌入式Linux网络编程 10.1 TCP/IP概述 10.1.1 OSI参考模型及TCP/IP参考模型 10.1.2 TCP/IP协议族 10.1.3 TCP和UDP 10.2 网络基础编程 10.2.1 socket概述 10.2.2 地址及顺序处理 10.2.3 socket基础编程 10.3 网络高级编程 10.4 实验内容——NTP协议实现 10.5 本章小结 10.6 思考与练习 第11章 嵌入式Linux设备驱动开发 11.1 设备驱动概述 11.1.1 设备驱动简介及驱动模块 11.1.2 设备分类 11.1.3 设备号 11.1.4 驱动层次结构 11.1.5 设备驱动程序与外界的接口 11.1.6 设备驱动程序的特点 11.2 字符设备驱动编程 11.3 GPIO驱动程序实例 11.3.1 GPIO工作原理 11.3.2 GPIO驱动程序 11.4 块设备驱动编程 11.5 中断编程 11.6 按键驱动程序实例 11.6.1 按键工作原理 11.6.2 按键驱动程序 11.6.3 按键驱动的测试程序 11.7 实验内容——test驱动 11.8 本章小结 11.9 思考与练习 第12章 Qt图形编程基础 12.1 嵌入式GUI简介 12.1.1 Qt/Embedded 12.1.2 MiniGUI 12.1.3 Microwindows、TinyX等 12.2 Qt/Embedded开发入门 12.2.1 Qt/Embedded介绍 12.2.2 Qt/Embedded信号和插槽机制 12.2.3 搭建Qt/Embedded开发环境 12.2.4 Qt/Embedded窗口部件 12.2.5 Qt/Embedded图形界面编程 12.2.6 Qt/Embedded对话框设计 12.3 实验内容——使用Qt编写“Hello,World”程序 12.4 本章小结

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值