• linux常用命令


    目录

    一、解压缩

    二、ftp

    三、常用快捷键

    四、chkconfig命令

    五、netstat命令

    ——————————————————————————————————————————————————————————————————————

    一、解压缩

    1、war包

    (1)打包

    格式:jar [参数] 包名.war 目标文件路径

    参数:

    -c  创建war包

    -v  显示过程信息

    -f  指定 JAR 文件名,通常这个参数是必须的

    -M  不产生所有项的清单(MANIFEST〕文件,此参数会忽略 -m 参数

    -0  这个是阿拉伯数字,只打包不压缩的意思

    例子:jar -xvf project.war /project_a :把project_a文件夹下的文件打包成project.war

    (2)解压

    jar -xvf project.war

    2、zip包

    (1)打包zip

    功能说明:压缩文件。

    语  法:zip [-AcdDfFghjJKlLmoqrSTuvVwXyz$][-b <工 作目录>][-ll][-n <字 尾字符串>][-t <日 期时间>][-<压 缩效率>][压 缩文件][文件...][-i <范本样式>][-x <范本样式>]
    补充说明:zip是个使用广泛的压缩程序,文件经它压缩后会另外产生具 有".zip"扩展名 的压缩文件。
    参  数:
    -A   调 整可执行的自动解压缩文件。
    -b<工作目录>   指 定暂时存放文件的目录。
    -c   替 每个被压缩的文件加上注释。
    -d   从 压缩文件内删除指定的文件。
    -D   压 缩文件内不建立目录名称。
    -f   此 参数的效果和指定"-u"参 数类似,但不仅更新既有文件,如果某些文件原本不存在于压缩文件内,使用本参数会一并将其加入压缩文件中。
    -F   尝 试修复已损坏的压缩文件。
    -g   将 文件压缩后附加在既有的压缩文件之后,而非另行建立新的压缩文件。
    -h   在 线帮助。
    -i<范本样式>   只 压缩符合条件的文件。
    -j   只 保存文件名称及其内容,而不存放任何目录名称。
    -J   删 除压缩文件前面不必要的数据。
    -k   使 用MS-DOS兼容格 式的文件名称。
    -l   压 缩文件时,把LF字符 置换成LF+CR字 符。
    -ll   压 缩文件时,把LF+CR字 符置换成LF字符。
    -L   显 示版权信息。
    -m   将 文件压缩并加入压缩文件后,删除原始文件,即把文件移到压缩文件中。
    -n<字尾字符串>   不 压缩具有特定字尾字符串的文件。
    -o   以 压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该文件相同。
    -q   不显 示指令执行过程。
    -r   递 归处理,将指定目录下的所有文件和子目录一并处理。
    -S   包 含系统和隐藏文件。
    -t<日期时间>   把 压缩文件的日期设成指定的日期。
    -T   检 查备份文件内的每个文件是否正确无误。
    -u   更 换较新的文件到压缩文件内。
    -v   显 示指令执行过程或显示版本信息。
    -V   保 存VMS操作系统的文 件属性。
    -w   在 文件名称里假如版本编号,本参数仅在VMS操 作系统下有效。
    -x<范本样式>   压 缩时排除符合条件的文件。
    -X   不 保存额外的文件属性。
    -y   直 接保存符号连接,而非该连接所指向的文件,本参数仅在UNIX之 类的系统下有效。
    -z   替 压缩文件加上注释。
    -$   保 存第一个被压缩文件所在磁盘的卷册名称。
    -<压缩效率>   压 缩效率是一个介于1-9的 数值。
     
    例.   将当前目录下的所有文件和文件夹全部压缩成test.zip文件,-r表示递归压缩子目录下所有文件
    [root@mysql test]# zip -r test.zip ./*

    (2)解压unzip 

    功 能说明:解压缩zip文 件

    语  法:unzip [-cflptuvz][-agCjLMnoqsVX][-P <密 码>][.zip文 件][文件][-d <目录>][-x <文件>] 或 unzip [-Z]
    补充说明:unzip为.zip压缩文件的解压缩程序。
    参  数:
    -c   将 解压缩的结果显示到屏幕上,并对字符做适当的转换。
    -f   更 新现有的文件。
    -l   显 示压缩文件内所包含的文件。
    -p   与-c参数类似,会将解压缩的结果显示到屏幕上,但不会执行任 何的转换。
    -t   检 查压缩文件是否正确。,但不解压。
    -u   与-f参数类似,但是除了更新现有的文件外,也会将压缩文件中 的其他文件解压缩到目录中。
    -v   执 行是时显示详细的信息。或查看压缩文件目录,但不解压。
    -z   仅 显示压缩文件的备注文字。
    -a   对 文本文件进行必要的字符转换。
    -b   不 要对文本文件进行字符转换。
    -C   压 缩文件中的文件名称区分大小写。
    -j   不 处理压缩文件中原有的目录路径。
    -L   将 压缩文件中的全部文件名改为小写。
    -M   将 输出结果送到more程 序处理。
    -n   解 压缩时不要覆盖原有的文件。
    -o   不 必先询问用户,unzip执 行后覆盖原有文件。
    -P<密码>   使 用zip的密码选项。
    -q   执 行时不显示任何信息。
    -s   将 文件名中的空白字符转换为底线字符。
    -V   保 留VMS的文件版本信 息。
    -X   解 压缩时同时回存文件原来的UID/GID。
    [.zip文件]   指定.zip压缩文件。
    [文件]   指定 要处理.zip压缩文 件中的哪些文件。
    -d<目录>   指 定文件解压缩后所要存储的目录。
    -x<文件>   指 定不要处理.zip压 缩文件中的哪些文件。
    -Z   unzip -Z等 于执行zipinfo指 令。
    3、tar

    tar

    -c: 建立压缩档案
    -x:解压
    -t:查看内容
    -r:向压缩归档文件末尾追加文件
    -u:更新原压缩包中的文件

    这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。

    -z:有gzip属性的
    -j:有bz2属性的
    -Z:有compress属性的
    -v:显示所有过程
    -O:将文件解开到标准输出

    下面的参数-f是必须的

    -f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。

    # tar -cf all.tar *.jpg
    这条命令是将所有.jpg的文件打成一个名为all.tar的包。-c是表示产生新的包,-f指定包的文件名。

    # tar -rf all.tar *.gif
    这条命令是将所有.gif的文件增加到all.tar的包里面去。-r是表示增加文件的意思。

    # tar -uf all.tar logo.gif
    这条命令是更新原来tar包all.tar中logo.gif文件,-u是表示更新文件的意思。

    # tar -tf all.tar
    这条命令是列出all.tar包中所有文件,-t是列出文件的意思

    # tar -xf all.tar
    这条命令是解出all.tar包中所有文件,-t是解开的意思

    压缩

    tar -cvf jpg.tar *.jpg //将目录里所有jpg文件打包成tar.jpg 

    tar -czf jpg.tar.gz *.jpg   //将目录里所有jpg文件打包成jpg.tar后,并且将其用gzip压缩,生成一个gzip压缩过的包,命名为jpg.tar.gz

     tar -cjf jpg.tar.bz2 *.jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用bzip2压缩,生成一个bzip2压缩过的包,命名为jpg.tar.bz2

    tar -cZf jpg.tar.Z *.jpg   //将目录里所有jpg文件打包成jpg.tar后,并且将其用compress压缩,生成一个umcompress压缩过的包,命名为jpg.tar.Z

    rar a jpg.rar *.jpg //rar格式的压缩,需要先下载rar for linux

    zip jpg.zip *.jpg //zip格式的压缩,需要先下载zip for linux

    解压

    tar -xvf file.tar //解压 tar包

    tar -xzvf file.tar.gz //解压tar.gz

    tar -xjvf file.tar.bz2   //解压 tar.bz2

    tar -xZvf file.tar.Z   //解压tar.Z

    unrar e file.rar //解压rar

    unzip file.zip //解压zip

    总结

    1、*.tar 用 tar -xvf 解压

    2、*.gz 用 gzip -d或者gunzip 解压

    3、*.tar.gz和*.tgz 用 tar -xzf 解压

    4、*.bz2 用 bzip2 -d或者用bunzip2 解压

    5、*.tar.bz2用tar -xjf 解压

    6、*.Z 用 uncompress 解压

    7、*.tar.Z 用tar -xZf 解压

    8、*.rar 用 unrar e解压

    9、*.zip 用 unzip 解压

    二、ftp

    如果linux上没有安装ftp,ftp命令是不可用的。安装ftp命令:

    yum install ftp

    1. 连接ftp服务器

    格式:ftp [hostname| ip-address]
    a)在linux命令行下输入:

    ftp 192.168.1.1

    b)服务器询问你用户名和密码,分别输入用户名和相应密码,待认证通过即可。

    2. 下载文件

    下载文件通常用get和mget这两条命令。
    a) get 
    格式:get [remote-file] [local-file]
    将文件从远端主机中传送至本地主机中。
    如要获取远程服务器上/usr/your/1.htm,则

    ftp> get /usr/your/1.htm 1.htm (回车)


    b) mget      
    格式:mget [remote-files]
    从远端主机接收一批文件至本地主机。
    如要获取服务器上/usr/your/下的所有文件,则

    ftp> cd /usr/your/
    ftp> mget *.* (回车)


    此时每下载一个文件,都会有提示。如果要除掉提示,则在mget *.* 命令前先执行:prompt off

    注意:文件都下载到了linux主机的当前目录下。比如,在 /usr/my下运行的ftp命令,则文件都下载到了/usr/my下。

    3.上传文件

    a) put
    格式:put local-file [remote-file]
    将本地一个文件传送至远端主机中。
    如要把本地的1.htm传送到远端主机/usr/your,并改名为2.htm

    ftp> put 1.htm /usr/your/2.htm (回车)


    b) mput
    格式:mput local-files
    将本地主机中一批文件传送至远端主机。
    如要把本地当前目录下所有html文件上传到服务器/usr/your/ 下

    ftp> cd /usr/your (回车)
    ftp> mput *.htm (回车)


    注意:上传文件都来自于主机的当前目录下。比如,在 /usr/my下运行的ftp命令,则只有在/usr/my下的文件linux才会上传到服务器/usr/your 下。

    4. 断开连接
    bye:中断与服务器的连接。

    ftp> bye (回车)

    三、linux中快捷键

    1、shift+G:打开文件后,shift+G到达文件底部

    四、chkconfig命令

    chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息。谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接。
     
    语法:
        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 <on|off|reset>:设置某一服务在指定的运行级是被启动,停止还是重置。例如,要在3,4,5运行级停止nfs服务,则命令如下:
        chkconfig --level 345 nfs off
        chkconfig 没有参数运行时,显示用法。如果加上服务名,那么就检查这个服务是否在当前运行级启动。如果是,返回true,否则返回false。如果在服务名后面指定了on,off或者reset,那么chkconfig会改变指定服务的启动信息。on和off分别指服务被启动和停止,reset指重置服务的启动信息。on和off开关,系统默认只对运行级3,4,5有效,但是reset可以对所有运行级有效。 --level选项可以指定要查看的运行级而不一定是当前运行级。
     需要说明的是,对于每个运行级,只能有一个启动脚本或者停止脚本。当切换运行级时,init不会重新启动已经启动的服务,也不会再次去停止已经停止的服务。
     
    运行级文件:
        每个被chkconfig管理的服务需要在对应的init.d下的脚本加上两行或者更多行的注释。第一行告诉chkconfig缺省启动的运行级以及启动和停止的优先级。如果某服务缺省不在任何运行级启动,那么使用 - 代替运行级。第二行对服务进行描述,可以用/ 跨行注释。
    例如,random.init包含三行:
    # chkconfig: 2345 20 80
    # description: Saves and restores system entropy pool for /
    # higher quality random number generation.
    附加介绍一下Linux系统的运行级的概念:
       (1) Linux中有多种运行级,常见的就是多用户的2,3,4,5 ,很多人知道5是运行X-Windows的级别,而0就是关机了。运行级的改变可以通过init命令来切换。例如,假设你要维护系统进入单用户状态,那么,可以使用init1来切换。在Linux的运行级的切换过程中,系统会自动寻找对应运行级的目录/etc/rc[0-6].d下的K和S开头的文件,按后面的数字顺序,执行这些脚本。对这些脚本的维护,是很繁琐的一件事情,Linux提供了chkconfig命令用来更新和查询不同运行级上的系统服务。
     (2)--level<等级代号>  指定读系统服务要在哪一个执行等级中开启或关毕。
          等级0表示:表示关机
          等级1表示:单用户模式
          等级2表示:无网络连接的多用户命令行模式
          等级3表示:有网络连接的多用户命令行模式
          等级4表示:不可用
          等级5表示:带图形界面的多用户模式
          等级6表示:重新启动
          需要说明的是,level选项可以指定要查看的运行级而不一定是当前运行级。对于每个运行级,只能有一个启动脚本或者停止脚本。当切换运行级时,init不会重新启动已经启动的服务,也不会再次去停止已经停止的服务
    五、netstat命令

    netstat命令用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。netstat是在内核中访问网络及相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告。

    如果你的计算机有时候接收到的数据报导致出错数据或故障,你不必感到奇怪,TCP/IP可以容许这些类型的错误,并能够自动重发数据报。但如果累计的出错情况数目占到所接收的IP数据报相当大的百分比,或者它的数目正迅速增加,那么你就应该使用netstat查一查为什么会出现这些情况了。

    1.命令格式:

    netstat [-acCeFghilMnNoprstuvVwx][-A<网络类型>][--ip]

    2.命令功能:

    netstat用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。

    3.命令参数:

    netstat的参数有很多,但是常用的也就几个

    netstat -[atunlp]

    • -a :all,表示列出所有的连接,服务监听,Socket资料
    • -t :tcp,列出tcp协议的服务
    • -u :udp,列出udp协议的服务
    • -n :port number, 用端口号来显示
    • -l :listening,列出当前监听服务
    • -p :program,列出服务程序的PID

    4、示例

    netstat -anp | grep 

    六、chmod命令

          chmod命令用于改变linux系统文件或目录的访问权限。用它控制文件或目录的访问权限。该命令有两种用法。一种是包含字母和操作符表达式的文字设定法;另一种是包含数字的数字设定法。

          Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作。
      文件或目录的访问权限分为只读,只写和可执行三种。以文件为例,只读权限表示只允许读其内容,而禁止对其做任何的更改操作。可执行权限表示允许将该文件作为一个程序执行。文件被创建时,文件所有者自动拥有对该文件的读、写和可执行权限,以便于对文件的阅读和修改。用户也可根据需要把访问权限设置为需要的任何组合。
      有三种不同类型的用户可对文件或目录进行访问:文件所有者,同组用户、其他用户。所有者一般是文件的创建者。所有者可以允许同组用户有权访问文件,还可以将文件的访问权限赋予系统中的其他用户。在这种情况下,系统中每一位用户都能访问该用户拥有的文件或目录。
      每一文件或目录的访问权限都有三组,每组用三位表示,分别为文件属主的读、写和执行权限;与属主同组的用户的读、写和执行权限;系统中其他用户的读、写和执行权限。当用ls -l命令显示文件或目录的详细信息时,最左边的一列为文件的访问权限。 例如:

    命令: 

    ls -al

    输出:

    [root@localhost test]# ll -al

    总计 316lrwxrwxrwx 1 root root     11 11-22 06:58 linklog.log -> log2012.log

    -rw-r--r-- 1 root root 302108 11-13 06:03 log2012.log

    -rw-r--r-- 1 root root     61 11-13 06:03 log2013.log

    -rw-r--r-- 1 root root      0 11-13 06:03 log2014.log

    -rw-r--r-- 1 root root      0 11-13 06:06 log2015.log

    -rw-r--r-- 1 root root      0 11-16 14:41 log2016.log

    -rw-r--r-- 1 root root      0 11-16 14:43 log2017.log

    我们以log2012.log为例:

    -rw-r--r-- 1 root root 296K 11-13 06:03 log2012.log

    第一列共有10个位置,第一个字符指定了文件类型。在通常意义上,一个目录也是一个文件。如果第一个字符是横线,表示是一个非目录的文件。如果是d,表示是一个目录。从第二个字符开始到第十个共9个字符,3个字符一组,分别表示了3组用户对文件或者目录的权限。权限字符用横线代表空许可,r代表只读,w代表写,x代表可执行。

    例如:
      - rw- r-- r--
      表示log2012.log是一个普通文件;log2012.log的属主有读写权限;与log2012.log属主同组的用户只有读权限;其他用户也只有读权限。

      确定了一个文件的访问权限后,用户可以利用Linux系统提供的chmod命令来重新设定不同的访问权限。也可以利用chown命令来更改某个文件或目录的所有者。利用chgrp命令来更改某个文件或目录的用户组。 

    chmod命令是非常重要的,用于改变文件或目录的访问权限。用户用它控制文件或目录的访问权限。chmod命令详细情况如下。

    1. 命令格式:

    chmod [-cfvR] [--help] [--version] mode file   

    2. 命令功能:

    用于改变文件或目录的访问权限,用它控制文件或目录的访问权限。

    3. 命令参数:

    必要参数:
    -c 当发生改变时,报告处理信息
    -f 错误信息不输出
    -R 处理指定目录以及其子目录下的所有文件
    -v 运行时显示详细处理信息

    选择参数:
    --reference=<目录或者文件> 设置成具有指定目录或者文件具有相同的权限
    --version 显示版本信息
    <权限范围>+<权限设置> 使权限范围内的目录或者文件具有指定的权限
    <权限范围>-<权限设置> 删除权限范围的目录或者文件的指定权限
    <权限范围>=<权限设置> 设置权限范围内的目录或者文件的权限为指定的值

    权限范围:
    u :目录或者文件的当前的用户
    g :目录或者文件的当前的群组
    o :除了目录或者文件的当前用户或群组之外的用户或者群组
    a :所有的用户及群组

    权限代号:
    r :读权限,用数字4表示
    w :写权限,用数字2表示
    x :执行权限,用数字1表示
    - :删除权限,用数字0表示
    s :特殊权限 

    该命令有两种用法。一种是包含字母和操作符表达式的文字设定法;另一种是包含数字的数字设定法。
      1). 文字设定法:
       chmod [who] [+ | - | =] [mode] 文件名
      2). 数字设定法
      我们必须首先了解用数字表示的属性的含义:0表示没有权限,1表示可执行权限,2表示可写权限,4表示可读权限,然后将其相加。所以数字属性的格式应为3个从0到7的八进制数,其顺序是(u)(g)(o)。
      例如,如果想让某个文件的属主有“读/写”二种权限,需要把4(可读)+2(可写)=6(读/写)。
      数字设定法的一般形式为:
       chmod [mode] 文件名

    数字与字符对应关系如下:

    r=4,w=2,x=1
    若要rwx属性则4+2+1=7
    若要rw-属性则4+2=6;
    若要r-x属性则4+1=7。 

    4. 使用实例:
    实例1:增加文件所有用户组可执行权限

    命令:

    chmod a+x log2012.log

    输出:

    [root@localhost test]# ls -al log2012.log 

    -rw-r--r-- 1 root root 302108 11-13 06:03 log2012.log

    [root@localhost test]# chmod a+x log2012.log 

    [root@localhost test]# ls -al log2012.log 

    -rwxr-xr-x 1 root root 302108 11-13 06:03 log2012.log

    [root@localhost test]#

    说明:
      即设定文件log2012.log的属性为:文件属主(u) 增加执行权限;与文件属主同组用户(g) 增加执行权限;其他用户(o) 增加执行权限。
     

    实例2:同时修改不同用户权限

    命令:

    chmod ug+w,o-x log2012.log

    输出:

    [root@localhost test]# ls -al log2012.log 

    -rwxr-xr-x 1 root root 302108 11-13 06:03 log2012.log

    [root@localhost test]# chmod ug+w,o-x log2012.log 

    [root@localhost test]# ls -al log2012.log 

    -rwxrwxr-- 1 root root 302108 11-13 06:03 log2012.log


    说明:
      即设定文件text的属性为:文件属主(u) 增加写权限;与文件属主同组用户(g) 增加写权限;其他用户(o) 删除执行权限

    实例3:删除文件权限

    命令:

    chmod a-x log2012.log

    输出:

    [root@localhost test]# ls -al log2012.log 

    -rwxrwxr-- 1 root root 302108 11-13 06:03 log2012.log

    [root@localhost test]# chmod a-x log2012.log 

    [root@localhost test]# ls -al log2012.log 

    -rw-rw-r-- 1 root root 302108 11-13 06:03 log2012.log

    说明:
      删除所有用户的可执行权限 
     

    实例4:使用“=”设置权限 

    命令:

    chmod u=x log2012.log

    输出:

    [root@localhost test]# ls -al log2012.log 

    -rw-rw-r-- 1 root root 302108 11-13 06:03 log2012.log

    [root@localhost test]# chmod u=x log2012.log 

    [root@localhost test]# ls -al log2012.log 

    ---xrw-r-- 1 root root 302108 11-13 06:03 log2012.log

    说明:

    撤销原来所有的权限,然后使拥有者具有可读权限 

    实例5:对一个目录及其子目录所有文件添加权限 

    命令:

    chmod -R u+x test4

    输出:

    [root@localhost test]# cd test4

    [root@localhost test4]# ls -al

    总计 312drwxrwxr-x 2 root root   4096 11-13 05:50 .

    drwxr-xr-x 5 root root   4096 11-22 06:58 ..

    -rw-r--r-- 1 root root 302108 11-12 22:54 log2012.log

    -rw-r--r-- 1 root root     61 11-12 22:54 log2013.log

    -rw-r--r-- 1 root root      0 11-12 22:54 log2014.log

    [root@localhost test4]# cd ..

    [root@localhost test]# chmod -R u+x test4

    [root@localhost test]# cd test4

    [root@localhost test4]# ls -al

    总计 312drwxrwxr-x 2 root root   4096 11-13 05:50 .

    drwxr-xr-x 5 root root   4096 11-22 06:58 ..

    -rwxr--r-- 1 root root 302108 11-12 22:54 log2012.log

    -rwxr--r-- 1 root root     61 11-12 22:54 log2013.log

    -rwxr--r-- 1 root root      0 11-12 22:54 log2014.log

    说明:

    递归地给test4目录下所有文件和子目录的属主分配权限 

    其他一些实例:

    1). 

    命令:

    chmod 751 file   

    说明:

    给file的属主分配读、写、执行(7)的权限,给file的所在组分配读、执行(5)的权限,给其他用户分配执行(1)的权限

    2). 

    命令:

    chmod u=rwx,g=rx,o=x file 

    说明:

    上例的另一种形式

    3). 

    命令

    chmod =r file 

    说明:                    

    为所有用户分配读权限

    3). 

    命令:

    chmod 444 file 

    说明: 

        同上例

    4). 

    命令:chmod a-wx,a+r   file

  • 相关阅读:
    HDU
    HDU
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
  • 原文地址:https://www.cnblogs.com/mylanguage/p/5626482.html
Copyright © 2020-2023  润新知