Linux基础命令(四)

一 、文件和目录的权限

(1)查看文件和目录的相关信息--->  ls :list

说明:命令的参数用到再查

-a 列出目录下的所有文件,包括以.开头的隐含文件(all)--->常用1
-A 列出目录下的所有文件(包括隐藏文件但不包括.和..目录)
-b 把文件名中不可输出的字符用反斜杠加字符编号(就象在C语言里一样)的形式列出。
-c 输出文件的 i 节点的修改时间,并以此排序
-d列出目录本身(目录像文件一样显示),而不显示其下的文件(directory)-->常用2
-e 输出时间的全部信息,而不是输出简略信息。
-f  对输出的文件不排序(默认的)
-F 根据文件目录信息给予附加的数据结构(*-->可执行文件;/-->代表目录;=-->代表socket文件;|-->FIFO文件;@-->符号链接)
-h  将文件容量以GB、KB、M等形式列出来-----> du -sh(显示文件的大小)-->常用3
-i   输出文件的 i 节点的索引信息(文件被系统记录的次数)
-k  以 k 字节的形式表示文件的大小
-  列出文件的详细信息(文件的属性和权限等)-->常用4
-m 横向输出文件名,并以“,”作分格符。
-n  用数字的 UID,GID 代替名称
-o  显示文件的除组信息外的详细信息(同 U)
-r   将结果反向输出(reverse)
-R 连同子目录的内容一并列出来,该目录下的所有文件都会显示出来--->常用5(类似于tree命令)
-S 以文件的容量排序(size)
-t   按时间排序

补充:-L 列出链接文件而不是链接到的文件!

小技巧:ll的alias功能

后续文件的过滤(涉及正则表达式)--->F的应用(shell中)!

思考:问什么我们可以在任意用户任意目录执行命令(eg:/bin/ls命令)?

解答:类比Java中要设置java和javac的命令一样,需要将命令加到系统的环境变量路径中

执行逻辑:系统首先会从当前目录查找该命令,如果没有则从系统路径变量(PATH)中去查找!

图1

图2

说明:后续省略。。。

###########################################

需求1:在不同的用户下列出查询的路径

结果:由一堆目录组成!

说明:root和普通用户下,二者目录有区别但是二者都有共性的地方(PATH下都有/bin目录),这也是思考的回答!

思考:如果PATH中有多个相同的命令(目录结构不一样),哪个命令先执行------>顺序(谁先被查询)

######################

需求2:上面我们知道某些命令的目录不在PATH中,但是我们还想执行此条命令怎么办?

首先先进行判断

(1)如果权限允许:通过绝对路径去执行该命令

(2)如权限不允许:则启用超级用户即可---(超级用户root--->visudo--->99行编辑相应的配置文件--->切换普通用户去执行 sudo命令)

################
####文件权限####
################

二、权限信息

(1)概念引入

ls -l touch 4.c

####################
####文件权限和属性####
####################

####1、文件属性的查看####

       ls -l filename

-   |  rw-r--r-- | 1 | root| root|  46  | Mon 1 05:03 |filename|
|---|-----------—|---|-----|—---—|------|---------—---|--------|
  1       2        3    4     5      6         7           8

1)文件类型说明

-    ##普通文件(各种类型的--->常用)
d    ##目录(directory)
c    ##字符设备(character)
s    ##套接字(socket)
p    ##管道(pipe)
b    ##快设备(block)
l    ##连接(软链接link-->快捷方式)

相应的文件说明

说明1:字符设备文件,我在讲重定向的时候提到过,图示也回答了之前的提出问题(c的含义)!

说明2:socket是软件和内核通信的一个接口,默认软件是封闭的,如果删除了,就无法同系统建立通信!

###############################

2)文件属性权限

rw---—r-- ==>

u(所有人的权限):rw-;g(所有组对其操作的权限):---;o(其他人的权限):r--

3)连接数的含义

对文件:文件内容被系统记录的次数-->官方术语(硬链接的个数-->inode)!

对目录:默认是一级子目录的个数(包含两个隐藏目录)-->!

图1

说明:测试的时候Desktop已经有一个temp的目录了!

4)文件所有人(并不一定最初由其创建就属于他,理解为房子的买卖易主了)

5)文件所有组,初始组或者中途又改变的组!

6)

文件:内容的大小,默认是字节!

目录:记录文件属性的字节数,而不是目录的大小!

图2

注意:倒数第二行是"9+7"

7)默认是内容最后一次发生改变的时间

文件:最后一次被修改的时间

目录:文件名移动的最后一次时间(创建、删除、移动、重命名等)

8)文件或目录的名字

####################################################

2、改变文件的权限和属性(归属)

弄清楚:用户和其他人;以及用户组和其它组!

(1)属性的改变------>文件所有人、所有组的管理

理解上ch--->change;own--->owner;grp--->group

chown     username                 file|dir    
##更改文件或目录的所有者(类似于让文件的归属易主,相当于创建文件时指定)
chown     username{.,:}groupname   file|dir       
##更改文件的所有者和所属组---->推荐":"来隔开
chown     -R username              dir          
##更改目录(针对)本身及里面所有内容的所有人(username)
chgrp     -R groupname(组名)        dir          
##更改目录(针对)本身及里面所有内容的所有组(groupname)
chgrp     -R user.groupname(组名)   dir          
##更改目录(针对)本身及里面所有内容的文件或目录所有者以及所属的用户组!

注意1普通用户的属性可以被root和自身修改!

注意2超级用户的属性权限只能自身修改!

(2)权限的改变

rw-r--r--

u:文件所有人对文件可以读、写(前三个)
g:文件组成员对文件可(中间三个)
o:其他人对文件可---->好好体会(其他人相对于该用户组的人不是相对于该用户的人)

说明:这里暂时不讨论文件和目录的权限意义仅讨论权限的修改!

细化:cp 和 mv的权限说明(后续)

#########################################

更该权限的方式:数字类型和符号类型

  1)数字类型改变文件的权限(二进制---常用)

语法chmod 【-R(目录递归权限修改)】三位数字(顺序对应ugo权限修改) 文件或目录

说明1:【..】表示非必须的参数,这里主要是针对目录里面内容的修改!

说明2:权限与数字影射关系(r--->4;w-->2;x-->1)---->每一位(u\g\o)的权限是三个数字的累加和!

775------>(4+2+1)(4+2+1)(4+0+1)------>(u=rwx)(g=rwx)(o=r-x)

2)符号类型改变文件的权限

语法:chmod 【-R】 {u,g,o,a}  {+,-,=}  {rwx} file|dir

说明:a(表示三者)、+(表示添加权限)、-(表示去掉权限)、=(表示设置)

###############################################

需求1让一个用户拥有文件的执行权,但是却不知道该文件原本的权限

chmod a+x filename

# 前提是有进入该目录的权限,即目录的权限是x

说明:此用户不知道是什么级别的用户(三种都有可能)!

##############################

需求2:让文件所有者有读写的权限,文件所属组和其他人只有读的权限

测试(简写形式):chmod u=rw,go=r filename

等价形式(原生):chmod u=rw-,g=r--,o=r-- filename

注意1:ugo以逗号隔开!

###############################

文件所属组概念:是以文件所属用户所在的用户组!

注意2:对于"-()"如果其本身就没有权限则无效,对于"+(加)"如果其本身就有该权限则无效!

补充

chmod u-x          file1        ##file1拥有者去掉x权限
chmod g+w          file1        ##file1拥有组添加w权限
chmod u-x,g+w      file1        ##file1拥有者去掉x权,file1拥有组添加w权限
chmod ugo-r        file2        ##file2的用户组其他人去掉r权限
chmod ug+x,o-r     file3        ##file3用户和组添加x权限,其他人去掉r权限
chmod a+(-){r|w|x} file4        ##file4用户和用户组其他组全部进行相应的修改

++++++++++++++++++++++++++++++++++++++++++

chmod {+,-}w 文件--->都是只操作文件本身的所有者-->由于安全问题!-->信息提示

即:chmod u+w    文件

chmod {+,-}w 目录-->同上

常见场景的说明

 文件-->目的

(1)修改普通文件-->一般是(rw-)!如果是(-w-)则vim 文件-->无法查看文件的内容,但是由于可以修改,容易覆盖源文件的内容,而不知情!

(2)执行文件--->一般是(r-x)!如果是(--x)则读取不了文件的内容不能执行!

 即:r-x(常常是二进制的可执行文件或者脚本)

###################分割线##############################

 目录-->目的

 (1)修改目录的内容-->一般目录是(rwx)

 如果是(-wx)-->没有r则无法自动补全,但是可以异动目录的列表内容!

 如果是(-w-)-->则无法进入目录,何谈修改里面的内容!

(3)目录和文件权限的意义

引入:上面做了那么多操作,我们已经初步掌握了修改文件属性和权限的操作,但是对于文件的和目录的rwx你真正了解的含义吗?而文件和目录的权限又有哪些区别呢?

两步走:权限对文件的重要性以及权限对目录的重要性

1)权限对文件的重要性

   文件的种类:一般文本文件、数据库的文件、二进制的可执行文件等!

   我们知道文件存在的目的要是存储数据的,存储数据后总得查看,有时是不是还得修改,有的文件还需要被系统执行

 注意:系统肯定会尽最大的努力保护系统的稳定性,即对于默认创建的文件总是限制其执行权限,以免导致文件执行导致系统崩溃,这也是umask系统对文件权限限制的由来(后续再讲)!

 r(read):可以读取此文件的内容------>常用命令{cat,less,more,head,tail等}------前提:得进入文件所在的目录中!

 w(write):对文件内容的操作(写入、添加、修改)----->注意:不包含删除文件----->着眼点(文件的内容)

 x(execute):该文件具有能系统执行的权限,但是前提必须获得r的权限!

 x细化:一个文件是否具有执行能力不是通过"扩展名"来判断的,要区别于Windows!

 判断Linux下文件是否能被执行:看否具有的"x"权限来决定的,跟文件名没有绝对的关系

 说明:虽然二者没有必然的联系,但为了见名知意,通常都以文件的后缀名表明文件相应的类型,例如:.{c,java,php,py}等

2)权限对目录的重要性

引入:我们知道文件的主要作用是存放数据,那目录的主要作用是干什么的

目录的主要作用展示目录内容的,那目录的主要内容是什么呢?

目录主要内容是:记录文件名(目录)的列表!

分析:rwx对目录的影响

r(read contents in directory):表示有读取目录结构列表的权限(即:可以查询目录下文件目录的信息)------>相应的命令 ls

w(modify contents in directory):表示具有更改('编辑')目录内容的权限,即目录内容发生变化,那么内容发生变化的情况如下:

1)新建文件和目录(是在当前目录下,不包含当前目录下子目录中新建文件和目录,如果要完成后者,看子目录的权限

2)删除已存在的文件和目录(注意:不管子目录下是否有内容也会一并干掉,需要递归删除吗?)

3)重命名已存在的文件或目录

4)移动该目录的文件和目录------> mv

x(access directory):表示的是用户是否能进入该目录,使该目录成为工作目录---->相关命令(cd )

举例:小明对某个文件具有可执行的权限,但是对文件所属的目录没有执行权限,无法进入,只能望而兴叹

后续:文件或目录的权限下可以干什么?------->尽可能利用一些权限来完成目标需求!

#########################################

(4)系统默认权限的设定

需求上分析:从系统安全角度来说,开放权力越少,系统安全性越高;但是如果开放的权力过多,便捷性下降了,安全级别下降了,为了找到一个平衡点,出现了余留权限--->umask,即系统设定新建文件或目录会默认减掉一些权限!

说明:不同的用户登陆下默认的权限不同!

(1)超级用户(本来权限比较大,系统会制约的狠些):
umask值默认是0022(减去的权限),创建的目录的权限(755),创建文件的权限[644,默认满权限666没有执行权限]

原因:内核--->x(病毒、木马是可执行的)-->不安全!

(2)普通用户(本来权限比较小,系统会制约的一般):
umask值默认是0002(减去的权限),创建的目录的权限(775),创建文件的权限[664,默认满权限是666]

共性:系统分配文件的默认满权限是666(剪掉了执行权,最大限度的保证了系统的安全性!)

执行流程:先判断类型(是文件还是目录)----->再根据用户的级别(一般还是超级)减去相应的umask----->得到文件或目录的最终权限

umask含义:用户默认减去的权限(umask的注意事项!!!!!!!)

###########################################

需求1:查看用户的umask的系统默认剪掉的权限------>umask

需求2:临时设定(更改)用户的umask ------>umask 077------>特点:只当前shell环境中生效

需求3:永久设定方式(不建议)------>修改配置文件------>编辑/etc/bashrc   ##shell脚本

:set nu------>:70行显示如下的信息------>修改配置文件------>:wq保存退出

 70     if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
 71        umask 002    ##普通用户umask
 72     else
 73        umask 077    ##超级用户umask                                                                      
 74     fi

同时修改配置文件:vim /etc/profile (系统配置文件)--->第59行

 59   if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
 60       umask 002       ##普通用户umask
 61   else
 62       umask 077       ##超级用户umask                                                                                         
 63   fi

注意:以上两个配置文件的umask设定值必须保持一致!

补充:文件下载后默认权限依据哪一个?

设定立即生效:source /etc/bashrc、source /etc/profile或用.来替代source!

注意:在root下修改这两个配置文件,要同步

##########################特殊权限##########################

特殊权限

限制root的权限!

引入:我们发现 /tmp以及 /usr/bin/passwd权限有些奇怪

思考:不是只有r、w、x吗?这些特殊权限的(s、t)的含义是什么?

过渡:对应的Xwindows资源管理器图形展示!

生活案例:扫地的工具是用户A的,但是真正打扫干活的人是用户B!

案例演示

明确:这两个权限的意义与系统的帐号以及系统的进程有关,后续会讨论!

情景模拟:Linux系统下所有的账户的密码都记录在/etc/passwd这个文件中------1>这个文件的权限是 -r---------1 root root------2>意思:这个文件仅有root可读且仅有root用户可以强制写入------3>思考一般账户能否自行修改自己的密码

发现:当然可以修改密码------>思考:内在机理呢?为什么没有冲突呢?

#############SUID###############

原因:SUID的功能------>引出:什么是SUID?

概念:当s标志出现文件(限定1)所有者(限定2)的x权限中(限定3)时,是冒险位,此时就被称为Set UID,简称SUID的特殊权限!

冒险:普通用户可能临时获取root用户的权限,来获取某种权限,可能产生不可预测的后果!

疑问:SUID权限对于一个二进制文件特殊功能是什么?基本上SUID有这样的限制功能

(1)SUID权限仅对二进制程序(具有s属性的命令)有效;

(2)执行者对于该程序需要x的可执行权限

(3)本权限(SUID)仅在执行过程中(run-time)生效

(4)执行者具有该程序所有者(owner----user)的权限(类似于继承权限),以此身份完成某种功能;

感悟:有点像visudo的此配置文件中加入了特别声明用户可以行使的权力!

##########################################################

案例分析(来自上面的情景模拟):命令------>passwd /tmp

素材

drwxrwxrwt. 16 root root 4096 Jul 30 03:24 /tmp

-rwsr-xr-x. 1 root root 27832 Jan 30  2014 /usr/bin/passwd

(1)首先/etc/passwd是一个二进制程序---->SUID权限对此二进制文件有效------>满足第一个条件

(2)执行者(student)对于该程序(passwd)有x的可执行权限(判断:student属于其他人,即对应o的属性有x)------>满足第二个条件

(3)student在执行的过程中会临时(暂时)的获取root的权限(相当于此时是root用户登陆)---->对照该文件的root权限----->student用户具有w权限(可以修改此文件)

注意:SUID仅作用二进制程序不能够在shell script 中,且SUID对目录无效

SUID的目的就是:让本来没有相应权限用户运行这个程序时,可以访问他没有权限访问的资源

设定方式

chmod u+s file

chmod 4xxx file

##知识点:suid=4

############SGID###############

SGID的概念:当s标示在用户组的x使则称之为Set GID,简称SGID,强制位

特点:针对文件和目录来设置

(1)针对文件功能如下

    1)SGID属性对二进制程序(具有SGID的权限)有效

    2)程序执行者对于该程序来说具备x权限;首先判断与程序所属者是不是同一组(1),是的话看g权限,(2)不是的话看其他人的权限o

    3)执行者(其它用户)在(用这个SGID权限的命令)执行的过程中将会获得该程序用户组(group)的支持

举例:用 /usr/bin/locate 这个程序(二进制命令)去ll查询 /var/lib/mlocate/mlocate.db这个文件

/usr/bin/locate权限和属性说明:                          -rwx--s--x 1 root slocate------>SGID权限(二进制程序)

/var/lib/mlocate/mlocate.db属性和权限的说明:-rw-r-----  1  root slocate------>

命令:locate  /var/lib/mlocate/mlocate.db

结果:student获取了locate用户组的支持(相当于是slocate用户组的用户登陆),该用户组(slocate)对mlocate.db权限是r--,即能够读取mlocate.db。

过程分析:省略

(2)针对目录功能如下(常见):

    1)用户若对此目录具有rw的权限,该用户能够进入此目录;------>前提是查看目录的权限来判断

    2)用户在此目录下的有效用户组(effective group)将会变成该目录的用户组;不修改用户组默认还是用户<----结果(临时的吗?)

            id studnet ------>查看用户进入该目录后(前提),有效用户组是否改变(进入前和进入后对比)!

    3)若用户在此目录下具有w的权限(表明可以创建文件),则用户所创建的文件的用户组此目录的用户组相同

模拟场景:/tmp/hello/ ------>目录的权限: rw-r-srw- root root  -------->用户是student(默认id student---> student student)

分析:student对此hello目录具有rw的权限(others判断)------>student可以进入/hello目录(虽然此目录)----> id student------>

------>student root (有效用户组由studnet变成root)------>表明student此时也是root组的成员------>具有root组的属性(看目录中root组

具备对目录的属性操作)------>看root组对目录是否有write权限(是否可以创建)

       有效用户组:表示用户此时此刻所在的用户组是什么;有些同学会问“难道用户所在的用户组还会来回来去的变么?”。答案是肯定的。这都是newgrp命令搞得鬼,它可以帮助用户转换到不同的用户组。比如newgrp group123,就可以让用户转换到group123用户组了。请注意:这种转换的背后原理是“创建一个新的子shell”,恢复到原来用户组的方法是 用exit或ctrl-D来注销当前的shell。好了,说结论吧:有效用户组就是用newgrp命令所切换到的用户组。(当然,如果一次也没有使用newgrp命令,那么有效用户组就是初始用户组喽)当然,你可以用groups命令来列出当前用户所支持的所有用户组。(在有些系统中,第一个列出的就是有效用户组,但有些系统并不这么做)还有一点应该注意,就是当你建立一个文件时,此文件的所属用户组就是创建人当前的有效用户组。

思考:如何查看用户的有效用户组?

应用场景:项目开发中,涉及到用户组权限的问题!

说明:条件苛刻,只有在特定的环境下才生效!

思考:强制写入的前提!

-----------------------------------------------------

SBIT(Sticky Bit)目前只针对目录有效针对others来设置,表示粘滞位对目录的作用

(1)当用户对目录具有x,w权限,即具有写入的权限;---->x(表示进入目录),w(操作目录的内容)

(2)当用户在此目录下创建文件或者目录时,仅有自己和root用户有权利删除该文件;

命令:ls -ld /tmp/------>student用户执行

结果:drwxrwxrwt. 16 root root 4096 Jul 30 08:50 /tmp/

分析:最具有代表的就是/tmp目录,任何人都可以在/tmp内增加、修改文件(因为权限全是rwx),但仅有该文件/目录建立者与

root能够删除自己的目录或文件。

小结:SUID/SGID/SBIT------>针对文件(f)所有者(u)、文件(f)或目录(d)的所属用户组(g)、目录(d)的其它组(o)有效

补充:SUID(4<--->s)/SGID(2<-->s)/SBIT(1<-->t)的权限设置,原来的权限是3位---->现在需要四位,首位是三者的特殊权限的累加和

4755的等价形式(数字)<------>u=rwxs,g=r-x,o=r-x(符号)

1755的等价形式<------>u=rwx,g=r-x,o=r-t

实验:chmod 7666 test;ll test----->此时u、g、o都没有x的可执行权限标示?7------sst

现象:大写T和S出现的原因?------>代表空的意思

原因:SUID表示该文件在执行的时候具有文件拥有者的权限,但是文件拥有者无法执行了,哪里来的权限给其他人使用!

回顾:这也就解释了umask为什么是4位,第一位是特殊权限!

#####################访问控制权限列表####################

acl:access control list

需求的引入

Linux系统:我们额外指定的用户指定目录分配指定的权限(不使用ugo的权限),也就是 ACL 权限分配!

参数的说明:

(1)设置(开启-->普通)ACL列表

 m:modify

setfacl -m u:user:rwx file        --->设定user对file拥有rwx权限

setfacl -m g:group:rwx file       --->设定group组成员对file拥有rwx权限

(2)查看ACL列表权限

getfacl file|dir

需求1:用户在不开放{u,g,t}普通权限的前提下,赋予特定用户相应操作文件的权力!

链接:高级用法

错误chmod引发的惨案

说明:为了验证我之前的判断,仍以此文件作为说明

上面的例子说明两个实验现象

(1)chmod g ... 改变了mask进而影响了effective的ACL,而chmod u、o并不影响ACL的mask,进而不影响有效的ACL!

(2)mask权限是ACL最大的上限,授权的ACL不能超过mask数值!

计算原理:当chmod g的方式--->"虚假的g"改变同步于mask,进而"mask&授权的ACL"得到有效的ACL!

&(与)的理解:1&0=0,0&0=0,1&1=1(四种情况),这样显然真实的ACL权限在mask的权限控制之下!

mask的概念:文件的访问权限的上限

mask的作用:如果说ACL的优先级高于ugo,那么mask就是一个名副其实的最后一道防线,它决定了一个用户/组(ACL授权的)

能够得到的最大的ACL权限,这样我们在不破坏已有ACL的定义的基础上,可以临时提高或是降低安全级别

注意1:mask只对授权其他用户和组(ACL)权限有有影响,对owner和other的权限是没有任何影响的!

说明:  因为在使用了ACL的情况下,group的权限(复合的<---->虚假的)显示的就是当前的mask

注意2:每次修改或添加某个用户或组的ACL项的时候,mask都会随之修改以使最新的修改能够真正生效!

计算方式:实际用户可操作的ACL权限=上一次的mask与(&)当前授权用户预设的ACL(在可以控制的范围内)->理解这个很重要!

侧面说明:mask是在动态变化的!

进一步需求(后续补充):所以如果需要一个比较严格的mask的话,可能需要每次都重新设置一下mask!

相关链接

(3)取消ACL列表权限

setfacl -b  file                  --->关闭file上的acl列表

场景1:不管以前授予ACL给多少用户,统统回收特权!

setfacl -x u:user file            --->从acl列表上删除user对file的acl

场景2:对多个不同的用户(不在同一个组)进行acl,授予一段时间后,想取消部分用户的ACL权限!

setfacl -x g:组名 指定文件名        --->去掉指定用户组对文件的权限

场景3:对多个用户(在同一个用户组)进行ACL,不用单个取消,批处理!

(4)特殊情况的说明-->涉及mask相关的数值

测试:

改变ACL后------>chmod {u、g、o} dir|file 

观察实验现象

结论:只有chmod g-{r|w|x} dir|file 才能改变mask数值!

(5)高级的ACL权限列表的设置

核心点--->针对目录

(1)对目录下已存在的文件,递归的改变目录即及当前下内容ACL的权限!

(2)对目录下新建的文件,授予默认的ACL权限

链接1:mask最大有效访问权限

总结

(1)u+s 权限 :suid, 冒险位

效果 : 只针对于二进制可执行文件 , 该命令发起的程序是以该命
令所有人的身份去执行。

(2)g+s 权限 : 强制位

效果 : 针对二进制可执行文件 : 该命令发起的程序是以该命令所
有组的身份去执行 ;

(3)o+t 权限 :sticky, 粘制位

效果 : 只针对于目录 , 当目录上有 o+t 的权限时 , 所有用户在该目录下均可创建文件 , 但只有文件所有人和 root 用户可以删除该目录下的文件

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值