(6) APT工具集

第六章 APT工具集


简易地安装和升级操作是Debian系统风靡的原因之一,这个独特的优势主要归功于APT程序。

APT是advanced package tool的缩写。这个程序的"advanced"之处在于它处理包的方式。它不是简单地逐个对待每个包,而是根据包的依赖,对相关的包进行关联处理。

package source和source package:
    source容易导致歧义。source package是包含源码的包,而package source,是存放软件包的仓库,例如website,ftp server,CD-ROM等。

APT程序需要使用软件包仓库:/etc/apt/sources.list,该文件中列出了不同的软件包仓库,或者说sources。APT会导入所有这些sources中发布的软件包列表。这个操作的完成,需要下载二进制包和源码包,并分析包的内容。如果这些文件已经安装,那么APT只下载不同的部分来进行更新。

gzip,bzip2,LZMA和XZ压缩方式:
    通常.gz后缀的文件是以gzip工具进行压缩的。gzip是一个经典的Unix压缩工具,它速度快而且高效。新的压缩软件有更高的压缩率,但它们需要更多资源(计算时间和内存)来进行压缩和解压。这些新的压缩软件有(以软件发布先后顺序排序):bzip2(.bz2),lzma(.lzma)和xz(.xz)。

6.1 修改sources.list文件

6.1.1 语法

sources.list文件中的有效行对应着一个source,行内容由3个部分组成,3个部分被空格分割。第一个部分表示源的类型:

  • deb:针对二进制软件包
  • deb-src:针对源码包

第二部分,指出了source的基本URL(对于具体的一个包package.gz,必须使用全名称,也就是基本URL加上包名),这个地址由Debian的镜像或第三方软件提供者提供。这个URL可以是file://开头,表示这是一个本地的源,http://表示是由web服务器提供的源,FTP://表示是一个由ftp服务器提供的源,cdrom://表示是一个通过CD-ROM/DVD-ROM/Blu-ray介质提供的源。

第三部分的语法依赖于source的结构。最简单的情况下,你可以仅仅只需指定一个子目录,该目录中包含软件包。但是,通常的情况下,像Debian镜像一样,由于包含多个发行版和多种分类的软件包,因此,必须将这些包分类。这种情况下,sources.list文件必须指明发行版本(使用发行代号或对应的阶段版本(stable,testing,unstable))和软件包的分类(main,contrib,non-free等)。

main,contrib,non-free:
    根据软件的发行执照,Debian使用3种分类来区分它们。main表明软件完全遵从Debian Free Software Guidelines。non-free不完全遵从这些准则,但仍然可以不附加任何限制条件来发布。这一类软件不属于Debian的软件,但有些软件需要使用它们。Debian推荐用户优先使用main里面的软件。Contrib指的是那些必须依赖于一些非自由软件的开源软件,这些软件可以是non-free分类中的软件,也可能是一些非自由的文件,例如ROMs,BIOS等。contrib分类中也包含由非自由软件编译构建的自由软件。如OpenOffice.org的办公软件。

/etc/apt/sources.list.d/*.list:
    如果很多源被引用,那么将它们分割成多个单独的文件会很有用途。每一部分会被存储在/etc/apt/sources.list.d/filename.list文件中。

cdrom源表示使用CD/DVD-ROM作为软件包仓库。跟其他种类的源不同,cdrom源在光盘可用的时候才能够使用,而且一次只能使用一个盘。正因为如此,管理cdrom源跟其他源稍有不同。它需要使用apt-cdrom命令添加源,通常使用add参数,添加后,请求插入光盘,并进行对包列表的读取(使用apt-get update命令)。

6.1.2 Stable版本仓库

下面是一个stable系统中的标准的sources.list:

# Security updates
deb http://security.debian.org/ wheezy/updates main contrib non-free
deb-src http://security.debian.org/ wheezy/updates main contrib non-free

## Debian mirror

# Base repository
deb http://ftp.debian.org/debian wheezy main contrib non-free
deb-src http://ftp.debian.org/debian wheezy main contrib non-free

# Stable updates
deb http://ftp.debian.org/debian wheezy-updates main contrib non-free
deb-src http://ftp.debian.org/debian wheezy-updates main contrib non-free

# Stable backports
deb http://ftp.debian.org/debian wheezy-backports main contrib non-free
deb-src http://ftp.debian.org/debian wheezy-backports main contrib non-free

上面的这个sources.list用于wheezy。之所以使用wheezy来表示(wheezy,wheezy-updates,wheezy-backports),而不使用stable表示(stable,stable-updates,stable-backports),是因为一旦有新的stable版本发行的时候,会造成混乱。

apt-spy:
    apt-spy能够测试出所有Debian镜像的下载速度,并生成一个sources.list文件:/etc/apt/sources.list.d/apt-spy.list,它指定了下载速度最快的镜像。   

大部分的软件都可以从"base repository"中获得,但这里的软件更新很慢。其他的仓库只包含一部分软件,但它们更新较快。需要注意的是,如果一个软件在多个仓库中都可用,那么APT将使用sources.list中的第一个可用的仓库。正因为如此,临时添加的第三方的仓库应当添加在sources.list文件的后面。

Security Updates

安全更新不是在通常的镜像服务器中,而是专门的服务器:security.debian.org,其中包含了针对stable发行版本的安全更新。

Stable Updates

Stable updates不是针对安全更新的,但在下一个stable版本发布之前,对于用户来说是非常重要的。该仓库中的软件一般是解决了一些重要的bug,或者软件有了更新。事实上,该仓库中是proposed-updates仓库的一个子集,这些软件的选择是由Stable Release Managers完成的。

Proposed Updates

Stable版本发行后,每2个月才更新一次。proposed updates仓库中维护着大量更新的,还未添加到base仓库中去的软件。前面所提到的security updates和stable updates都来自于此。

任何用户都可以使用该仓库,用来测试这些新的更新的软件。下面的一个仓库,显式地指定了stable版本:

deb http://ftp.debian.org/debian wheezy-proposed-updates main contrib non-free

Stable Backports

stable backports仓库中存放着"package backports"(向后移植),这个术语指的是针对最新版的软件,对其重新编译,使其能够在较老的发行版本中运行,一般是指stable版本。随着stable版本发布时间越来越久,许多软件已经进行了大量的更新,新的版本没有被整合到stable中,但使用testing和unstable又有风险,所以软件维护人员有时也会提供一份针对stable的重新编译版本,从而减少了导致不稳定的风险。

<a href="http://backports.debian.org/" "="">http://backports.debian.org/

stable backports仓库在一般的镜像中都可用。但是Squeeze所用的backports仓库仍要求特定服务器中,sources.list中必须有这样的源:

deb http://backports.debian.org/debian-backports squeeze-backports main contrib non-free

backports来源于testing中的软件,一旦下一个stable版本发布,就能确保已安装的backports能够升级到对应的stable中的版本。尽管这个仓库中提供的软件都是更新的版本,APT并不会安装其中的软件,除非显式指定:

$ sudo apt-get install package/wheezy-backports
$ sudo apt-get install -t wheezy-backports package  

6.1.3 Testing/Unstable版本仓库

下面是一个标准的Testing或Unstable中的sources.list:

# Unstable
deb http://ftp.debian.org/debian unstable main contrib non-free
deb-src http://ftp.debian.org/debian unstable main contrib non-free

# Testing
deb http://ftp.debian.org/debian testing main contrib non-free
deb-src http://ftp.debian.org/debian testing main contrib non-free

# Stable
deb http://ftp.debian.org/debian stable main contrib non-free
deb-src http://ftp.debian.org/debian stable main contrib non-free

# Security updates
deb http://security.debian.org/ stable/updates main contrib non-free
deb http://security.debian.org/ testing/updates main contrib non-free
deb-src http://security.debian.org/ stable/updates main contrib non-free
deb-src http://security.debian.org/ testing/updates main contrib non-free

对于这样的标准的sources.list,APT将从unstable仓库中下载软件。如果不想从unstable发行版中获取软件,可以使用APT::Default-Release选项来更改仓库,一般是更改为Testing版本。

尽管一个仓库就够了,但包含多个版本的仓库是有优点的。例如Testing版本的用户可能会想要从unstable版本中获取已经解决了部分bugs的软件版本,unstable用户也有可能会需要Testing中的软件版本。是否包含stable具有很大争议,但这么做可以使用户可以获取完成开发的较稳定的软件版本,而且也确保了自最近一次发布的stable版本以来,该软件的stable版本没有被修改过。

Experimental仓库

所有的Debian镜像中都有experimental软件,unstable中不存在这些软件,因为它们还不合格。通常,这些软件正处于开发阶段。如果软件经过改动后产生问题的,也可以放到这里。当软件维护者解决了问题和测试完成后,就要放到unstable中去,接受更多用户的使用和检验。

使用experimental的用户一般都不怕破坏系统。如果用户需要一个软件的时候,他也会冒着风险从experimental中安装该软件。

6.1.4 非官方源

除了官方镜像,还存在大量的非官方源,一些程序员会将他们编译的软件放到这些源中,甚至还有Debian项目中的开发人员将开发阶段的软件也放到这些源中。例如:http://www.apt-get.org/和mentors.debian.net。这些网站中都有很多可用的新版软件的源,用户使用这些源的时候,一定要注意,因为这些软件可能导致系统出问题。

6.1.5 Caching Proxy for Debian Packages

如果一个网内大量计算机都要安装同样的软件的时候,使用一个中间代理将很有帮助。可以配置APT使用"standard"代理,但Debian有更好的处理方法。如apt-cacher,apt-cacher-ng和approx。

6.2 aptitude和apt-get

APT是一个大项目,该项目计划包含一个图形接口。它依赖一个核心的库,其中,基于命令行的apt-get是当中的第一个前端程序。随后,一些图形接口的程序相继出现:synaptic,aptitude(包含了图形接口和文本接口两种),wajig等。最受欢迎的是apt-get,Debian安装过程中就使用它来安装软件。它跟命令行下的aptitude使用语法非常相似,但它们之间有很多不同。

6.2.1 初始化

使用APT前,要更新下最新的可用的软件列表:apt-get update。APT会花一点时间从源中下载这些列表,如果直接从CD-ROMs中安装软件,因为不需要通过网络下载这些列表,所以初始化操作会很快。

6.2.2 安装和卸载

使用apt-get install和apt-get remove来安装和卸载软件。APT会自动安装必要的依赖,也会自动卸载依赖于要被卸载的软件的那些软件。使用apt-get purge会完全卸载软件,删除其所有配置文件。

在多台计算机中重复安装软件:

有时候我们需要在多台计算机中安装同样的软件,使用APT可以很容易做到。

首先,获取已经安装了这些软件的计算机中的列表:
$ dpkg --get-selections > pkg-list

pkg-list文件中包含了已经安装的软件列表,然后将其传送到待安装软件的计算机中:

## Update dpkg's database of known packages
# avail=`mktemp`
# apt-cache dumpavail > "$avail"
# dpkg --merge-avail "$avail"
# rm -f "$avail"
## Update dpkg's selections
# dpkg --set-selections < pkg-list
## Ask apt-get to install the selected packages
# apt-get dselect-upgrade

同时进行安装和卸载:

使用apt-get/aptitude可以同时安装和卸载软件。当使用apt-get install packagename时,在包名后面添加"-"后缀表示卸载该软件;当使用apt-get remove packagename时,包名后面加上“+”表示安装该软件。如:
# apt-get install package1 package2-
# apt-get remove package1+ package2

apt-get --reinstall与aptitude reinstall

有时候卸载或修改会导致软件出问题,最简单的解决办法是重新安装该软件。不幸地是,打包系统发现该软件已经安装后,会拒绝重装该软件。使用apt-get的--reinstall选项可避免该问题。例如要重装postfix:
# apt-get --reinstall install postfix
使用aptitude稍微有所不同,但是有同样的效果。
要注意的是,并不是所有的软件破坏都能通过重装就能够解决。

如果sources.list文件中配置了不同版本的源,那么可以安装指定的软件所属发行版本。指定版本号:apt-get install package=version,但是不能选择不同的发行版本(Stable,Testing,Unstable)。如果要选择不同发行版本,使用apt-get install package/distribution。通过这些命令,用户可以选择指定版本的软件。

# apt-get install spamassassin/unstable

缓存.deb文件

APT会将下载的.deb文件缓存到/var/cache/apt/archives/中。使用Debian一段时间后,会缓存大量的软件包,占用大量磁盘空间,用户应当经常清理。apt-get clean可以清理整个目录;apt-get autoclean用来清除该目录下当前不能下载的包。

6.2.3 系统升级

用户应当经常升级系统,因为会使其安全升级:apt-get upgrade或aptitude safe-upgrade。这个命令会升级所有可升级的已安装的软件,不需要卸载任何软件。apt-get使用起来更苛刻一点,因为它拒绝安装之前未安装过的软件,这点跟aptitude不同。

apt-get升级时通常会选择最新版本的软件安装,除非使用experimental和stable-backports仓库。如果在sources.list中指定了Testing或Unstable,那么apt-get upgrade会选择从Testing或Unstable中安装软件,这可能不是用户所想要的。

如果想指定从特定的仓库中下载,可以使用-t或--target-release选项,如:apt-get -t stable upgrade。为了避免每次要显式地指定,可以将APT::Default-Release "stable"添加到/etc/apt/apt.conf.d/local。

对于重要的升级,例如将当前stable发行版本升级到下一个新的stable发行版本,你需要使用apt-get dist-upgrade。该命令会卸载废弃的软件,并安装新的软件。aptitude full-upgrade命令也有同样的功能,aptitude也能够使用dist-upgrade,但不推荐使用。

6.2.4 配置APT选项

除了上面提到的那些配置,还可以在/etc/apt/apt.conf.d目录中的配置文件中添加指令来配置APT。例如,添加DPkg::Options { "--force-overwrite";}来告诉dpkg忽略冲突。

.d目录

以.d为后缀的目录很常见,每个目录代表一个被分配成多个文件的配置文件。目录/etc/apt/apt.conf.d/中的文件用来配置APT。这些配置信息以字母顺序排序,所以更改前面的配置可能会影响后面的配置。这种结构带来了很大的便利。事实上,管理员可以不需更改原配置文件的情况下,增加新的现成的配置。   

6.2.5 管理包的优先级

管理软件源的优先级是APT配置的一部分。例如,你可能想在stable发行版中安装Testing,Unstable或Experimental的软件。这时候就可以给软件设置一个优先级,这个优先级将会影响APT的行为:对于每个软件,APT总会选择安装优先级最高的版本。

APT定义了几个默认的优先级。每个已经安装的软件版本的优先级是100,未安装的版本的默认优先级是500,但如果软件的版本属于目标发布版本(通过-t选项或APT::Default-Release设置),则会提升到990.你可以通过配置/etc/apt/preferences文件来设定某个软件的优先级。

APT总是会拒绝安装老版本的软件(即比当前已安装的版本低),除非它的优先级要高于1000.APT总是会选择优先级最高的,如果两个包的优先级一样,那么APT会选择版本号更新的那个。如果连版本号也一样,但内容不同,APT会选择安装没有被安装的那个。

如果包的优先级低于0,则它永远不会被安装。假如一个包的优先级在0和100之间,如果没有安装其他版本,它才会被安装。假如优先级在100和500之间,如果没有安装更新的版本或者在其他发行版中没有可用的版本,才会被安装。假如一个包的优先级在501和990之间,而且没有安装更新的版本或在目标发行版中没有可用版本,才会被安装。假如一个包的优先级在990和1000之间,只要已经安装的版本不比它更高,就会被安装。如果一个包的优先级高于1000,则总是会被安装。

当APT查看/etc/apt/preferences时,它会首先查看特殊条目,然后才是普通的软件的条目。如果存在多个条目,则使用最先匹配的。判断的关键标准是包的名字和对应的源:

假如你只想安装stable发行版的软件。不安装其他版本提供的软件,除非显式地要求。你可以这样编辑/etc/apt/preferences:

Package: *
Pin: release a=stable
Pin-Priority: 900

Package: *
Pin: release o=Debian
Pin-Priority: -10

a=stable表示从stable版本中安装软件。o=Debian限定了只能是Debian官方的,而不能是个人或第三方的。假设现在你的服务器中有服务依赖于5.14版本的Perl,你想确保升级时不会安装成其他版本。你可以这样:

Package: perl
Pin: version 5.14*
Pin-Priority: 1001

更多细节请参考手册apt_preferences(5):man apt_preferences.

6.2.6 使用多个发行版本

apt-get是一个非常优秀的工具,它能够让我们安装其他发行版的软件,例如,如果你安装的是stable版本,那么你可能会想要尝试下其他版本如Testing或Unstable下的软件版本。尽管安装不同版本软件可能会引发问题,但apt-get能够很好解决这些问题。首先,要在/etc/apt/sources.list中配置多个发行版的源,并定义默认的源(使用APT::Default-Release)。

假设你设定的是stable,sources.list中也列出了Unstable和Testing版本的源。这时候,你可以使用apt-get install package/testing来安装Testing版本的软件。假如由于依赖的原因导致安装失败,这时可以让apt-get使用-t选项来安装Testing下的依赖。Unstable同样如此。对于升级操作,也会只升级stable版本的软件,除了安装其他版本的软件,它们会从对应的版本中更新软件。这样的行为可以由优先级来解释:apt-cache policy。

apt-cache policy

利用apt-cache policy可以查看每个源的优先级。也可以使用apt-cache policy package来观察具体的某个软件的所有可用版本的优先级。

假设现在你已经安装了版本1的stable版本软件,在testing和unstable中分别有版本2和版本3可用。已安装的版本1优先级为100,但stable中可用版本的优先级是990,而testing和unstable中对应的软件的优先级是500.所以软件被限定在了stable中。

看看另一个例子:已经安装了版本2的Testing版本,版本1在stable中可用,版本3在Unstable中可用。版本1不会被安装,因为优先级低于当前已安装版本。剩下的Testing和Unstable的优先级都是500,怎么选择呢?APT会选择版本号更高的版本,也就是版本3.如果你不想这样,要选择Testing的话,你必须降低unstable中软件的优先级,比如480.你可以这样修改/etc/apt/preferences:

Package: *
Pin: release a=unstable
Pin-Priority: 490  

6.2.7 追踪已安装的软件

apt-get的一个基本功能是跟踪通过依赖安装的包,这些包被称为“自动包”,它们通常包含各种库。当用户卸载某个软件的时候,包管理者就可清理该软件所依赖的,不再使用的所有的依赖。apt-get autoremove可以完成这个工作。aptitude没有这个选项,因为它会自动清除那些没用的依赖。但这两个软件都会提示用户这些操作的具体细节。

将那些不直接使用的包标记为“自动包”会很有用,当不需要它们的时候就能够自动被卸载掉。apt-mark auto package会将package标记为自动包,而apt-mark manual package则相反。aptitude markauto和aptitude unmarkauto具有同样的功能,或者直接在aptitude界面中查看。如果用户想了解什么软件使用了某个自动包,那么可以这样:

$ aptitude why python-debian
i aptitude Recommends apt-xapian-index
i A apt-xapian-index Depends python-debian (>= 0.1.15)

6.3 apt-cache

apt-cache可以显示很多APT的内部数据库中的信息。这些缓存的信息是通过sources.list中的源获取到的,并在apt-get update期间生成信息。

apt-cache可以基于关键词搜索:apt-cache search keyword。apt-cache show package可以查看所有可用的版本的头信息,包括软件描述,依赖,开发者等信息。aptitude search和aptitude show也能完成同样的工作。

一些用法很少用到,例如apt-cache policy用来显示源的优先级,apt-cache dumpavail用来显示所有可用软件的头信息,apt-cache pkgnames用来显示系统中安装的软件列表。

axi-cache

apt-cache简单地从软件包的描述信息中抓取搜索,所以经常会返回太多搜索结果。使用axi-cache效果会更好,axi-cache会将搜索的结果按照相关度排序,并更好的呈现出来。


6.4 aptitude, synaptic

APT是用C++语言编写的,它的代码主要位于libapt-pkg共享库中,这样就可以提高代码复用率,前端程序(front-ends)就可以很容易地编写了。起初apt-get的初衷就是被设计成为一个测试libapt-pkg库的前端测试程序,随后这个程序意外地获得了极大的成功。

6.4.1 aptitude

aptitude是一个交互式的程序,也可以在控制台中运行半图形模式。你可以浏览已安装的软件和可用的软件,查看软件的信息,以及安装和卸载软件。该程序是专门为管理员设计的,所以它比apt-get更加智能,而且它的接口更容易理解和操作。

aptitude启动后会自动显示已安装的程序列表,所有可用的软件列表,可升级的软件列表等等,其界面中有各种帮助提示菜单。

可以使用/来搜索软件。搜索模式串可以是软件包名,还可以指定描述或其他的section信息。具体使用请参考文档。使用'l'(limit的意思),后面跟上搜索模式串,界面视图列表就会自动过滤搜索结果。

aptitude的命令行接口

大多数的图形接口的功能,使用命令行接口都能够做到。命令行的用法跟apt-get和apt-cache类似。aptitude的高级特性在命令行模式下也能够使用。例如你可以使用同样的搜索模式串。

使用aptitude来管理"automatic flag"是非常容易的。使用按键组合Shift+m来将某个已安装软件标记为automatic,使用m键来移除该标记。在软件列表视图中,aptitude使用A来标记automatic软件。如果不想看到automatic软件,则可以使用l~i!~M。l用来过滤结果,~i用来选择已安装的软件,!~M用来排除automic软件。详细的用法请参考文档。

6.4.2 synaptic

synaptic是一个包管理程序,它的界面由GTK+编写,界面非常简单易用。界面中给出了各种类别的软件列表,用户可以方便地进行各种操作。但这些操作不是立即被执行的,而是放到一个任务列表中顺序执行。

6.5 检查包的真实性

对于Falcot公司的服务器管理人员来说,安全是非常重要的。他们必须确保安装的包适用于Debian系统。计算机黑客会试图给合理的软件添加恶意代码。如果这样的软件被安装,那么它可能会盗取密码和机密资料。为了规避这种危险,Debian提供了tamper-proof seal,用来保证该软件来自官方开发版本,并且没有被第三方修改过。这个seal(印章)跟一些加密的hashes和一个签名协同工作。被签名的文件叫Release,它由Debian镜像服务器提供。该文件也包含Packages文件列表,和它们的MD5,SHA1,SHA256 hashes,以保证这些文件没有被修改过。

可用apt-key工具来管理这些受信任的keys。它维护一个GnuPG公开密钥的keyring文件,该文件被用来校验Release.gpg中文件的签名。它允许手动添加key,但通常只需使用Debian官方key。这些key由debian-archive-keyring这个包进行自动更新。一旦添加了适当的key后,在安装包之前就会校验签名,从而减少风险。

6.6 升级stable

Debian系统的一个优点是能够很方便地从当前stable版本中升级到最新版本。值得注意的是,升级过程会持续几十分钟,时间长短取决于你的下载速度。

6.6.1 推荐的操作步骤

Debian的stable版本发布间隔很久,用户在升级前应当仔细查看发布说明。此处,让我们假设从Squeeze升级到Wheezy。但是升级不是100%安全的,所以你应当在升级前备份重要数据。另一个好的习惯是事先整理已安装的软件,清理不需要的软件,给系统瘦瘦身,这样就会加快升级的速度。有用的工具有:aptitude,deborphan和debfoster。例如,你可以使用下面的命令,然后再使用aptitude检查一遍:

# deborphan | xargs aptitude --schedule-only remove

现在可以进行升级了。首先,你要更新/etc/apt/sources.list文件,把Squeeze改为Wheezy的源。如果sources.list中引用的是stable源,那么就不需要显式指定发行版的代号了,因为它本身就是指向最新的发行版本。无论哪种情况,都要更新下软件包列表:apt-get update。

更新完成后,你可以使用apt-get upgrade进行最小化升级。这一步完成后,使用apt-get dist-upgrade进行彻底的升级。这个过程中你应当谨慎apt-get所提示的动作:要添加的包是否是推荐的包或者说是否有用。当所有的包下载完后,就开始安装了,这期间要回答一些Debconf的问题,这些问题可能会涉及到修改本地配置文件。

6.6.2 升级导致的问题

无论管理员如何努力,主版本的升级结果并不总是随心所愿的。例如新软件跟先前的版本不兼容,或者新版软件仍会有漏掉的bugs,尽管在发行之前要经过testing版本周期测试。














  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值