2020.10.27星期二  正式班D16

9.9 字符处理命令

9.9.1 sort排序

  • 用于将文件内容加以排序

    -n # 依照数值的大小排序

    -r # 以相反的顺序来排序

    -k # 以某列进行排序

    -t # 指定分隔符,默认是空格

    [root@ccc ~]# cat a.py
    b:3
    c:2
    a:4
    4:1
    f:5
    [root@ccc ~]# sort a.py
    4:1
    a:4
    b:3
    c:2
    f:5
    [root@ccc ~]# sort -t ":" -n -k2 a.py
    4:1
    c:2
    b:3
    a:4
    f:5
    [root@ccc ~]# sort -t ":" -n -r -k2 a.py
    f:5
    a:4
    b:3
    c:2
    4:1

9.9.2 uniq去重

  • 用于检查及删除文本文件中重复出现的行列,一般与sort命令结合使用

    -c # 在每列旁边显示出该行重复出现的次数

    -d # 仅显示重复出现的行列

    -u # 仅显示出现一次的行列

    [root@ccc ~]# cat b.py
    hello
    123
    hello
    123
    hahaha
    [root@ccc ~]# sort b.py
    123
    123
    hahaha
    hello
    hello
    [root@ccc ~]# sort b.py |uniq
    123
    hahaha
    hello
    [root@ccc ~]# sort b.py | uniq -c
    2 123
    1 hahaha
    2 hello
    [root@ccc ~]# sort b.py | uniq -d
    123
    hello
    [root@ccc ~]# sort b.py | uniq -u
    hahaha

9.9.3 cut处理规律文本

  • 用来显示行中的指定部分,删除文件中指定字段

    -d # 指定字段的分隔符,默认是"TAB"

    -f # 显示指定字段的内容

    [root@ccc ~]# head -1 /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    [root@ccc ~]# head -1 /etc/passwd | cut -d ":" -f1
    root
    [root@ccc ~]# head -1 /etc/passwd | cut -d ":" -f1-3
    root:x:0
    [root@ccc ~]# head -1 /etc/passwd | cut -d ":" -f1,3
    root:0

9.9.4 tr替换

  • 替换或删除命令

    -d # 删除字符

    [root@ccc ~]# head -1 /etc/passwd | tr "bin" "BIN"
    root:x:0:0:root:/root:/BIN/Bash
    [root@ccc ~]# head -1 /etc/passwd | tr -d "root"
    :x:0:0::/:/bin/bash

9.9.5 wc统计

  • 统计,计算数字

    -c # 统计文件的bytes数

    -l # 统计文件的行数

    -w # 统计文件中单词的个数,默认以空白字符作为分隔符

    [root@ccc test]# ll a.py
    -rw-r--r-- 1 root root 4 10月 27 17:14 a.py
    [root@ccc test]# cat a.py
    111
    [root@ccc test]# wc -c a.py
    4 a.py
    [root@ccc test]# wc -l a.py
    1 a.py
    [root@ccc test]# wc -w a.py
    1 a.py
    [root@ccc test]# grep "hello" a.py | wc -l
    0

9.10 打包压缩

9.10.1 基本概念

  • 打包:将多个文件和目录合并为一个特殊文件

  • 压缩:将该特殊文件进行压缩得到一个压缩包

  • 使用压缩包是为了减少占用的体积和加快网络的传输

  • Windows支持:zip、rar

    Linux支持:zip、tar、gz tar、bz2、gz(后缀不重要但一定要带)

9.10.2 tar.gz与tar.biz2

  • 打包

    [root@ccc test]# tar cvf bak.tar /etc/passwd  # c:创建,v:详细过程,f:打包后文件路径
    tar: 从成员名中删除开头的“/”
    /etc/passwd
    [root@ccc test]# ll
    总用量 16
    -rw-r--r-- 1 root root 10240 10月 27 21:36 bak.tar
  • 压缩

    # gzip -> gunzip
    [root@ccc test]# gzip bak.tar
    [root@ccc test]# ll
    总用量 8
    -rw-r--r-- 1 root root 520 10月 27 21:36 bak.tar.gz # bzip2 -> bunzip
    [root@ccc test]# bzip2 bak.tar
    [root@ccc test]# ll
    总用量 12
    -rw-r--r-- 1 root root 530 10月 27 21:43 bak.tar.bz2
  • 合二为一

    # gzip压缩算法(.gz结尾)
    [root@ccc test]# tar cvzf bak.tar.gz /etc/passwd
    tar: 从成员名中删除开头的“/”
    /etc/passwd
    [root@ccc test]# ll
    总用量 16
    -rw-r--r-- 1 root root 512 10月 27 21:47 bak.tar.gz # bzip2压缩算法(.bz2结尾)
    [root@ccc test]# tar cvjf bak.tar.bz2 /etc/passwd
    tar: 从成员名中删除开头的“/”
    /etc/passwd
    [root@ccc test]# ll
    总用量 4
    -rw-r--r-- 1 root root 530 10月 27 21:48 bak.tar.bz2

9.10.3 解包

  • tar xvf 压缩包 -C 解压到的目录

    # 针对xxx.tar.gz或者xxx.tar.bz2统一使用
    [root@ccc test]# tar xvf bak.tar.gz -C ~/test
    etc/passwd
    [root@ccc test]# ll
    总用量 12
    -rw-r--r-- 1 root root 512 10月 27 21:54 bak.tar.gz
    drwxr-xr-x 2 root root 20 10月 27 21:55 etc [root@ccc test]# tar xvf bak.tar.bz2 -C ~/test/
    etc/passwd
    [root@ccc test]# ll
    总用量 12
    -rw-r--r-- 1 root root 530 10月 27 21:54 bak.tar.bz2
    drwxr-xr-x 2 root root 20 10月 27 21:56 etc # 针对xxx.zip
    [root@ccc test]# unzip bak.zip
    inflating: etc/passwd
    creating: etc/yum/
    [root@ccc test]# ll
    总用量 12
    drwxr-xr-x 3 root root 31 10月 27 21:58 etc

9.10.4 zip

  • zip后的第一个参数是压缩包路径,其余为被压缩的文件

    [root@ccc test]# zip bak.zip /etc/passwd /etc/yum
    adding: etc/passwd (deflated 58%)
    adding: etc/yum/ (stored 0%)
    [root@ccc test]# ll
    总用量 4
    -rw-r--r-- 1 root root 704 10月 27 21:52 bak.zip

9.10.5备份

  • 打包压缩常用于备份文件,文件名必须见名知意且带上时间、主机名之类

    # 时间命令date
    [root@ccc test]# date
    2020年 10月 27日 星期二 22:02:15 CST
    [root@ccc test]# date +%F
    2020-10-27
    [root@ccc test]# date +%Y_%m_%d
    2020_10_27
    [root@ccc test]# date +%T
    22:03:10
    [root@ccc test]# date +%H_%M_%S
    22_03_38
    [root@ccc test]# date +%Y_%m_%d_%H_%M_%S
    2020_10_27_22_04_14
    [root@ccc test]# date -d "-1 day" +%F
    2020-10-26
    [root@ccc test]# date -d "1 day" +%F
    2020-10-28 # 备份
    [root@ccc test]# tar cvzf `date +%Y_%m_%d_%H_%M_%S`_bak.tar.gz /etc/passwd
    tar: 从成员名中删除开头的“/”
    /etc/passwd
    [root@ccc test]# ll
    总用量 16
    -rw-r--r-- 1 root root 512 10月 27 22:07 2020_10_27_22_07_12_bak.tar.gz

9.11 文件系统

9.11.1 简介

  • 文件

    操作系统

    文件系统(属于操作系统的一部分)---->提供了文件的概念

    硬盘

    文件是操作系统提供给用户操控硬盘的一种功能

    也就是说操作系统中肯定有一段代码专门用来提供文件的功能

  • 文件系统

    文件系统是操作系统中的负责控制硬盘的一个软件

    Linux常用xfs、ext4和btrfs

    Windows常用FAT32、NTFS

  • 文件系统-->文件

9.11.2 文件系统工作原理

  • 两部分组成:

    ①文件的元信息:例如权限(rwx)、拥有者、群组、时间参数等

    ②文件的实际内容

  • 文件系统通常会把这两部分分别存放在不同的区块

    ①文件的元信息放置到inode区块中

    ②文件的实际内容则放置到data block区块中

    ③每个inode与block都有自己的编号

  • 文件的超级区块(superblock)会记录整个档案的整体信息

    包括inode与block的总量、使用量、剩余量等

  • 硬盘的最小存取单位->扇区(Sector)->512字节->0.5kb

    操作系统的最小存取单位->block块->8个扇区->4kb

  • 总结

    # superblock
    记录此filesystem的整体信息,包括inode/block的总量、使用量、剩余量,及问价系统的格式与相关信息等 # inode
    1、记录文件元信息,包括文件对应的一个或多个block块号码
    2、一个文件被分配唯一一个inode # block
    1、记录文件实际内容
    2、一个文件过大时可能会被分配多个block块,即一个文件可能对应多个block块的号码,这些号码都存放在该文件的inode里

  • 举例

    [root@ccc test]# ls -di /
    64 /
    [root@ccc test]# ls -di /etc/
    4194369 /etc/
    [root@ccc test]# ls -i /etc/passwd
    4739260 /etc/passwd
  • cat /etc/passwd的整体过程

  • 通常称ext文件系统为索引式文件系统(indexed allocation)

9.11.3 扩展

  • inode信息

    inode为索引节点,是Unix操作系统的一种数据结构,本质是结构体

    inode负责存文件的元信息,如文件的创建者、创建日期、大小、inode等

    根本上inode存放除了文件的名字及真实内容外所有有关文件的信息/元数据(metadata)

    ​ 1、inode编号

    ​ 2、用来识别文件类型及用于stat C函数的模型信息

    ​ 3、链接数,即有多少文件名指向这个inode

    ​ 4、属主的ID(UID)

    ​ 5、属主的组ID(GID)

    ​ 6、文件的字节数

    ​ 7、文件所使用的磁盘块的实际数目

    ​ 8、文件的时间戳(ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上依次打开的时间

    ​ 9、指向数据块的指针

    可以用stat命令查看某个文件的inode信息

    [root@ccc test]# touch cjx.py
    [root@ccc test]# stat cjx.py
    文件:"cjx.py"
    大小:0 块:0 IO 块:4096 普通空文件
    设备:803h/2051d Inode:584529 硬链接:1
    权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
    最近访问:2020-10-27 22:55:07.390351576 +0800
    最近更改:2020-10-27 22:55:07.390351576 +0800
    最近改动:2020-10-27 22:55:07.390351576 +0800
    创建时间:-
    atime  # access time访问文件内容的时间。对文件内容进行一次读操作,访问时间就会变。
    # cat、more等操作都会,但stat、ls不会对atime产生影响
    mtime # modify time修改文件内容的时间。文件内容最后一次修改的时间
    # ll命令显示的就是mtime
    # vim编辑保存后,mtime就会改变。
    # 如echo aa >> a.sh 或vim a.txt修改内容
    ctime # change time指inode上一次文件属性变动时间。
    # 文件状态改变,ctime就会改变,例如chmod、chown等 # 使用cat命令查看文件后,文件atime变更
    [root@ccc test]# touch cjx.py
    [root@ccc test]# stat cjx.py
    文件:"cjx.py"
    大小:0 块:0 IO 块:4096 普通空文件
    设备:803h/2051d Inode:584529 硬链接:1
    权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
    最近访问:2020-10-27 22:55:07.390351576 +0800
    最近更改:2020-10-27 22:55:07.390351576 +0800
    最近改动:2020-10-27 22:55:07.390351576 +0800
    创建时间:-
    [root@ccc test]# cat cjx.py
    [root@ccc test]# stat cjx.py
    文件:"cjx.py"
    大小:0 块:0 IO 块:4096 普通空文件
    设备:803h/2051d Inode:584529 硬链接:1
    权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
    最近访问:2020-10-27 23:04:49.565459717 +0800
    最近更改:2020-10-27 22:55:07.390351576 +0800
    最近改动:2020-10-27 22:55:07.390351576 +0800
    创建时间:- # atime不变mtime及ctime改变
    [root@ccc test]# touch zzz.py
    [root@ccc test]# stat zzz.py
    文件:"zzz.py"
    大小:0 块:0 IO 块:4096 普通空文件
    设备:803h/2051d Inode:584530 硬链接:1
    权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
    最近访问:2020-10-27 23:07:46.877188087 +0800
    最近更改:2020-10-27 23:07:46.877188087 +0800
    最近改动:2020-10-27 23:07:46.877188087 +0800
    创建时间:-
    [root@ccc test]# cat >> zzz.py << EOF
    111
    EOF
    [root@ccc test]# stat zzz.py
    文件:"zzz.py"
    大小:4 块:8 IO 块:4096 普通文件
    设备:803h/2051d Inode:584530 硬链接:1
    权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
    最近访问:2020-10-27 23:07:46.877188087 +0800
    最近更改:2020-10-27 23:08:00.638167014 +0800
    最近改动:2020-10-27 23:08:00.638167014 +0800
    创建时间:- # atime、mtime不变,ctime改变
    [root@ccc test]# touch mmm.py
    [root@ccc test]# stat mmm.py
    文件:"mmm.py"
    大小:0 块:0 IO 块:4096 普通空文件
    设备:803h/2051d Inode:584531 硬链接:1
    权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
    最近访问:2020-10-27 23:09:11.228058875 +0800
    最近更改:2020-10-27 23:09:11.228058875 +0800
    最近改动:2020-10-27 23:09:11.228058875 +0800
    创建时间:-
    [root@ccc test]# ll mmm.py
    -rw-r--r-- 1 root root 0 10月 27 23:09 mmm.py
    [root@ccc test]# chmod 000 mmm.py
    [root@ccc test]# stat mmm.py
    文件:"mmm.py"
    大小:0 块:0 IO 块:4096 普通空文件
    设备:803h/2051d Inode:584531 硬链接:1
    权限:(0000/----------) Uid:( 0/ root) Gid:( 0/ root)
    最近访问:2020-10-27 23:09:11.228058875 +0800
    最近更改:2020-10-27 23:09:11.228058875 +0800
    最近改动:2020-10-27 23:10:03.715978463 +0800
    创建时间:-
    [root@ccc test]# ll mmm.py
    ---------- 1 root root 0 10月 27 23:09 mmm.py
  • inode大小(df -i)

    inode会消耗硬盘空间,因此硬盘格式化时操作系统会将硬盘分为两个区域

    ​ ①inode区(inode table):存放inode所包含的信息

    ​ ②block数据区:存放文件数据

    查看硬盘分区的inode总数和已使用量用df -i命令

    每个文件必须要有一个inode,因此inode用光但硬盘未存满时也无法在硬盘上创建新文件

    # 查看xfs文件系统每个inode节点大小(centos7)
    xfs_info /dev/sda3 # 查看ext文件系统每个inode节点大小(centos6)
    sudo dumpe2fs -h /dev/hda | grep "Inode size"
  • inode号码

    每个inode都有一个号码,操作系统用inode号码来识别不同的文件

    Linux系统不使用文件名,而使用inode号码来识别文件

    ​ ①系统找到这个文件名是对应的inode号码

    ​ ②通过inode号码获取inode信息

    ​ ③根据inode信息找到文件数据所在的block,读出数据

    使用ls -i命令可以看到文件名对应的inode号码

    [root@ccc test]# ls -i cjx.py
    584529 cjx.py
  • 目录项

    Linux系统中目录(directory)也是一种文件。打开目录实际上就是打开目录文件

    目录结构:一系列目录项(dirent)的列表。

    目录项两个组成部分:所包含文件的文件名,给文件名对应的inode号码

    ls命令:列出目录文件中的所有文件名

    [root@ccc test]# ls
    cjx.py mmm.py zzz.py

    ls -i命令:列出整个目录文件,即文件名和inode号码

    要查看文件的详细信息就要根据inode号码访问inode节点,读取信息

    [root@ccc test]# ls -i
    584529 cjx.py 584531 mmm.py 584530 zzz.py
  • FAT文件系统

    U盘采用的档案系统一般为FAT格式。

    FAT格式的档案系统没有inode,每个block号码都记录在前一个block当中。

    档案系统无法一次知道四个block号码,只能将前block读出后才会知道下一个block在哪里,归于分散时,磁盘要多转好几圈才能完整读取档案的内容。

    碎片整理:原因是档案写入的block过于离散,读取性能会变差,此时通过碎片整理将同一个档案归属的blocks汇整在一起,读取会比较容易。

  • inode特殊作用

    ①文件名包含特殊字符无法正常删除时,直接删除inode节点可以删除文件

    ②移动文件或重命名文件,只改变文件名,不影响inode号码

    ③打开一个文件后,系统就以inode号码来识别这个文件,不考虑文件名

    ​ 通常来说,系统无法从inode号码来得知文件名

    [root@ccc test]# ls -i
    584529 cjx.py 584531 mmm.py 584530 zzz.py
    [root@ccc test]# ls -i cjx.py
    584529 cjx.py
    [root@ccc test]# vim cjx.py
    [root@ccc test]# ls -i cjx.py
    584533 cjx.py
    [root@ccc test]# mv cjx.py CJX.py
    [root@ccc test]# ls -i CJX.py
    584533 CJX.py

    Q:每次修改完服务器配置文件后,为什么需要重新加载配置文件?

    A:因为每次修改完inode都会变,系统还是读取原来的inode号的配置文件,每次修改完服务器的配置文件都要重启服务,重新读一下配置文件。

9.11.4 软链接、硬链接

  • 硬链接(Hard Link) ---->通过"ln 源文件 目标文件" 设置硬链接

    ①对硬链接文件内容进行修改,会影响到所有文件名

    ②硬链接文件与源文件具有相同inode的不同文件名。一个文件只能有一个inode号,但多个文件的inode号可以相同

    ③删除硬链接或源文件之一,不影响另一个文件名的访问,除非都删掉

    ​ 硬链接允许一个文件拥有多个有效路径,用户可以建立硬链接连接到重要文件以防误删

    ④创建目录自动生成的两个目录项"."和".."

    ​ "."的inode号码是当前目录的inode号码,等同于当前目录的硬链接

    ​ ".."的inode号码是当前目录父目录的inode号码,等同于父目录的硬链接

    ​ 任何一个目录的硬链接总数=2+他的子目录总数(含隐藏目录)

    ⑤删除所有的硬链接,数据会在被磁盘检查或新数据写入时删除回收

    ⑥通过rm -rf删除硬链接

    ⑦目录不可创建硬链接,且硬链接无法跨区

  • 软链接(符号链接Symbolic Link) ---->通过"ln -s 源文件 目标文件" 创建软链接

    ①对软链接的源文件或目标文件内容进行修改,会影响到所有文件名

    ②软链接文件与源文件具有不同的inode号

    ③删除软链接文件的源文件,软链接文件将无法使用

    ④软链接作用:软件升级、企业代码发布、不方便目录移动

    ⑤删除源文件后,软链接文件无效,也应一起删除以便回收

    ⑥通过rm -rf删除软链接

    ⑦可以对目录创建软链接,且软链接可以跨分区

  • 示例

    ==============================硬链接===================================
    [root@ccc ~]# touch aaa.py
    [root@ccc ~]# ln aaa.py bbb.py
    [root@ccc ~]# ls -i aaa.py
    8493577 aaa.py
    [root@ccc ~]# ls -i bbb.py
    8493577 bbb.py
    [root@ccc ~]# ll aaa.py
    -rw-r--r-- 2 root root 0 10月 28 22:52 aaa.py
    [root@ccc ~]# ll bbb.py
    -rw-r--r-- 2 root root 0 10月 28 22:52 bbb.py
    [root@ccc ~]#
    ==============================软链接===================================
    [root@ccc test]# touch 1.py
    [root@ccc test]# ln -s 1.py 2.py
    [root@ccc test]# ls -i 1.py
    584530 1.py
    [root@ccc test]# ls -i 2.py
    584531 2.py
    [root@ccc test]# ll 1.py # 硬链接数为1
    -rw-r--r-- 1 root root 0 10月 28 22:57 1.py
    [root@ccc test]# ll 2.py # 硬链接数为1
    lrwxrwxrwx 1 root root 4 10月 28 22:57 2.py -> 1.py
    [root@ccc test]# rm -rf 1.py
    [root@ccc test]# ll 2.py # 删掉1.py,2.py不可用
    lrwxrwxrwx 1 root root 4 10月 28 22:57 2.py -> 1.py [root@ccc test]# mkdir ./dir1
    [root@ccc test]# ln ./dir1 ./dir2
    ln: "./dir1": 不允许将硬链接指向目录
    [root@ccc test]# ln -s ./dir1 ./dir2
    [root@ccc test]# ll
    总用量 0
    drwxr-xr-x 2 root root 6 10月 28 23:00 dir1
    lrwxrwxrwx 1 root root 6 10月 28 23:01 dir2 -> ./dir1

9.11.5 实战应用

  • 磁盘有空间但创建不了文件

    df -h查看磁盘使用情况(此时磁盘空间足够)

    df -i查看磁盘的索引节点(inode)(此时IUsed=100%)

    原因:数量众多的小字节缓存文件占用大量的inode,但占用的block不多

    解决方案:

    ①删除目录中部分文件,释放分区一部分inode

    ②备份好文件,然后删除这些文件来释放inode,然后创建一个新文件夹。

    ​ 在cache2下挂在一个新分区sda4,下次写数据写到新分区cache2目录下

    tips:inode分区完后不增加inode数量,改变inode大小

  • 其他场景

    大量小文件问题:

    可能会使inode耗尽,使得文件无法创建(磁盘利用率低)

    方案:将block划分小一点

    大文件问题:

    一个文件占用多个block,是的文件读写速率慢

    方案:将block划分大一点

    ext文件系统---->xfs文件系统

  • 面试题:Linux中软链接与硬链接区别

    1、从定义: linux系统中,链接有两种,一种被称为软链接,类似于快捷方式,存放指向原文件inode的信息,与原文件inode不同。 一种是硬链接,与原文件有相同的inode,可以指向数据block。

    2、从创建方式:硬链接命令In 原文件 目标文件,软链接命令ln -s 原文件目 标文件

    3、从创建对象: In命令不能对目录创建硬链接,但是可以对目录创建软链接。因为软链接可以跨越文件系统,硬链接则不能。对目录和为客户创建的文件软链接经常用到。

    4、删除软链接文件,对硬链接和原文件无影响。

    5、删除文件硬链接,对原文件及软链接文件无影响

    6、删除原文件,对硬链接读取数据无影响,软链接则失效。会出现红底白字状。

    7、同时删除原文件和硬链接,原文件才会被真正删除

    8、很多硬件设备中的快照原理,类似于硬链接原理

正式班D16的更多相关文章

  1. 正式班D5

    2020.10.10星期六 正式班D5 一.上节课复习 1.硬盘分类 ​ 1.机械磁盘 ​ io时间=平均寻道时间+平均延迟时间 ​ buffer:写缓冲区 ​ cache:都缓存 ​ 2.固态硬盘 ...

  2. 正式班D7

    2020.10.13星期二 正式班D7 一.上节课复习 Linux发展 批处理系统 多道技术 分时操作系统 multics->Unix->minix->Linux(如Redhat.c ...

  3. 正式班D8

    2020.10.15星期四 正式班D8 一.上节课复习 OSI七层协议 socket socket是对传输层以下的封装 IP+port标识唯一一个基于网络通讯的软件 TCP与UDP TCP:因为在通信 ...

  4. 正式班D9

    2020.10.16星期五 正式班D9 一.vmware workstation的使用 虚拟机管理软件 定义 虚拟机(Virtual Machine)软件是一套特殊的软件,它可以作为操作系统独立运行, ...

  5. 正式班D11

    2020.10.20星期二 正式班D11 bash解释器交互式环境特性 命令和文件自动补全(Tab只能补全命令和文件) 快捷键 CTRL+C ==>终止前台运行的程序 CTRL+D ==> ...

  6. 正式班D12

    2020.10.21星期三 正式班D12 一.目录结构 系统目录结构 目录 文件夹:存放的是具体有哪些文件 文件:存放的就是具体的数据 需要记住的 /dev/cdrom # 光盘设备,光盘里存放的内容 ...

  7. 正式班D13

    2020.10.22星期四 正式班D13 修改文件内容 vim编辑 vim基础 可理解为Windows下的文本编辑器 vim可用来修改配置.写脚本 三种模式(命令模式.输入模式.末行模式) 命令模式按 ...

  8. 正式班D14

    2020.10.23星期五 正式班D14 9.5 文件处理三剑客(支持|) 9.5.1 sed流式编辑器 事先制定好编辑文件的指令,让sed自动完成对文件的整体编辑(同一时间内存中只有文件中一条) # ...

  9. 正式班D20

    2020.11.02星期五 正式班D20 目录 11 软件包管理 11.1 软件包介绍 11.1.1 编程语言分类 11.1.2 三种安装包 11.2 rpm包管理 11.2.1 rpm包简介 11. ...

随机推荐

  1. 获取NX一组属性

    NX中的属性是可以分组的,有时我们想获取某一个组下的所有属性,但是NX封装的接口不够好用,因此在此基础上,我封装了一个,供大家参考: 1 //属性值是字符串类型,obj对象tag,category组名 ...

  2. Python-生成器函数(协程实现底层原理)-yield

    yield 1. 函数执行的时候,找到yield关键字,则会标记这个函数,返回生成器对象 2. Python解释器会记录最近一次函数中yield位置 3. 生成器对象也是分配在栈堆上 4. 通过yie ...

  3. python_多级菜单_纯循环与分支

    源代码: #!/usr/bin/python3 __author__ = 'beimenchuixue' __blog__ = 'http://www.cnblogs.com/2bjiujiu/' d ...

  4. Go-archive/tar: write after close gopher.txt

    where? 在使用Go中tar包循环写入内容的时候 why? 因为已经关闭了tar.writer对象,所以无法写入,但是程序还是有写入操作,所以报错 way? 通过 defer关键字来管理资源的释放 ...

  5. gRPC-微服务间通信实践

    微服务间通信常见的两种方式 由于微服务架构慢慢被更多人使用后,迎面而来的问题是如何做好微服务间通信的方案.我们先分析下目前最常用的两种服务间通信方案. gRPC(rpc远程调用) 场景:A服务主动发起 ...

  6. 076 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 01 Java面向对象导学

    076 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 01 Java面向对象导学 本文知识点:Java面向对象导学 说明:因为时间紧张,本人 ...

  7. JDBC Java 连接 MySQL 数据库

    MySQL 版本:Server version: 5.7.17-log MySQL Community Server (GPL) 用于测试的 MySQL 数据库:game 查看数据库中的表 mysql ...

  8. mac常用指令

    mkdir demo //创建一个文件夹 touch index.html // 创建一个html文件 rm rouch index.html //删除找个index.html文件 rmdir dem ...

  9. golang常用库:配置文件解析库-viper使用

    一.viper简介 viper 配置解析库,是由大神 Steve Francia 开发,他在google领导着 golang 的产品开发,他也是 gohugo.io 的创始人之一,命令行解析库 cob ...

  10. 连Python产生器(Generator)的原理都解释不了,还敢说Python用了5年?

      最近有很多学Python同学问我,Python Generator到底是什么东西,如何理解和使用.Ok,现在就用这篇文章对Python Generator做一个敲骨沥髓的深入解析.   为了更好地 ...