• chkconfig命令


    Linux下chkconfig命令详解

    chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息。谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接。

    使用语法:
    chkconfig [--add][--del][--list][系统服务] 或 chkconfig [--level <等级代号>][系统服务][on/off/reset]

    chkconfig在没有参数运行时,显示用法。如果加上服务名,那么就检查这个服务是否在当前运行级启动。如果是,返回true,否则返回false。如果在服务名后面指定了on,off或者reset,那么chkconfi 会改变指定服务的启动信息。on和off分别指服务被启动和停止,reset指重置服务的启动信息,无论有问题的初始化脚本指定了什么。on和off开关,系统默认只对运行级3,4,5有效,但是reset可以对所有运行级有效。

    参数用法:
       --add  增加所指定的系统服务,让chkconfig指令得以管理它,并同时在系统启动的叙述文件内增加相关数据。
       --del  删除所指定的系统服务,不再由chkconfig指令管理,并同时在系统启动的叙述文件内删除相关数据。
       --level<等级代号>  指定读系统服务要在哪一个执行等级中开启或关毕。
          等级0表示:表示关机
          等级1表示:单用户模式
          等级2表示:无网络连接的多用户命令行模式
          等级3表示:有网络连接的多用户命令行模式
          等级4表示:不可用
          等级5表示:带图形界面的多用户模式
          等级6表示:重新启动
          需要说明的是,level选项可以指定要查看的运行级而不一定是当前运行级。对于每个运行级,只能有一个启动脚本或者停止脚本。当切换运行级时,init不会重新启动已经启动的服务,也不会再次去停止已经停止的服务。

        chkconfig --list [name]:显示所有运行级系统服务的运行状态信息(on或off)。如果指定了name,那么只显示指定的服务在不同运行级的状态。
        chkconfig --add name:增加一项新的服务。chkconfig确保每个运行级有一项启动(S)或者杀死(K)入口。如有缺少,则会从缺省的init脚本自动建立。
        chkconfig --del name:删除服务,并把相关符号连接从/etc/rc[0-6].d删除。
        chkconfig [--level levels] name:设置某一服务在指定的运行级是被启动,停止还是重置。

    运行级文件:
    每个被chkconfig管理的服务需要在对应的init.d下的脚本加上两行或者更多行的注释。第一行告诉chkconfig缺省启动的运行级以及启动和停止的优先级。如果某服务缺省不在任何运行级启动,那么使用 - 代替运行级。第二行对服务进行描述,可以用 跨行注释。
    例如,random.init包含三行:
    # chkconfig: 2345 20 80
    # description: Saves and restores system entropy pool for
    # higher quality random number generation.

    使用范例:
    chkconfig --list        #列出所有的系统服务
    chkconfig --add httpd        #增加httpd服务
    chkconfig --del httpd        #删除httpd服务
    chkconfig --level httpd 2345 on        #设置httpd在运行级别为2、3、4、5的情况下都是on(开启)的状态
    chkconfig --list        #列出系统所有的服务启动情况
    chkconfig --list mysqld        #列出mysqld服务设置情况
    chkconfig --level 35 mysqld on        #设定mysqld在等级3和5为开机运行服务,--level 35表示操作只在等级3和5执行,on表示启动,off表示关闭
    chkconfig mysqld on        #设定mysqld在各等级为on,“各等级”包括2、3、4、5等级

    如何增加一个服务:
    1.服务脚本必须存放在/etc/ini.d/目录下;
    2.chkconfig --add servicename
        在chkconfig工具服务列表中增加此服务,此时服务会被在/etc/rc.d/rcN.d中赋予K/S入口了;
    3.chkconfig --level 35 mysqld on
        修改服务的默认启动等级。

     
     
    redhat中的chkconfig
     

    1. chkconfig是redhat中的服务配置工具

    2. 要使不在chkconfig目录中的服务支持该命令,需要改该服务脚本的工具

      例如:/etc/init.d/sshd

      1.注释中必须有这两行 (chkconfig会查看所有注释行)

        # chkconfig: 2345 55 25       # description: SSH is a protocol for secure remote shell access. 描述文件

        1.chkconfig参数1:表示在运行级别2345中默认代开 使用-表示默认关闭

        2.chkconfig参数2:S55

        3.chkconfig参数3:K45

      2. 要在服务脚本中实现POSIX规范中的函数:start() stop()等

      3.这时可以使用 service xxxx(脚本名)  start/stop等命令立刻启动或关闭

    3.要使该脚本每次启动都生效

      1.chkconfig --add xxxx注册服务名

        1.chkconfig会根据该脚本的信息,自动到相应运行级rcX.d中创建链接

      2.chkconfig xxxx off 配置系统启动时该脚本默认关闭

      3.chkconfig xxxx on 配置系统启动时该脚本默认启动

        

    4.chkconfig中的特殊服务xinetd ,xinetd服务下挂载一系列服务 ,脚本放在/etc/xinetd.d/

      1.要启动xinetd挂在的服务

        1.chkconfig xinetd on

        2.chkconfig  xxx on

        3.service xxx start  

    chkconfig命令

    1.chkconfig是一个改变开机启动项的命令,修改/etc/rc[0-6].d文件夹下的内容

    2.chkconfig命令有5种不同的作用:增加新的服务、删除服务、打印当前开启启动服务的信息、修改开启启动服务的信息、检查一个指定服务的状态

    3.当chkconfig servicename时,它检查这个服务是不是在当前的runlevel下被开启启动,如果是,返回true,否则false。chkconfig --level= servicename检查服务是不是在指定的runlevel开机启动

    4.当chkconfig --list时,或者完全没有参数即chkconfig时,会列出当前的服务和他们的配置

    5.如果on、off、reset、resetpriorities参数之一被指定时(在服务名参数后面),chkconfig命名改变这个服务的开机配置。on/off使服务开机启动/停止。reset标志重置on/off不论在开机启动脚本中是什么样子的,resetpriorities也是,只是有优先级

    6.默认,on/off命令支队runlevel为2,3,4,5的有影响,而reset和resetpriorities对所有runlevels都有影响。--level参数可以指定被影响的runlevel

    7.对每个服务,每个runlevel都有1个start/stop脚本。当change runlevel时,init进程不会重启一个already-start的服务,也不会重新关闭一个already-stop的服务

    chkconfig 检查和设置系统的各种服务。
    语法:chkconfig [--add][--del][--list][系统服务] :增、删、查系统服务(/etc/【rc.d】/init.d/……)
           chkconfig [--level <等级代号>] [系统服务][on/off/reset]         :开启关闭重置系统服务
     --level<等级代号> 指定读系统服务要在哪一个执行等级中开启或关闭。 
     level
        abrt-ccpp       0:关闭  1:关闭  2:关闭  3:启用  4:关闭  5:启用  6:关闭
        abrt-oops       0:关闭  1:关闭  2:关闭  3:启用  4:关闭  5:启用  6:关闭
        abrtd           0:关闭  1:关闭  2:关闭  3:启用  4:关闭  5:启用  6:关闭
        等级0表示:表示关机
      等级1表示:单用户模式
      等级2表示:无网络连接的多用户命令行模式
      等级3表示:有网络连接的多用户命令行模式
      等级4表示:不可用
      等级5表示:带图形界面的多用户模式
      等级6表示:重新启动
    
    chkconfig 没有参数运行时,显示用法。如果加上服务名,那么就检查这个服务是否在当前运行级启动。
    如果是,返回true,否则返回false。
    如果在服务名后面指定了on,off或者reset,那么chkconfi 会改变指定服务的启动信息。
    on和off分别指服务被启动和停止,reset指重置服务的启动信息,无论有问题的初始化脚本指定了什么。
    on和off开关,系统默认只对运行级3,4,5有效,但是reset可以对所有运行级有效
    
        chkconfig svnserved on
        svnserved       0:关闭  1:关闭  2:启用  3:启用  4:启用  5:启用  6:关闭
        chkconfig svnserved on
        svnserved       0:关闭  1:关闭  2:关闭  3:关闭  4:关闭  5:关闭  6:关闭
    


    Linux下启动,停止apache服务

    本文假设你的apahce安装目录为/usr/local/apache2,这些方法适合任何情况   apahce启动命令:      /usr/local/apache2/bin/apachectl start apaceh启动 apache停止命令      /usr/local/apache2/bin/apachectl stop   停止 apache重新启动命令:      /usr/local/apache2/bin/apachectl restart 重启  要在重启 Apache 服务器时不中断当前的连接,则应运行: 

        /usr/local/sbin/apachectl graceful    如果apache安装成为linux的服务的话,可以用以下命令操作:      service httpd start 启动 

        service httpd restart 重新启动 

        service httpd stop 停止服务

    当一个人找不到出路的时候,最好的办法就是将当前能做好的事情做到极致,做到无人能及。

     

    chkconfig命令

    chkconfig

    功能说明:检查,设置系统的各种服务。

    语  法:chkconfig

    [--add][--del][--list][系统服务]或chkconfig[--level<等级代号>][系统服务][on/off/reset]

    补充说明:这是RedHat公司遵循GPL规则所开发的程序,它可查询操作系统在每一个执行等级中会执行哪些系统服务,其中包括各类常驻服务。

    参  数:

     --add 增加所指定的系统服务,让chkconfig指令得以管理它,并同时在系统启动的叙述文件内增加相关数据。

     --del 删除所指定的系统服务,不再由chkconfig指令管理,并同时在系统启动的叙述文件内删除相关数据。

     --level<等级代号> 指定读系统服务要在哪一个执行等级中开启或关毕

    1:chkconfig 命令也可以用来激活和解除服务。chkconfig --list 命令显示系统服务列表,以及这些服务在运行级别0到6中已被启动(on)还是停止(off)。

    chkconfig --list

    chkconfig --list httpd

    httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off

    2:chkconfig 还能用来设置某一服务在某一指定的运行级别内被启动还是被停运。譬如,要在运行级别3、4、5中停运 nscd 服务,使用下面的命令:

    chkconfig --level 345 nscd off

    3:由 xinetd 管理的服务会立即被 chkconfig 影响。譬如,如果 xinetd 在运行,finger 被禁用,那么执行了 chkconfig finger on 命令后,finger 就不必手工地重新启动 xinetd 来立即被启用。对其它服务的改变在使用 chkconfig 之后不会立即生效。必须使用service servicename  start/stop/restart命令来重起服务

    ]Linux中如何自动启动服务
    
    
    linux自动启动服务很简单,最简单的是把启动命令放到/etc/rc.d/rc.local文件里。这样就可以每次启动的时候自动启动服务了。例如对于 apache,编译好apache后会在安装目录的bin下生成apachectl文件,这是个启动脚本,我们只需要把这个命令加到rc.local里就可以了:
    echo /usr/local/apache/bin/apachectl >> /etc/rc.d/rc.local
    
    此外我们还可以使用chkconfig命令来把某项服务加到系统的各项运行级别中,步骤如下:
    1 创建启动脚本,对于apache、mysql、ssh这样的软件都是自己带的,我们只要稍微修改一下使之支持chkconfig就可以了
    2 修改脚本
    我们需要在脚本的前面加上2行,才能支持chkconfig命令
    # chkconfig: 2345 08 92
    # description: Automates a packet filtering firewall with ipchains.
    
    chkconfig:后面定义的使启动服务的运行级别(例子中使2345启动该服务),以及关闭和启动服务的顺序(上例中启动服务的顺序是8,关闭的顺序是92)。
    descriptions:对该服务的描述(上例中是ipchains包过滤),你可以换成自己想要的
    
    修改好之后执行
    cp 你的脚本 /etc/rc.d/init.d/脚本名
    chmod 700 /etc/rc.d/init.d/脚本名
    chkconfig --add 脚本名
    以后每次重新启动服务器都会自动启动和关闭我们的服务了
    
    
    而且你执行setup之后也可以看到我们添加的服务,选中我们添加的服务按F1键还可以看到我们定制的信息。 
    
    附chkconfig命令:
    
      chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息。谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接。
    
    语法:
    
        chkconfig --list [name]
        chkconfig --add name
        chkconfig --del name
        chkconfig [--level levels] name <on|off|reset>
        chkconfig [--level levels] name
    
        chkconfig 没有参数运行时,显示用法。如果加上服务名,那么就检查这个服务是否在当前运行级启动。如果是,返回true,否则返回false。如果在服务名后面指定 了on,off或者reset,那么chkconfi 会改变指定服务的启动信息。on和off分别指服务被启动和停止,reset指重置服务的启动信息,无论有问题的初始化脚本指定了什么。on和off开 关,系统默认只对运行级3,4,5有效,但是reset可以对所有运行级有效。
    
        --level选项可以指定要查看的运行级而不一定是当前运行级。
    
        需要说明的是,对于每个运行级,只能有一个启动脚本或者停止脚本。当切换运行级时,init不会重新启动已经启动的服务,也不会再次去停止已经停止的服务。
    
        chkconfig --list :显示所有运行级系统服务的运行状态信息(on或off)。如果指定了name,那么只显示指定的服务在不同运行级的状态。
    
    
        chkconfig --add name:增加一项新的服务。chkconfig确保每个运行级有一项启动(S)或者杀死(K)入口。如有缺少,则会从缺省的init脚本自动建立。
    
        chkconfig --del name:删除服务,并把相关符号连接从/etc/rc[0-6].d删除。
        chkconfig [--level levels] name <on|off|reset>:设置某一服务在指定的运行级是被启动,停止还是重置。例如,要在3,4,5运行级停止nfs服务,则命令如下:
        chkconfig --level 345 nfs off
    
    
    运行级文件:
    
        每个被chkconfig管理的服务需要在对应的init.d下的脚本加上两行或者更多行的注释。第一行告诉chkconfig缺省启动的运行级以及启动和停止的优先级。如果某服务缺省不在任何运行级启动,那么使用 - 代替运行级。第二行对服务进行描述,可以用 跨行注释。
    例如,random.init包含三行:
    # chkconfig: 2345 20 80
    # description: Saves and restores system entropy pool for 
    
    # higher quality random number generation.
    此例子表明random服务的缺省启动运行级在2、3、4、5级,启动的优先级(顺序号)是20,停止的优先级(顺序号)是80。
    
    附加介绍一下Linux系统的运行级的概念:
    
        Linux中有多种运行级,常见的就是多用户的2,3,4,5 ,很多人知道5是运行X-Windows的级别,而0就是关机了。运行级的改变可以通过init命令来切换。例如,假设你要维护系统进入单用户状态,那么,可以使用init1来切换。在Linux的运行级的切换过程中,系统会自动寻找对应运行级的目录/etc/rc[0-6].d下的K和S开头的文件, 按后面的数字顺序,执行这些脚本。对这些脚本的维护,是很繁琐的一件事情,Linux提供了chkconfig命令用来更新和查询不同运行级上的系统服务 
    


    Linux服务器常用启动服务的命令

     
    amba是Linux下提供的类Windows下"网络邻居"的服务。一般只有启动的时候安装了才可以启用。不过大部分Linux在安装时就已经包含了这个软件包,在启动时自动启动了服务,不过我们也可以手动启动这个服务。

    一般的Linux系统,服务一般配置在/etc/init.d或者/etc/rc.d/init.d文件夹下,国产RedFlag Linux干脆两个目录下都有对应的服务,只是/etc/init.d下面的配置成系统默认的。

    PS:RedFlag Linux还兼容Dos命令,看来是不遗余力的纵容了用户的习惯。

    下面是我在RedFlag Linux的两个服务目录下看到的(保留部分有代表性的):

    $ ls /etc/init.d $ ls /etc/rc.d/init.d 说明
    dhcpd dhcpd DHCP服务
    httpd httpd WEB服务
    ldap ldap 轻量级目录服务
    mysqld mysqld Mysql数据库服务
    proftpd proftpd FTP服务
    sendmail sendmail 邮件服务
    smb smb 网络文件服务
    sshd sshd SSH服务

    每个服务的启动:/etc/init.d/{服务名} start或者/etc/rc.d/init.d/{服务名} start 每个服务的停止:/etc/init.d/{服务名} stop或者/etc/rc.d/init.d/{服务名} stop 每个服务的重启:/etc/init.d/{服务名} restart或者/etc/rc.d/init.d/{服务名} restart

    比如对samba服务进行操作(对应服务名smb):

    每个服务的启动:/etc/init.d/smb start或者/etc/rc.d/init.d/smb start
    每个服务的停止:/etc/init.d/smb stop或者/etc/rc.d/init.d/smb stop
    每个服务的重启:/etc/init.d/smb restart或者/etc/rc.d/init.d/smb restart
    linux开机启动服务的修改与查看 
    
    
    
    
    首先了解linux的运行级别有哪些?
    6个运行级别
    
            # 0 - 停机(千万不要把initdefault设置为0 ) 
        # 1 - 单用户模式 
        # 2 - 多用户,但是没有NFS 
        # 3 - 完全多用户模式 
        # 4 - 没有用到 
        # 5 - X11 
        # 6 - 重新启动(千万不要把initdefault设置为6 ) 
        # 对各个运行级的详细解释: 
        0 为停机,机器关闭。 
        1 为单用户模式,就像Win9x下的安全模式类似。 
        2 为多用户模式,但是没有NFS支持。 
        3 为完整的多用户模式,是标准的运行级。 
        4 一般不用,在一些特殊情况下可以用它来做一些事情。例如在笔记本电脑的电池用尽时,可以切换到这个模式来做一些设置。 
        5 就是X11,进到X Window系统了。 
        6 为重启,运行init 6机器就会重启。 
    修改级别
    vi /etc/inittab
    把id:3:initdefault:中的3改为相应的级别
    
    
    
    每次系统开机的时候,都会根据不同的runlevel级别启动不同的服务。
    开机按[CTRL]+[ALT]+[F7]/[F8]可查看系统启动时正在启动的服务!!!!
      众所周知Linux给我们提供了7中不同的启动级别0~6,那么不同的启动级别都会启动那些服务哪。可以使用chkconfig ——list 查看,可以使用chkconfig 服务名 ——level 3 {on|of}修改是否要再某个级别启动或停止。
      1. 例如:要把sshd服务在第3种启动级别中停止。
    [root@team4 rc3.d]# chkconfig sshd --level 3 off 中国网管联盟www.bitscn.com
      2. 还可以手工修改,在/etc/rc.d/这个目录里有很多不同runlevel对应的目录,里面表明进入某个启动级别时要启动和停止那些服务。
      例如: 中国网管联盟www、bitsCN、com
    [root@team4 etc]# ls /etc/rc.d
    init.d  rc0.d  rc2.d  rc4.d  rc6.d     rc.sysinit
    rc      rc1.d  rc3.d  rc5.d  rc.local
    我们用rc3.d这个目录为例,这个目录里面记录的是进入init 3时需要停止和启动那些服务。
    下面为rc3.d目录的内容:
    [root@team4 etc]# ls /etc/rc.d/rc3.d/
    K02avahi-dnsconfd            K89pand             S25bluetooth
    K02dhcdbd                    K89rdisc            S25netfs
    K02NetworkManager            K91capi             S25pcscd
    K02NetworkManagerDispatcher  K99readahead_later  S26apmd
    K05conman                    S04readahead_early  S26hidd
      K开头代表这个启动级别需要停止的服务,编号是停止的时候执行的顺序,再后面就是服务明了。
      S开头则是要启动那些服务。 网管网bitsCN_com
      注意:先执行K开头的,后执行S开头的。所以S开头的服务会覆盖K开头的服务。
    Linux设置程序的开机自启动与Linux服务
    这里只说我所知道的,举例如下
    需求是我要用Windows下的VNC Viewer连接到Linux Server. 我在Linux下面输入
    #vncserver
    设置好密码,好现在我就可以在Windows下面使用VNC连接到Linux桌面了,这个时候如果我的Linux Server系统重启了,那么我还得再敲一次vncserver这个命令,所以我现在要让Linux Server在开机时自动启动vncserver
    有哪些方法呢?
    1. 我可以把vncserver设置成系统的服务,并启动起来,使用如下命令查看vncserver是否已经是系统的服务
    #chkconfig --list|grep vnc
    vncserver    0:off 1:off 2:off 3:off 4:off 5:off 6:off
    现在我们要设置vncserver开机自启动,使用如下命令
    #chkconfig --level 5 vncserver on#chkconfig --list|grep vnc
    vncserver    0:off 1:off 2:off 3:off 4:off 5:on 6:off
    这个时候重启系统,那么vncserver就会以服务的方式自动起来,但是现在如果想立即使用vnc则直接敲命令 vncserver即可
    2. 我们可以把vncserver这条命令写在Linux开机要运行的脚本里面,那些脚本是Linux开机时要执行的呢?
    我知道的有以下这些:
    /etc/rc.local
    /etc/rc.sysinit
    /etc/inittab
    /etc/profile
    这里记住Linux服务于Linux开机自启动之间的区别和联系。
    

    RedHat Linux下注册Apache为系统服务并设为开机启动

    1、系统环境:

    操作系统:Red Hat Enterprise Linux Server release 5.4

    Apache版本:httpd-2.2.19

    2、注册服务

    #将apachectl复制到init.d目录下

    [root@bogon ~]# cp /usr/local/apache2/bin/apachectl /etc/rc.d/init.d/httpd

    #修改httpd

    [root@bogon ~]# vi /etc/init.d/httpd

    #找到#!/bin/sh,另起一行增加以下内容,并保存(:wq!)退出。

    #chkconfig:345 85 15 

    #description:Start and stop the Apache HTTP Server 

    【说明】:在注册过程中增加#chkconfig:35 70 30,再通过chkconfig --add httpd注册服务时,报如下错误service httpd does not support chkconfig,修改为chkconfig: 2345 10 90即可正常注册。

    #注册服务

    [root@bogon init.d]# chkconfig --add httpd

    [root@bogon init.d]# chkconfig httpd on

    3、通过服务方式启动、停止Apache

    #启动、重启、停止服务

    启动服务:service httpd start

    停止服务:service httpd stop

    重新启动:service httpd restart

    4、设为开机启动

    在/etc/rc.d/rc.local中增加启动apache的命令,例如:/usr/local/apache2/bin/apachectl start

    源码安装apache及配置转发 
    
    一、    安装Apache 
     a)    解压:tar -xvf httpd-*; 
    b)    ./configure --prefix=/usr/oracle/apache CC="gcc -m32" --enable-proxy=shared --enable-proxy-http=shared --enable-proxy-ftp=shared --enable-proxy-connect=shared --enable-so --enable-modules=all --enable-mods-shared=all 
     c)    make 
     d)    make install 
    
    基本的操作方法: 
     本文假设你的apahce安装目录为/usr/local/apache2,这些方法适合任何情况 
    
    apahce启动命令: 
     推荐/usr/local/apache2/bin/apachectl start apaceh启动 
    
    apache停止命令 
    /usr/local/apache2/bin/apachectl stop   停止 
    
    apache重新启动命令: 
    /usr/local/apache2/bin/apachectl restart 重启 
    
     要在重启 Apache 服务器时不中断当前的连接,则应运行: 
    
    /usr/local/sbin/apachectl graceful 
    
    如果apache安装成为linux的服务的话,可以用以下命令操作: 
    
    service httpd start 启动 
    
    service httpd restart 重新启动 
    
    service httpd stop 停止服务 
    
     配置转发功能 
    
     打开apache安装目录的conf文件夹下的httpd.conf 
    
     1、将以下两行前的注释字符 # 去掉: 
    
    #LoadModule proxy_module modules/mod_proxy.so 
    
     #LoadModule proxy_http_module modules/mod_proxy_http.so 
    
     2、在httpd.conf 文件的最后加上转发规则 
    
     例如: 
    
    ProxyPass /cas http://192.168.0.206:9090/cas 
    
     ProxyPassReverse /cas  http://192.168.0.206:9090/cas 
    
    将/cas开头的请求转发到206服务器9090端口的cas上 
    
     依次类推,其他的转发也是通过这种方式设置,如: 
    
    ProxyPass /cas http://192.168.0.206:9090/cas 
    
     ProxyPassReverse /cas  http://192.168.0.206:9090/cas 
    
     #bbs不转发,采用apache处理 
    
    
    ProxyPass /bbs ! 
    
    ProxyPassReverse /bbs  ! 
    
  • 相关阅读:
    第二次冲刺阶段第九天
    第二次冲刺阶段第八天
    第二次冲刺阶段第七天
    学习进度条(十三)
    第二次冲刺阶段第六天
    团队冲刺(二)个人工作总结3
    学习进度表第十四周
    团队冲刺(二)个人工作总结2
    团队冲刺(二)个人工作总结1
    买书折扣问题
  • 原文地址:https://www.cnblogs.com/qmfsun/p/3847459.html
Copyright © 2020-2023  润新知