• linux学习笔记—之—linux文件管理


    内容

      #文件系统及Shell的基本概念

      #文件及目录操作命令

      #VI的使用

      #软件包的管理

     

    一、文件系统及Shell的基本概念

    1.文件系统的含义

      文件系统是用来管理和组织保存在磁盘驱动器上数据的系统软件

    2Linux的文件系统

      Linux系统采用虚拟文件系统技术(VFS)、结构采用倒立树型、VFS使Linux支持以下文件系统:

      EXT2:                       二次扩展

      EXT3:                       三次扩展

      SWAP:                      交换文件系统

      FATFAT32

      NTFS                  (默认不支持,需要特定的模块)

      VFAT:                        虚拟FAT

      SYSV:                        Unix的文件系统

      HPFS:                        OS/2的文件系统

      ISO9660:                     光盘文件系统

      NFS:                          网络文件系统

    3Linux中的文件分类

            (1)普通文件

               文本文件:采用ASCII编码方式,可编辑,可修改

               二进制:不可查看,不可修改

            (2)目录文件

          存放的内容是目录中的文件名和子目录名

            (3)设备文件(/dev

          用于用户访问物理设备所用,分为块设备和字符设备文件

            (4)链接文件

          软链接文件:目标文件和链接文件可以跨越索引点,相当于文件的快捷方式

                             删除原文件,则符号链接文件失去意义

                             删除符号链接文件,不影响原文件

          硬链接文件:链接同一索引点中的文件,相当文件的副本

                             两个文件指向同一存储区,内容、长度相同

                             删除一个文件不影响,其它文件

            (5)管道文件

           FIFO缓存队列

    4Shell的主要功能

    ~命令行解释

      交互模式

      后台运行

    ~命令的多种执行顺序 

    ~命令替换 (` `

    ~I/O重定向(>,>>,<,<<

    ~管道(|

    ~通配符(*,?,[],[!]

    ~系统环境维护  

    ~Shell编程

    ~历史记录(history

    ~自动补齐(TAB

    5Shell的命令解释过程

               

     

    二、文件操作命令

    1pwd

          功能:显示当前目录

          实例:

    # pwd 

    2cd

           功能:改变当前目录

           实例:

    # cd  /usr/sbin (进入/usr/sbin)
    # cd   ../u1 (进入父目录下面的u1目录)
    # cd   ..(返回父目录)
    # cd    (进入用户主目录)
    # cd  ~ (进入用户主目录)

    3mkdir 

            功能:建立目录

        格式:mkdir  [参数]  <目录名>

        参数:-m  属性值:指定目录的属性 (rwx421)

                      -p        :循环建立目录

       实例:

    # mkdir   d1                 (在当前目录下建立d1子目录)
    # mkdir   /d1/d2  /d1/d3  /d1/d4(同时在/d1目录中建立d2,d3,d4子目录)
    # mkdir  –p  /d1/d2      (在/d1目录中建立d2子目录,先建d1)

    4rmdir

            功能:删除空目录

        格式:rmdir  [参数]  <目录名>

                参数:-p:循环删除 

            实例:

    # rmdir  a1        (删除当前目录下的a1子目录)
    # rmdir  /etc/a2     (删除/etc下a2子目录)
    # rmdir  -p  /a1/a2  

    5ls

      功能:显示目录中的文件及子目录的名称

        格式:ls     [参数]  [文件名]

        参数:-a:   显示所有文件(包括隐含文件,以“.”开头的文件为隐含文件)

                  -l:    以长格式显示文件名及目录名(显示文件的详细信息)

                       -F:    显示文件名,同时显示类型

                       -R:   显示目录中所有文件及子目录中的文件结构

                       -t:    按照修改时间排序显示

                       -s:    显示文件的大小,以block为单位

                       -S:    按照文件大小排序显示  

                      -m:   分列显示文件名

      实例:

    # ls                 
    # ls /bin/             
    # ls grub.conf         查找当目录下是否存在grub.conf
    # ls   -l             
    # ls  --help          显示ls的详细的帮助信息
    # ls  -a

    6cp 

      功能:复制文件

        格式:cp   [参数]   <源路径>  <目标路径>  

        参数:-f:文件在目标路径中存在时,则直接覆盖

                        -i:文件在目标路径中存在时提示是否覆盖

                       -r:复制指定中所有内容和结构

                       -b:生成覆盖文件的备份

                       -a:保持文件原有属性

      实例:

    # cp  /etc/*   /a1/      把/etc下的所有文件复制到a1目录中
    # cp  /bin/ls   /dir1      /bin/ls文件到/目录取名为dir1
    # cp  -f  /sbin/*  /exe/   直接将/sbin下的所有文件到/exe目录中
    # cp  -r  /soft  /abc/  

    7rm 

      功能:删除文件

        格式:rm  [参数]   <文件名>

        参数:-f:          不提示确认删除

                   -i:          提示确认删除

                        -r:          递归删除

      实例:

    # rm  /m1/f1       删除/m1目录下的f1
    # rm  –f   /m1/*   删除m1目录下的所有文件
    #rm  -rf  /m1      强制删除一个目录

    8mv

      功能:移动文件、重命名文件

        格式:mv [参数] <源路径>  <目标路径>

        参数:-i     如果存在文件重名则提示是否覆盖

            -b     建立覆盖文件的备份

                  -f     如果存在文件重名则直接覆盖

      实例: 

    # mv   /m1/f1     /m2/   移动/m1目录下f1文件到/m2目录下
    # mv    f1   f2          将当前目录下的f1文件改名f2
    # mv   -f  /d1/*  /d2/    移动/d1中的所有文件到/d2目录中

    9file

      功能:检测文件类型

        格式:file  [参数]  <文件名>

        参数: -z:检测压缩包文件

                 -L:跟随符号链接

      实例:

    # file    /etc/lilo.conf
    # file    -z  1.gz

    10.显示文本文件内容

    1) cat

          格式:cat  [参数]  <文件名>

          参数:-n    显示行号

                  -b   显示行号,但空白行不显示行号

      实例:

    #cat   /etc/inittab
    #cat  -n  /d1/f1  /d1/f2 >txt1

    2more

       格式:more   [参数] <文件名>

        实例:

    # ls|more                 将ls的显示结果输入到more中
    # more   /etc/rc.d/rc    显示/etc/rc.d/rc文件的内容

     说明:可以用回车键向下换行,空格键向下换页   按Q键退出more

    3less

        实例:

    # ls|less                    将ls的显示结果输入到less中
    # less  /var/named/localhost.zore

      说明:Page up /Page Down键上下滚动、Q键退出

    4headtail

          实例: 

    # head  -20     /a1    显示a1中前20行
    # tail   -20     /a1     显示中a1后20行

    5cut

      功能:显示文件中指定数目的字符、字节或字段

        格式:#cut  参数  数字  文件

        参数:-c   以字符为单位

                -b  以字节为单位

                 -f   以字段为单位

               -d  指定分隔符

      实例:

    #cut  -c 3  /etc/passwd
    #cut  -f  1-6  -d :/etc/passwd
    #cut  -b  -8  /etc/passwd

    11.搜索文件

    1) find

        格式:find   查找路径   查找条件

        条件: -name “文件名”:查找指定名称文件

                        -lname “文件名”:查找指定文件所有的接文件

                         -user  用户名:查找指定用户拥有的文件

                         -group 组名:查找指定组拥有的文件

                         -links  n:查找拥有n个链接的文件

                         -mtime n:查找在N天前被修改过的文件

                         -atime  n:查找在N天前被访问过的文件

                         -type  d/f/b/l/p:查找指定类型的文件

                         -s n[bcwkMG]:查找指定大小的文件

                         -empty:查找为空的文件

                         -perm  mode:查找指定属性的文件

                         -exec command {}\; 查找指定的文件并执行指定的命令

                         -newer 文件名  查找比指定文件新的文件

      实例:

    # find   /   -name   “named*”
    # find   /   -user   root
    #find   ./  -type d -exec chmod 755 {} \;
    #find . –empty
    #find . -perm 644
    #find . -newer oldfile  ! -newer newfile

    2) whereis

      功能:查找二进制可执行、手册及源文件

      实例:

    # whereis   umount

    3) locate

      功能:在资料库中查找指定的文件

        格式:#locate [参数] 文件名

        参数:

          -u /-U  建立资料库,-u 会由根目录开始,-U 则可以指定开始位置

              -e  <目录1…>  排除指定目录在寻找范围之外

              -l  <0/1>    设置安全级别,1启用安全模式,0关闭安全模式

              -f  <文件类型> 在资料库中排除特定类型文件排除在外

          -n 至多显示n个输出

          -r 使用正规运算式做寻找的条件

          -o 指定资料库存的名称。 

          -d 指定资料库的路径

    实例:

    #locate -u 
    #locate chdrv 
    #locate -n 100 a.out 

    4) which

      功能:查找指定命令文件

        格式:#which  文件名

      实例:

    #which  mount

    12grep

      功能:在文本文件中查找匹配的字符串

        格式:#grep  [参数“字符串”  文件

        参数: -?   同时显示匹配行上下的?行

              -b   在匹配行前面打印该行所在的块号

            -c   只打印匹配的行数,不显示匹配的内容

              -f File 从文件中提取模板,空文件中包含0个模板,所以什么都不匹配

              -h   当搜索多个文件时,不显示匹配文件名前缀

               -I   忽略大小写差别

             -q   取消显示,只返回退出状态。0则表示找到了匹配的行

               -l   打印匹配模板的文件清单

               -L   打印不匹配模板的文件清单

               -n   在匹配的行前面打印行号

                -s   不显示关于不存在或者无法读取文件的错误信息

                -v   反检索,只显示不匹配的行

                -w   如果被\<和\>引用,就把表达式做为一个单词搜索

    正则表达式元字符:

    ^      锚定行的开始 如:'^grep'匹配所有以grep开头的行

    $      锚定行的结束 如:'grep$'匹配所有以grep结尾的行

    .       匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p

    *      匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。 .*一起用代表任意字符

    []      匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep 

    [^]      匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行

    \(..\)     标记匹配字符,如'\(love\)',love被标记为1

    \<     锚定单词的开始,如:'\<grep'匹配包含以grep开头的单词的行 

    \>     锚定单词的结束,如:'grep\>'匹配包含以grep结尾的单词的行 

    x\{m\}    重复字符x,m次,如:'0\{5\}'匹配包含5个o的行

    x\{m,\}   重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行

    x\{m,n\}    重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5--10个o的行

    \w          匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p

    \W            \w的反置形式,匹配一个或多个非单词字符,如点号句号等

    \b          单词锁定符,如: '\bgrepb\'只匹配grep

    +       匹配一个或多个先前的字符。如:'[a-z]+able',匹配一个或多个小写字母后跟able的串,如loveable,enable,disable等。

    ?        匹配零个或多个先前的字符。如:'gr?p'匹配gr后跟一个或没有字符,然后是p的行。

    a|b|c      匹配a或b或c。如:grep|sed匹配grep或sed

    ()       分组符号,如:love(able|rs)ov+匹配loveable或lovers,匹配一个或多个ov。

    x{m},x{m,},x{m,n}   作用同x\{m\},x\{m,\},x\{m,n\}

      实例:

    # ls -l | grep '^a' 
    通过管道过滤ls -l输出的内容,只显示以a开头的行。
    # grep 'test' d* 
    显示所有以d开头的文件中包含test的行。
    # grep 'test' aa bb cc 
    显示在aa,bb,cc文件中匹配test的行。
    # grep '[a-z]\{5\}' aa 
    显示所有包含每个字符串有5个连续小写字符的字符串的行。
    # grep 'w\(es\)t.*\1' aa 
    如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着另外一个es(\1),找到就显示该行。如果用egrep或grep -E,就不用"\"号进行转义,直接写成'w(es)t.*\1'就可以了。

    13.文件压缩操作

    1gzip*.gz

      功能:对单个文件压缩

        格式:gzip  [参数]  压缩(解压缩)文件名

        参数:  -d:用于解压缩

                 -t:检验压缩文件是否损坏

                   -l:显示压缩文件压缩比例

               -r :递归式地查找指定目录并压缩其中的所有文件或者是解压缩

               -num: 用指定的数字 num 调整压缩的速度,-1 或 --fast 表示最快压缩方法(低压缩比)

    实例:

    # gzip    /a1
    # gzip    -d  /a1.gz
    # gzip    -dv   /*.gz
    # gzip     -r  /www

    2zip

      功能:压缩文件

        格式:#zip  [参数]  文件或目录名

           -d   从压缩文件内删除指定的文件。
           -F   尝试修复已损坏的压缩文件。
           -t<mmddyy>   把压缩文件的日期设成指定的日期。
           -u   更换较新的文件到压缩文件内。
           -v   显示指令执行过程或显示版本信息。
           -z   替压缩文件加上注释。
           -<压缩效率>   压缩效率是一个介于1-9的数值。
           -P 口令    利用指定口令加密压缩包
           -m       添加文件到ZIP压缩包中

      实例: 

    #zip  abc.zip  f1   f2  f3
    #zip  -r –P 123  soft.zip  /soft/
    #zip  -d  soft.zip  soft/wb
    #zip  –u  soft.zip   abc.log
    #zip  -m  soft.zip   install.log

    3unzip

      功能: 解压缩zip文件

        格式: #unzip [.zip文件]
            -l  显示压缩文件内所包含的文件。
            -P   <密码>   
            -d   <目录>指定文件解压缩后所要存储的目录。

      实例:

    #unzip  f1.zip  -d  /f1
    #unzip –l  f1.zip

    4tar(*.tar)

      功能:为文件或目录创建备份 

        格式:tar  [参数]   文件/目录名

        参数:   -t:列出压缩包中的文件(*.tar

                          -x:解压缩(*.tar

                          -z:使用gzip的压缩文件

                          -c:创建压缩包

                          -f:指定文件名

                          -j:使用bzip的压缩文件

                          -v:显示操作信息

                          -C:指定解压路径(默认路径为当前路径)

                          -r: 向压缩包添加文件

                          -u:更新压缩包中的文件

                          -k:还原文件过程中,遇到相同文件不覆盖

                          -m:还原文件过程中,修改文件的时间为当前时间

      实例:

    # tar -cvf  all.tar *.jpg
    # tar -uvf all.tar logo.gif
    # tar -rf all.tar *.gif
    # tar  -cvfz    etc.tar.gz   /etc
    # tar  -xvf  all.tar  
    # tar  -xzvf    etc.tar.gz  -C /soft

    除以上的压缩工具外,还有compress(uncompress)bzip2(unbzip2)

    14ln

      功能:建立链接文件

        格式:ln  [参数]  <源文件>  <链接文件>

        参数:-s:建立软链接文件

                         -i:提示是否覆盖目标文件

                         -f:直接覆盖已存在的目标文件

      实例:

    # ln  /etc/abc  /abc
    # ln  -s  /a1     /etc/a1
    

    15. touch

      功能:创建空文件或修改文件的时间

        格式:#touch  [参数]  文件名

        参数:-r  修改文件的时间为指定文件的日期时间

                -d <yymmdd>  指定文件日期时间为yymmdd

                -t <yymmddhhmm> 指定文件日期时间为yymmddhhmm

                -c  不创建指定的文件

      实例:

    #touch   /f1  /f2
    #touch  -r  /f1  /f2
    #touch -d "6:03pm 05/06/2000" file 

    16. sort

      功能:对文本文件进行排序

        格式:sort  [参数]  [文件]

        参数:-o  文件名  将排序结果保存到指定文件中

                -u   去除重复行

      实例:

    #sort  /etc/passwd
    #sort  –o  /etc/oldpass  /etc/passwd

    17. paste

      功能:合并文本文件

      实例:

    #paste  f1  f2>f3

    18. cmp

      功能:比较两个文件是否有差异

        格式:#cmp  [参数]  文件文件2

        参数:-l   显示不同的字节位置

                -s   不显示不同之处,只显示返回状态

      实例:

    #cmp  f1  f2
    #cmp  -l  f1  f2

    18. diff

      功能:显示文件的不同之处

        格式:#diff  [参数]  文件1  文件2

        参数:-c   显示全文,并标出不同之处

                -u   合并显示,并标出不同之处

    实例:

    #diff  f1   f2
    #diff  -c  f1  f2

    19. wc

      功能:统计文件中的行数、单词数、字符数

        格式:#wc  [参数]  文件名

        参数:-c  统计字符数

                -w  统计单词数

                 -l 统计行数

    实例:

    #wc  /etc/passwd
    #wc  -c  /etc/passwd 

    注:

    1.命令自动补齐

           按TAB键进行自动扩充

    2.命令历史记录

       Linux系统采用.history文件存放命令历史记录,以下是与历史记录相关的操作:

       !  n:调用正序第n个命令

     !!  :调用上一条命令

     history:查看命令历史记录

       history  -c:清除历史记录

       history  -w 文件名:保存历史记录到指定的文件中

    3.命令重定向

       “>”:将命令输出结果保存到指定文件中,如果文件不存在先建立,存在就覆盖

       “>>”:将命令输出结果保存到指定文件中,如果文件不在存先建立,存在就覆盖

       “<”:把文件内容输入指定命令

       “<<”:将一对分隔之间的正文输入给指定命令

      实例:

    #ls>abc.txt
    #ls /etc >>abc.txt
    #wc</etc/passwd
    #wc<<!

    4.命令管道(前一个命令的输出作为后一个命令的输入)

      实例:ls|more

    5.命令替换(取指定命令的结果)

      实例:# cat   `ls abc`

    6.多个命令执行顺序

       “;”:顺序执行多个命令

       “||”:前后命令的执行存在“逻辑或”关系,只有||前面的命令执行失败后,它后面的命令才被执行

       “&&”:前后命令的执行存在“逻辑与”关系,只有&&前面的命令执行成功后,它后面的命令才被执

      实例:

    # ls  /etc;cd  /etc
    # ls /d1/f1||touch  f1

    7.命令别名

      实例:#alias  [别名=’命令’]

    三、vi编辑器的使用

    1vi 定义

      Vi Unix/Linux系统中的一种文本编辑软件

    2vi三种模式

       命令模式:删除字符、排版

      插入模式:插入字符、删除、修改字符

      最后行模式:通过命令操作vi软件

    3vi的使用

    1)启动VI

      # vi  [参数]   [文件名]

    2VI常用命令

    ~移动光标

        左移一个字符:按h

        右移一个字符:按l

        下移一行:    按j

        上移一行:    按k

        移至行首:    按^

        移至行尾:    按$

        移至文件顶部:按H

        移至文件尾部:按L

        移至文件中部:按M

        前翻一屏:    按ctrl+f

        后翻一屏:    按ctrl+b

        前翻半屏:    按ctrl+d

        后翻半屏:    按ctrl+u

        移动光标到指定行:输入:数字

    ~插入文本

        在光标右边插入文本:          按a

        在一行的结尾处添加文本:      按A

        光标左边插入文本:            按i

        在行首插入文本:              按I

        在光标所在行的下一行插入新行:按o

        在光标所在行的上一行插入新行:按O

    ~撤消和重复操作

        撤消上一个操作:按u

        撤消光标所在行的更改:按U

        重复操作:输入”.”

    ~删除文本

        删除当前字符:    按x

        删除一词:        按dw

        删除一行:        按dd(剪切)

        删除行的部分内容:按D(删除光标右的内容)或按d0(删除光标左的内容)

        删除到文件的结尾:按dG

        dL :删除直到屏幕上最后一行的内容 

        dH :删除直到屏幕上第一行的内容 

        dG :删除直到工作缓存区结尾的内容(文尾)

        d1G :删除直到工作缓存区开始的内容 (文头

        :n,md 从第n行开始删除m

    ~复制和粘贴

        复制一行内容:按yy

        粘贴:   按p

        查找和替换命令 

        /string:向前查找字符串

        ?string:向后查找字符串

        n:继续上一次查找

        shift+n:以与上一次相反的方向查找

        :s/字符串1/字符串2/g:在全文中替换字符串1为字符串2

        n,ms/字符串1/字符串2/g:替换nm行中的字符串1为字符串2

    ~保存和退出命令

        :w:写缓冲区

        :w 文件名:把缓冲区写入指定文件

        :wq:保存退出

        :q!:不保存退出

        :wq!:保存退出,对拥有者忽略只读权限

        E!:取消自上次保存以来所做的修改

        ZZ:保存退出

    ~修改文本命令

      cl :更改当前字符

      cw :修改到某个单词的结尾位置

      c3w :修改到第三个单词的结尾位置

      cb :修改到某个单词的开始位置

      c0 :修改到某行的结尾位置

      c):修改到某个语句的结尾位置

      c4):修改到第四个语句的结尾位置 

      c} :修改到某个段落的结尾位置 

      c2{ :修改到当前段落起始位置之前的第2个段落位置 

      ctc :修改当前行直到下一个字符c所出现位置之间的内容

      C :修改到某一行的结尾

      cc :修改当前行

    ~会话定制命令

      :set: 显示vi变量

      :set all:显示所有可能的vi变量和它们当前的值

      :set nu:显示行号

      :set nonu:隐藏行号

      :set showmode:显示当前操作模式

      :set noshowmode:隐藏当前操作模式

      :set ai:自动对齐

      :set dir=目录:设置缓冲区的位置

    4VI的高级应用

    1)编辑多个文件

     #vi  -o]文件1  文件………

      -o:同一窗口打开多个文件

      :next:编辑下一个文件

      :prev:编辑上一个文件

      :args:显示所有打开的文件名称

      Ctrl+ww :切换窗口

      :e  文件名:读入另一文件

    2)高级复制

      :start,end  cp  dest:将startend行的内容复制到dest行以下

      :start,end  m  dest:将startend行的内容移动到dest行以下

      nY:将从光标所在行开始的n行内容暂存

      :[m],[n]w<文件名>:把mn内容另存到指定文件中

    3)其它高级应用

      :X 输入口令:以口令加密保存

      :ctrl+s:锁定VIctrl+q解锁)

      :r !<命令>:执行指定命令,并将命令结果插入到当前文件中

      :J:合并上下两行

    四、软件包的管理

    1Linux软件包主要类型

    1RPM

      由于RedHat公司开发的一种软件封包方式,可以用于多种Linux系统

      RPM包名称格式为:软件名-版本号.运行平台.rpmfoo-1.2.0-3.i386.rpm

      Linux系统会使用专用的数据库记录RPM包的安装情况

    2TAR

      TAR包封装的通常是软件源代码,并且利用了gzip或其它方式进行二次压缩

    2RPM包的管理

    1)安装RPM

      #rpm  -ivh  [详细选项]  RPM包名称

       详细选项:

        --nodeps     忽略依赖关系

        --rplacepkgs   强制覆盖已存在的RPM

      实例:

    #rpm –ivh  grub-0.93-7.i386.rpm

    2)升级RPM

    #rpm  -Uvh  [--nodeps/--replacepkgs]  软件包名称

      实例:

    #rpm –Uvh  bind-9.2.20-8.i385.rpm

    3)查询RPM

    #rpm  -q[a/f  文件名/l/]   [软件名称]

      实例:

    #rpm –q  bind(查询软件名为bind的软件包)
    #rpm –qa(查询系统中所有已安装的RPM包)
    #rpm –qf   /boot/grub/grub.conf (查询grub.conf文件所属的RPM包)
    #rpm  -ql  bind (查询软件名为bind软件包并显示软件包的内容)

    4)卸载RPM

    #rpm  -e  软件名称

      实例:#rpm  -e bind

    5)检验RPM

    #rpm –V 软件名称

      实例:#rpm  -V   bind

    3TAR软件包的管理

    (1)安装TAR

        解压缩

        配置安装参数

        编译和安装

      实例:

    #tar –xzvf   bind-9.2.0.tar.gz
    #cd bind-9.2.0
    #./configure  --prefix=/usr/named
    #make
    #make install

    2)卸载TAR

      直接删除安装

      实例:

    #rm  -rf  /usr/named
    

      

  • 相关阅读:
    # 牛客挑战赛46_C题排列(前缀优化DP)
    # 牛客挑战赛46 B最小的指数
    Educational Codeforces Round 99 (Rated for Div. 2)
    Wireless Password HDU
    Codeforces Round #686 (Div. 3)
    网络流之最小费最大流
    网络流之最大流
    next()和nextLine()的区别
    初识HTML
    jQuery笔记
  • 原文地址:https://www.cnblogs.com/lyp3314/p/2446580.html
Copyright © 2020-2023  润新知