Linux 知识地图

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
访问控制,不限时长
公网NAT网关,每月750个小时 15CU
简介: # 1. 概述:   极客时间发表了 linux 知识体系的知识图谱,在参照其地图整理学习 linux 过程中,对原内容做了整理修改,并增加了容器篇等内容,图谱不少内容抄自原地图,分享一下: ![linux 2.jpg](https://ata2-img.cn-hangzhou.oss-pub.aliyun-inc.com/679d37172d194b5018487f9eab582c

1. 概述:

  极客时间发表了 linux 知识体系的知识图谱,在参照其地图整理学习 linux 过程中,对原内容做了整理修改,并增加了容器篇等内容,图谱不少内容抄自原地图,分享一下:
linux 2.jpg

2. 基础篇

2.1 Linux常见发行版本

  • Red Hat
  • Ubuntu
  • CentOS
  • Debian
  • Fedora

2.2 目录结构

  1. /bin 最常用命令存放目录
  2. /boot linux 启动时核心文件,包括连接文件以及镜像文件
  3. /dev Linux 外部设备,linux 一切都是文件
  4. /etc 系统管理员需要配置的文件和子目录
  5. /home 所有用户的主目录,按照用户名建立子目录
  6. /lib 系统最基本的动态连接共享库
  7. /lost+found 非法关机时存放临时文件
  8. /media linux 系统自动识别的一些设备,比如 U 盘,光驱
  9. /mnt 用户临时挂载的文件系统,比如挂载光驱的光盘
  10. /opt 主机额外安装软件的目录,比如 oracle 安装
  11. /proc 虚拟目录,系统内存的映射,通过这个目录获取系统信息,比如进程信息等
  12. /root 系统管理员主目录
  13. /sbin 存放系统管理员使用的系统管理程序
  14. /selinux 安全机制 selinux 的目录(redhat/centos 特有)
  15. /srv 服务启动后需要提取的数据
  16. /sys linux2.6内核新目录,sysfs 文件
  17. /tmp 临时文件目录
  18. /usr 用户自身的程序与文件目录
  19. /usr/bin 系统用户使用的应用程序
  20. /usr/sbin 系统管理员的应用程序和守护程序
  21. /usr/src 内核源代码默认的放置目录
  22. /var 存放不断扩充的东西,包括日志文件等
  23. /run 临时文件系统,存储系统启动以来的信息

3.系统操作篇

3.1 使用终端

1. 命令提示符   
$ 普通用户    
# root 用户  
2. 命令和路径补全: tab 键  
3. 命令的分类(使用 type 查看某个命令的所属分类) type ls    

3.2 帮助命令

  1. man  
          man xxx: 获取 xxx 命令的帮助  
          man 1 man:查看 man 命令自身的帮助  
    2. help  
         help xxx: 获取内部命令的帮助  
         xxx --help: 获取外部命令的帮助  
    3. info  
         比 man 更丰富的帮助信息,格式:info xxx  

3.3 文件与目录管理

1. 文件与目录查看命令:ls  
       -l 显示文件的详细信息  
       -a 显示隐藏文件  
       -r 逆序显示  
       -t 按时间排序  
       -R 递归显示  
2. 建立和删除目录  
       mkdir 新建目录  
       rmdir 删除空目录  
       rm -r 递归删除目录与文件    
3. 路径操作(绝对路径与相对路径)  
      cd 进入指定路径  
      pwd 显示当前路径  
4. 通配符  
    * 匹配任意字符  
    ? 匹配单个字符  
    [xyz] 匹配 xyz 任意一个字符  
    [a-z] 匹配字符串  
    [|xyz]或[^xyz] 匹配不在 xyz 中的任何字符

5. 复制文件cp  
    -r 复制目录  
    -p 保留用户权限时间  
    -a 尽可能保留原始文件的属性,等同于-dpr  
6. 删除文件 rm
    -r 递归删除  
    -f 不提示  
7. 移动与重命名 MV  
    移动文件 mv file1 dir1/  
    重命名文件 mv file1 file2   

3.4 文本查看

   1. head  
   head -n 20 显示前20行  
   2. tail   
   tail -f -n 300 显示结尾300行并刷新  
   3. cat  
     cat filename |more  
   4. wc  
   cat filename|grep 'name' | wc -l 统计行数  

3.5 打包和压缩

1. tar
      命令
        -c:创建新的tar文件
        tar -zcvf /tmp/etc.tar.gz /etc 打包并以 gz 方式压缩文件
        -x:解开tar文件
        tar -zxvf /tmp/etc.tar.gz 解压以gzip压缩的文件
        -t:列出tar文件中包含的文件的信息
        tar -tvf /tmp/etc.tar
        -r:附加新的文件到tar文件中
     参数
        -z:使用gzip进行解压缩
        tar -zcvf /tmp/etc.tar.gz /etc  
        -j:使用bzip2进行解压缩
        tar -jcvf /tmp/etc.tar.bz2 /etc
        -Z:使用compress进行解压缩
        tar -Zcvf /tmp/etc.tar.Z /etc
        -v:显示解压缩执行过程
        -f:指定要处理的文件名  
  2. gzip
      gzip [ -acdfhlLnNrtvV19 ] [-S suffix] [ name ... ]
      gzip -c file1 file2 > foo.gz
      gzip -ld 1.c.gz //解压,并显示详细过程  
  3. bzip2
     bzip2 [-cdfhkLstvVz][--repetitive-best][--repetitive-fast][- 压缩等级][要压缩的文件]
     bzip2 -v temp.bz2 //解压文件显示详细处理信息
     bzip2 -c a.c b.c c.c 压缩文件  

3.6 vim 文本编辑器

3.6.1. 正常模式

浏览和修改文本内容
默认打开模式,其他模式按Esc 键就可以返回正常模式

3.6.2. 命令模式(底线)

  • 保存操作命令
:q 退出程序
:w 保存文件
ZQ | :q! 强制退出并忽略所有更改
:e! 放弃所有修改,并打开原来文件
ZZ | :wq | :x 保存并退出
* 查找命令  
/text:查找text,按n查找下一个,按N查找前一个
?text:查找text,反向查找,按n查找下一个,按N查找前一个
:set ignorecase/noignorecase 忽略/不忽略 大小写的查找
:set hlsearch/nohlsearch 高亮搜索结果/关闭高亮,所有结果都高亮显示,而不是只显示一个匹配。
:nohlsearch  关闭当前的高亮显示,如果再次搜索或者按下n或N键,则会再次高亮;
:set incsearch  逐步搜索模式,对当前键入的字符进行搜索而不必等待键入完成。
:set wrapscan  重新搜索,在搜索到文件头或尾时,返回继续搜索,默认开启。
  • 其它
    :set number/nu 显示行号
    :!command 执行 shell 命令 command
    :n,m w!command 将文件中 n 行到 m 行的内容作为 command 的输入并执行,若不指定 n,m,则代表整个文件内容作为 command 执行
    :r!command 将命令 command 的输出结果放到当前行
    :set nonu 取消行号
    :r filename 把 filename 文件的内容插入到当前光标所在位置下
    ctrl + g 当前行信息
    g ctrl + g 字数统计
  • 替换命令
    :s/regexp/replacement 替换当前行第一个匹配
    :S/regexp/replacement 替换当前行所有匹配
    :n,\$s/regexp/replacement/ 替换n行到最后一行中第一个匹配
    :n,$S/regexp/replacement/g 替换第 n 行到最后的每个匹配
  • 多行拷贝移动
    :n,m co p 将行 n 到 m 行之间的内容拷贝到第 p 行下
    :n1,n2 m p 将 n1行到 n2行之间的内容移动到第 p 行下

3.6.3. 插入模式

  • 进入插入模式
i 在光标所在字符前开始输入文字并进入插入模式
a 在光标所在字符后开始输入文字并进入插入模式
o (字母o) 在光标所在行的下面单独开一新行来输入文字并进入插入模式
s 删除光标所在的字符并进入插入模式
I 在行首开始输入文字并进入插入模式。此行首指第一个非空白字符处。如果行首有空格,则在空格之后输入文字并进入插入模式
A 在行尾开始输入文字并进入插入模式。这个好用,您不必管光标在此行的什麽地方,只要按 A 就会在行尾等着您输入文字。
O (大写字母O) 在光标所在行的上面单独开一新行来输入文字并进入插入模式。
S 删除光标所在行并进入插入模式
  • 删除命令

    行删除
     D | d$ 删除光标到行尾
     d^ 删除至行首
     dd 删除行
     dnG 删除第 n 行到当前行
     dG 删除当前行到最后一行
     S 删除当前行且处于可编辑状态
     C 删除到行尾,并处于可编辑状态
     :n,m d 将第 n 行到 m 行的内容删除
 字符删除
     x 向后删除一个字符
     nx 向后删除 n 个字符
     X 向前删除一个字符
     nX 向前删除 n 个字符
     s 删除光标所在字符,并处于可编辑状态
     i 在光标前插入
     a 在光标后插入
单词删除
     diw 删除光标所在单词,不包括空白字符
     daw 删除光标所在的单词,包括空白字符
     dw 当前光标位置删除到下一个单词词首
     ndw | ndW 删除光标处开始及最后的 n-1个词
  • 复制粘贴命令
    yy 复制当前行
    nyy 复制从当前行开始的 n 行
    ynw 复制 n 个单词
    ynl 复制 n 个字符
    y$ 复制当前光标至行尾处
    p 粘贴到光标之后
    P 粘贴到光标之前
  • 移动命令
    单词
     w 下一个单词第一个字符
     W 下一个长单词第一个字符
     e 下一个单词最后字符
     E 下一个长单词最后一个字符
     b 前一个单词第一个字符
     B 前一个长单词第一个字符
     ge 前一个单词的最后一个字符
     $ 行尾
     0(数字) 行第一个字符
     ^ 第一个非空字符
     gg 第一行
     G 到最后一行
     nG 到第 n 行
屏幕
     ctrl+u 向上滚动半屏
     ctrl+d 向下滚动半屏
     Pgup | ctrl+b 向上滚动一屏
     PgDn | ctrl + f 向下滚动一屏
句子
     ( 句首
     ) 句尾
段落
     { 段首
     } 段尾
  • 其它
    撤销与重复
     u 撤销前次操作
     ctrl + r 重复前次操作
     :e! 文档还原原始状态

3.6.4. 可视模式

3.7 用户管理

3.7.1 用户命令

  1. 用户主目录/home /root
  2. 常用用户命令
    useradd -p 'PASSWORD' ${USERNAME} 添加用户
    userdel 删除用户
    passwd 设置用户密码
    usermod 修改用户信息
    groupadd 添加组
    groupdel 删除用户组
  1. 以管理员身份运行
    su 切换当前用户身份
    sudo 用 root 身份执行某条命令
    visudo 修改 sudo 命令配置文件

3.7.2 用户配置文件

    /etc/passwd 用户信息配置文件
    /etc/shadow 用户密码信息配置文件

3.8 权限管理

  1. 权限的表示方法

    • 文件权限
    r 读权限
    w 写权限
    x 执行权限
  • 目录权限
    rx 进入目录读取文件名
    wx 修改目录内文件名
    x 进入目录
  • 特殊权限
   /etc/passwd 用户信息配置文件

2.权限的相关命令

    chmod 修改权限
    chown 更改属主,属组
    chgrp 修改属组

4.系统管理篇

4.1 正则表达式

  1. 正则表达式是什么
   对字符串操作的一组逻辑公式
   用于对符合规则的字符串进行查找和替换
  1. 初识元字符
   ^ 字符开始位置
   $ 字符结束位置
   . 单个换行之外所有字符

3.扩展元字符

  • 匹配字符内容
\d 单个数字0-9
\D 单个非数字 a,-,'
\w 单个字母,数字,下划线 a,1,_
\W 非字母、数字、下划线 {,-,[
\s 空白字符 单个空格、回车(\n)、制表符(\t)
\S 非空白字符
. 换行以外的所有字符
  • 匹配次数
    * 0次及0次以上 \d* 匹配数字,123,02,空
    + 1次及1次以上 \d+ 匹配数字 123,02,3
    ? 0次或1次 \d? 匹配数字,2、空
    {m,n} m次到n次    \d{1,3} 匹配数字,2、12、123
    {n}    n次    \d{2} 匹配数字,12
    {n,}    n次及n次以上    \d{2,} 匹配数字,12、123、1234
  • 分组符号
    () 分组匹配的内容可以在后续的正则中重复使用,只需要指定分组的序号即可。分组的序号是从左往右以此递
  • 匹配位置
    ^    字符串开始位置    (^)abc 匹配字符串开头位置,a前面的位置
    $    字符串结束位置    abc($) 匹配字符串结束位置,c后面的位置
    \b    单词(\w)与非单词之间的位置    a(\b)= 匹配"a"与"="之间的位置
    \B    字符与字符之间的位置    a(\B)b 匹配"a"与"b"之间的位置
  • 其它元字符
    []    匹配范围    [a-zA-Z] 匹配单个英文字母
    ^    在上面的匹配位置元字符中,仅仅介绍了匹配字符串开头位置的作用,这里另外一个作用就是放在范围元字符中,起到取反的作用    [^a-d] 匹配单个非a,b,c,d四个英文字母之外的字符
    \    转义元字符    1\+ 匹配"1+"
    |    分支条件    ab|cd 匹配ab、cd

## 4.2 软件安装与更新

  1. RPM 安装
   -i 安装
   -q 查询
   -U 升级
   -e 卸载

2.移动与重命名

   安装 yum install xxx
   卸载 yum remove xxx
   更新 yum update xxx

3.源代码编译安装

   ./configure
   make
   make install

4.3 文本与文件查找

  1. grep
   -i 忽略大小写
   -v 反转
   -a 处理二进制文件
   -R 递归方式
  1. find
   -name 按照文件名搜索
   -perm 按照权限搜索
   -user 按照属主搜索
   -type 按照文件类型搜索

4.4 网络配置

  1. 网络配置命令
   ifconfig 查看和配置网络接口
   ip 查看和配置网络,路由
   netstat 查看进程监听端口和状态
   network 与 NetworkManager 网络管理脚本
  1. 配置文件
   ifcfg-eth0 etho 网卡配置文件
   networking 主机名配置文件
   resolv.conf 域名配置文件

## 4.5 防火墙

  1. SELinux

    • 访问控制方式分类
    DAC 自主访问控制
    MAC 强制访问控制
  • 常用命令
   getenforce 查看 selinux 状态
    setenforce 修改访问状态
  • 配置文件
    /etc/selinux/config
    enforcing 强制控制
    permissive 通知但不强制控制
    disable 禁用访问控制
  1. iptables

    filter 用于过滤
    nat 用于地址转换
    INPUT 进入本主机方向
    OUTPUT 本主机发出方向
    FORWARD 转发方向
    PREROUTING 路由向前转换
    POSTROUTING 路由后转换
  • 选项
    -i -o 接口
     -s -d IP 地址/子网掩码
    -p tcp/udp 指定协议
          --sport 源端口
          --dport 目标端口
    -j 动作
          ACCEPT:允许数据包通过。
          DROP:直接丢弃数据包,不给任何回应信息,这时候客户端会感觉自己的请求泥牛入海了,过了超时时间才会有反应。
          REJECT:拒绝数据包通过,必要时会给数据发送端一个响应的信息,客户端刚请求就会收到拒绝的信息。
          SNAT源地址转换,解决内网用户用同一个公网地址上网的问题。
          MASQUERADE:是SNAT的一种特殊形式,适用于动态的、临时会变的ip上。
         DNAT:目标地址转换。
         REDIRECT:在本机做端口映射。
         LOG:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则,也就是说除了记录以外不对数据包做任何其他操作,仍然让下一条规则去匹配。
  1. tcpdump

    • 保存和读取规则
    -r filename 从文件读取已经抓取的数据包
    -w filename 将抓取的数据包保存至文件
  • 常用选项
    -v 显示详细信息
    -n 不将 IP 地址解析为主机名
    -i 接口 例如 -i eth0
    host 主机
    port 端口
  • 常用过滤
    过滤主机 tcpdump -i eth1 src/dst host 192.168.1.1
    过滤端口 tcpdump -i eth1 src/dst port 25
    网络过滤 tcpdump -i eth1 src/dst net 192.168
    协议过滤 tcpdump -i eth1 tcp
    表达式过滤 tcpdump -i eth1 '((tcp) and ((dst net 192.168) and (not dst host 192.168.1.200)))'
    tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap 
       tcp: ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型
          -i eth1 : 只抓经过接口eth1的包
          -t : 不显示时间戳
          -s 0 : 抓取数据包时默认抓取长度为68字节。加上-S 0 后可以抓到完整的数据包
          -c 100 : 只抓取100个数据包
          dst port ! 22 : 不抓取目标端口是22的数据包
          src net 192.168.1.0/24 : 数据包的源网络地址为192.168.1.0/24
          -w ./target.cap : 保存成cap文件,方便用ethereal(即wireshark)分析

4.6 服务与日志

1.服务状态的查看

   service 用法: service 服务名称 start|stop|restart|status
   systemctl: 用法: systemctl start|stop|restart|status 服务名称 service
   service list: systemctl list-unit-files chkconfig --list

2.服务配置文件 /etc/systemd/system/*.service

3.常用系统日志

   /var/log 系统日志默认目录
   message 系统日志
   dmesg 内核启动日志
   secure 安全日志
  1. 应用程序日志

4.7 磁盘分区

  1. 链接文件
   符号链接 ln -s 源文件 目标文件(目标文件不能事先存在)
   硬链接 ln 源文件 目标文件
  1. mount 挂载命令
   -t 文件系统类型
   -o 挂载选项
        ro 只读挂载
        rw 读写挂载
        remount 重挂载

3.配置文件 /etc/fstab 启动自动加载分区信息

   fdisk 分区工具
   -l 查看分区信息
   fdisk /dev/sdx 为某一存储分区
   mkfs 格式化 mkfs.ext4
   parted -l 查看分区信息

## 4.8 文件系统

  1. 常用命令
   df -l
      查看分区所占磁盘空间信息
   du -a
      du -ah --max-depth=1  查看当前目录下每个目录所占磁盘大小
   mkfs 格式化系统
       mkfs.ext4 -i 1048576 -n /dev/sdc
   列出系统打开文件 lsof
      lsof -D /path 指定路径显示,-D 递归所有子目录和文件
      lsof -c java 列出 java 程序打开的文件
      lsof -u user 显示指定用户打开的文件
      lsof -i 符合条件 lsof -i tcp:80
      lsof -p 234 234进程打开的文件
      lsof -g gid 显示用户组打开文件
  1. ext4
  2. XFS

4.9 Linux 系统启动过程与故障修复

4.9.1 系统启动过程

  1. Power on
  2. BIOS

    • 上电自检POST
    • 初始化硬件: 显卡.内存.时间.磁盘
    • 查找启动介质:CD-ROM,PXE,HDD
    • 查找加载磁盘上的启动扇区 .
  3. MBR(主引导记录)

    • BootLoader 446bytes
    • Partition Table 64bytes: 分区 ID,起始磁柱,数量,最多4个
    • Magic Number 有效性验证 2bytes .
  4. GRUB(多系统引导)
    stage_1 就是MBR,装载 stage_2
    stage_1.5 识别文件系统,引导 stage_2
    stage_2 /boot/grub/grub.conf,查找并装载Kernel到内存,将控制权从 GRUB 交给 Kernel .
  5. Kernel 内核引导
    核心程序 Kernel, 保留最基本模块,GRUB读取后解压 Kernel镜像
    initrd 临时 rootfs,挂载驱动和 rootfs 后从内存清除 .
  6. sys init 系统初始化

    1. /sbin/init

      (1). /etc/inittab 初始化键盘,字体,网络,装载模块
      (2)./etc/rc.d/rc.sysinit 执行初始化脚本
             /etc/fstab
             /etc/rd.d/rc.local
      (3).初始化进行基本配置  
1. 获取网络环境与主机类型:读取网络环境设置文件"/etc/sysconfig/network",获取主机名与默认网关等网络环境。
2.测试与载入内存设备/proc及usb设备/sys 除/proc外,主动检测是否有usb设备并加载usb驱动,载入usb文件系统
3.根据配置决定是否启动SELinux
4.接口设备的检测与即插即用(pnp)参数的测试
5.用户自定义模块的加载。用户"/etc/sysconfig/modules/*.modules"加入自定义的模块,此时会加载到系统中
6.加载核心的相关设置。按"/etc/sysctl.conf"这个文件的设置值配置功能
7.设置系统时间(clock)
8.设置终端的控制台的字形
9.设置raid及LVM等硬盘功能
10.以方式查看检验磁盘文件系统。
11.进行磁盘配额quota的转换。
12.重新以读取模式载入系统磁盘。
13.启动quota功能
14.启动系统随机数设备(产生随机数功能)。
15.清除启动过程中的临时文件
16.将启动信息加载到"/var/log/dmesg"文件中
  (4). 执行/etc/rc.d/rc*.d(*=0~6)脚本: Snn Script
b. /sbin/mingetty
      /etc/login

登录执行.png

  1. 启动完成 (使用控制台)
    /etc/X11/prefdm
     gdm 进入 Gnome 桌面环境
     kdm 进入 KDE 桌面环境
     xdm 进入 X window 桌面环境
     Xinit
(gdm 进入 Gnome 桌面环境, kdm 进入 KDE 桌面环境, xdm 进入 X window 桌面环境)
      ~/.xinitrc
      ~/.xserverrc

4.9.2 更新内核版本

  * RPM方式更新
  * 源代码编译方式更新

## 4.10 逻辑卷与 LVM

  1. 分层管理磁盘Logical Volume Manager
  2. LVM 分为三层
   PV(物理卷,最底层,物理硬盘或者分区)
    PE,物理区域,用于分配的最小存储单元
   VG:卷组,在 PV 之上,包含多个 PV
   LV:逻辑卷,VG 之上,相当于分区概念,大小可以改变
  1. 常用命令
   pvcreate /dev/sdb1 在分区上建立 PV
   pvs 查看 pv 信息
   pvdisplay 查看 pv 详细信息
   vgcreate vg1 /dev/sdb1 将建立的 pv 加入 vg1组
   vgs/vgdisplay 查看 vg 详细信息
   lvcreate -L 200M -n lv1 vg1
   lvs/lvdisplay 查看 lv 详细信息

5. Shell 篇

## 5.1 认识 BASH

  1. shell 是命令解析并在内核执行,返回结果
  2. shell 脚本的用处

    • 组合系统命令实现自动化功能
    • 组成脚本的基本元素是命令,不用深入账务系统函数集
  3. 内建命令和外部命令

    • 内部命令不会建立子进程,但是对子 shell 无效
    • 外部命令会创建子进程

5.2 管道与重定向

  1. 管道符 |
  2. 重定向符
   < 输入重定向
   > 输出重定向,覆盖方式
   >> 输出重定向,追加方式
  1. sort 对文本进行排序
  2. join 连接2个字符串

5.3 进程与内存查看调整

  1. 进程查看命令: ps top 对系统进程排序查看
  2. 内存查看命令

    • free 查看系统的内存使用率
    • sar 显示详细的系统运行状态,用于排查故障
  3. 流量监控工具: iftop 查看某一进程的网络流量

5.4 变量与环境变量

  1. 变量的定义

    • shell 变量无需声明
    • 销毁变量 unset 变量名
  2. 变量的赋值: 变量名=变量值
  3. 环境变量: path 变量解析路径
  4. 环境变量定义文件

    • /etc/profile 系统环境变量默认保存文件
    • /etc/bashrc shell 执行初始化配置新闻

5.5 转义与引用

  1. 特殊符号
  2. 转义符 /
  3. 引用符号

     单引号 ''
     双引号 ""
    

5.6 循环

  1. while 循环

    • while 循环根据 while 判断结果确定是否继续执行
    • 判断结果为命令的返回值,0继续执行
    • 如果判断结果为0,无法到达循环结束成为死循环
      2.for 循环
    • Shell 的 for 循环使用遍历方式 for ... in ...格式
    • for 循环支持 c 语言写法,需要使用(())格式
    • 支持使用 break,continue 对循环进行控制
    • for 循环支持嵌套使用

5.7 函数

  1. 函数的定义
    定义方法: 函数名(){}

2.函数的使用
直接使用函数名()

5.8 计划任务

  1. 一次性计划任务 at
    2.周期性计划任务 cron

    • 查看 crontab -l
    • 编辑 crontab -e

5.9 运算符

  1. 运算符号 + - * / 加减乘除
  2. 弊端 运算速度低,对浮点运算支持不好

5.10 测试与判断

  1. test 测试

    • 书写 if test $[num1] -eq $[num2]
    • 数值测试 -eq -ne -gt -ge -lt -le
#!/bin/bash
num1=100
num2=100
if test $[num1] -eq $[num2]
then
   echo '两个数相等!'
else
   echo '两个数不相等!'
fi

a=5
b=6
result=$[a+b] # 注意等号两边不能有空格
echo "result 为: $result"
返回结果:result 为:11
  • 字符串测试 = != -z -n (字符串的长度为零)
num1="ru1noob"
num2="runoob"
if test $num1 = $num2  
then
   echo '两个字符串相等!'
else
   echo '两个字符串不相等!'
fi

    = 等于为真
    != 不等于为真
    -z 字符串 字符串长度为0 则真
    -n 字符串 长度不为0则真
  • 文件测试
    -e 文件名 存在为真
    -r 文件名 存在且可读为真
    -w 文件名 存在且可写为真
    -x 文件名 存在且可执行为真
    -s 文件名 存在且至少一个字符为真
    -d 文件名 存在且为目录为真
    -f 文件名 存在且为普通文件为真
    -c 文件名 存在且为字符型特殊文件为真
    -b 文件名 存在且为块特殊文件为真
  1. if 判断

    • if : if condition command1 then command2 fi
    • if else
    • if else-if else
  2. case 分支
case 值 in
  模式1)
     command1
     commandN
     ;;
  模式2)
    command1
    commandN
    ;;
esac

6 文本操作篇

6.1 SED

6.1.1 sed 基础

  1. 字符流编辑器
  2. sed [options] [sed-commands] [input-file]
  3. sed [查找条件] [操作命令] 文件

6.1.2 查找条件

  1. 数字、正则表达式组合定位
  2. 数字定位 删除第2行 sed '2d' file
  3. 正则表达式 加/ 例如: 包含 john 的行 sed '/john/d' file 以 john 开头的行 sed '/^john/d' file
  4. 逗号分割线 第1行与第3行之间的范围 sed '1,3d' file west 和 east 之间的所有行 sed '/west/,/east/d' file
 5. 组合方式 第1行到 west 所有行 sed '1,/west/d' file
 6. 特殊情况 $删除最后一行 sed '$d' file

6.1.3 选项

  1. -n 输出到屏幕,取消默认打印
    sed -n '3p' file 显示第几行
    查找1-3行 sed -n '1,3p' file
    查找指定几行 sed -n '1p;3p;5p' file
    显示 包含 'Thread-70' 到 'DiamondEnv'行之间的行 sed -n '/Thread-70/,/DiamondEnv/p' ./diamond-client.log
    显示1-5行并显示行号
  1. -e 多重编辑
  2. -f 指定 sed 脚本文件
  3. -r 正则扩展使用
  4. i 插入 在当前行上添加一或者多行: sed -i 's/root/world/g' yum.log 用world 替换yum.log文件中的root真实写入

6.1.4 基础命令

  1. a 追加 在某一行追加内容
    sed '$a106,wuxingge,UFOn107,lee,XO' file 最后一行
  2. d 删除
    d 删除行 sed '2,50d' file 删除不显示2-50行内容
  3. s 替换
    sed 's/west/north/g' file 将 west 替换为 north,g 表示全局替换
  4. c 更改
    sed '2,5c replacechars' 替换2-5行内容为 replacechars
  5. r 读取文件
    sed '/root/ r /var/log/test.txt' yum.log yum.log 匹配root后读入text.txt的内容在匹配内容之下
  6. w 写文件
    sed '/root/ w /home/omc/root.txt' yum.log 【yum.log匹配root后写入root.txt',真实写入】
  7. q 退出
  8. y 替换
  9. p 打印

6.1.5 高级命令

  1. 多行命令
    N 将多行最佳到模式空间进行处理
    D 删除多行模式空间的第一个字符至第一个换行符,并返回到脚本的开头执行
    P 输出模式空间中的第一个字符至第一个换行符号
  2. 保持空间模式
    h 将模式空间内存存储至保持空间,覆盖保持空间内容 sed -e '/John/h' -e '$G' file
    H 将模式空间内存存储至保持空间,追加到保持空间内容
    g 保持空间内容存储至模式空间,覆盖模式空间内容
    G 保持空间内容存储至模式空间,追加模式空间内容
    x 交换模式空间和保持空间的内容
  3. 条件分支
    : 标签
    b branch 命令用于脚本中将控制转移到另一行,没有指定标签就转移到结尾
    t 测试命令

6.2 AWK

6.2.1 工作方式

  1. 流处理器: awk -F|-f|-v 'BEGIN{ commands } pattern{ commands } END{ commands }' file
  2. -F 指定分割符: awk -F: '{print $1,$3,$6}' OFS="t" /etc/passwd
  3. -f 调用脚本: awk -f script.awk file
  4. -v 定义变量 var=value
  5. '' 引用代码块
  6. BEGIN{Command} 语句块 awk 输入流中读取行之前被执行
  7. // 匹配代码块
  8. pattern{Command} 通用命令,默认执行{print}
  9. ; 多条命令使用分号间隔
  10. END{Command} 在执行结束后执行

6.2.2 运算符

  1. 算数运算符
  2. 逻辑运算符

6.2.3 循环

  1. while 循环
  2. for 循环
  3. break continue

6.2.4 系统变量

  1. FS 字段分割符
  2. OFS 输出字段分隔符
  3. RS 记录分隔符
  4. ORS 输出记录分隔符

6.2.5 条件

语法格式
 if ... else ..
if嵌套

6.2.6 函数

算数函数
随机函数
字符串函数

7. 容器篇

7.1 容器原理

  • KVM-ECS
  • Namespace
  • CGroup
  • Rootfs

7.2 Docker

7.2.1 docker 命令

  1. 容器生命周期管理
    docker run -it nginx:latest /bin/bash 创建新的容器并运行一个命令
    docker start [OPTIONS] CONTAINER 启动/停止/重启容器
    docker kill [OPTIONS] CONTAINER 杀掉运行中的容器
    docker exec [OPTIONS] CONTAINER COMMAND 在运行的容器中执行命令
    docker create --name con_name nginx:latest 创建容器不启动它
    docker pause/unpause [OPTIONS] CONTAINER 暂停或者回复容器中的进程
    docker rm [OPTIONS] CONTAINER 删除容器
  2. 容器操作
    docker ps -a -q 列出容器
    docker inspect [OPTIONS] NAME|ID 获取容器/镜像的元数据
    docker top [OPTIONS] CONTAINER 查看容器中运行的进程信息,支持 ps 命令参数
    docker attach [OPTIONS] CONTAINER 连接到正在运行中的容器
    docker events [OPTIONS] 从服务器获取实时事件
    docker logs [OPTIONS] CONTAINER 获取容器的日志
    docker wait [OPTIONS] CONTAINER 阻塞运行直到容器停止,然后打印出它的退出代码
    docker export [OPTIONS] CONTAINER 将文件系统作为一个tar归档文件导出到STDOUT
    docker port [OPTIONS] CONTAINER 列出指定的容器的端口映射
  3. 容器rootfs命令
    docker commit -a "alibaba.com" -m "mysql" CONTAINER [REPOSITORY[:TAG]] 从容器创建一个新的镜像
    docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH 容器主机之间的数据拷贝
    docker diff [OPTIONS] CONTAINER 检查容器里文件结构的更改
  4. 镜像仓库
    docker login/logout -u 用户名 -p 密码 登陆/登出到一个Docker镜像仓库
    docker pull [OPTIONS] NAME[:TAG] 从镜像仓库中拉取或者更新指定镜像
    docker push [OPTIONS] NAME[:TAG] 将本地的镜像上传到镜像仓库,要先登陆到镜像仓库
    docker search [OPTIONS] TERM 从Docker Hub查找镜像
  5. 本地镜像管理
    docker images [OPTIONS] [REPOSITORY[:TAG]] 列出本地镜像
    docker rmi -f IMAGE 删除本地一个或多少镜像
    docker tag [OPTIONS] IMAGE[:TAG] 标记本地镜像,将其归入某一仓库
    docker build [OPTIONS] --build-arg -f -t PATH | URL | - 命令用于使用 Dockerfile 创建镜像
    docker history [OPTIONS] IMAGE 查看指定镜像的创建历史
    docker save -o filename IMAGE 将指定镜像保存成 tar 归档文件
    docker load -i 导入使用 docker save 命令导出的镜像。
    docker import [OPTIONS] file|URL 从归档文件中创建镜像
  6. info|version
    docker info [OPTIONS] 显示 Docker 系统信息,包括镜像和容器数
    docker version [OPTIONS] 显示 Docker 版本信息

7.2.2 dockerd

用于管理容器的守护进程,docker的引擎

7.2.3 docker-compose

用户定义和运行多个容器的 Docker 应用程序

7.3 kubernetes

7.3.1 etcdctl

etcdctl --endpoints=$ENDPOINTS member list
etcdctl --endpoints=$ENDPOINTS put foo "Hello World!" 增加数据
etcdctl --endpoints=$ENDPOINTS get web --prefix 根据前缀查数据
etcdctl --endpoints=$ENDPOINTS del k --prefix 根据前缀删除数据
etcdctl --write-out=table --endpoints=$ENDPOINTS endpoint status 集群状态查看
etcdctl --endpoints=$ENDPOINTS endpoint health
etcdctl --endpoints=$ENDPOINTS member list/add/remove/update 集群成员操作

7.3.2 kubectl

  1. 基础命令

    • kubectl create
        configmap
            kubectl create configmap my-config --from-file=path/to/bar
        deployment
           kubectl create deployment my-dep --image=busybox
        cronjob
           kubectl create cronjob my-job --image=busybox
        service
           kubectl create service clusterip my-cs --tcp=5678:8080
        serviceaccount
           kubectl create serviceaccount my-service-account
        secret
           kubectl create secret docker-registry my-secret --docker-server=DOCKER_REGISTRY_SERVER --docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL
        role
          kubectl create role pod-reader --verb=get --resource=pods --resource-name=readablepod --resource-name=anotherpod
       rolebinding
          kubectl create rolebinding admin --clusterrole=admin --user=user1 --user=user2 --group=group1
       priorityclass
          kubectl create priorityclass default-priority --value=1000 --global-default=true --description="default priority"

    * kubectl get
          kubectl get pods -namespace nsname
    * kubectl run
          kubectl run nginx --image=nginx --dry-run
    * kubectl expose
          kubectl expose -f nginx-controller.yaml --port=80 --target-port=8000
    * kubectl delete
          kubectl delete pod,service baz foo

2. 应用管理
    * kubectl apply
        kubectl apply --prune -f manifest.yaml -l app=nginx
    * kubectl annotate
        kubectl annotate pods --all description='my frontend running nginx'
    * kubectl autoscale
        kubectl autoscale rc foo --max=5 --cpu-percent=80
    * kubectl convert
        kubectl convert -f . | kubectl create -f -
    * kubectl diff
        kubectl diff -f pod.json
    * kubectl edit
        kubectl edit job.v1.batch/myjob -o json
    * kubectl label
        kubectl label --overwrite pods foo status=unhealthy
    * kubectl patch
        kubectl patch -f node.json -p '{"spec":{"unschedulable":true}}'
    * kubectl replace
        kubectl replace -f ./pod.json
    * kubectl rollout
        kubectl rollout status daemonset/foo
    * kubectl scale
        kubectl scale --current-replicas=2 --replicas=3 deployment/mysql
    * kubectl set
        kubectl set env deployment/registry STORAGE_DIR=/local
    * kubectl wait
        kubectl wait --for=condition=Ready pod/busybox1

3. 应用执行
    * kubectl attach
        kubectl attach podname -c ruby-container -i -t
    * kubectl auth
        kubectl auth can-i create pods --all-namespaces
    * kubectl cp
        kubectl cp /tmp/foo_dir <some-pod>:/tmp/bar_dir
    * kubectl describe
        kubectl describe nodes kubernetes-node-emt8.c.myproject.internal
        kubectl describe po -l name=myLabel
    * kubectl exec
        kubectl exec -it mypod /bin/bash
    * kubectl logs
        kubectl logs -lapp=nginx --all-containers=true
    * kubectl port-forward
        kubectl port-forward service/myservice 5000 6000
    * kubectl proxy
        kubectl proxy --www=/my/files --www-prefix=/static/ --api-prefix=/api/
    * kubectl top
        kubectl top node

4. 集群管理
    * kubectl api-versions
    * kubectl approve (-f FILENAME | NAME)
    * kubectl cluster-info
    * kubectl cordon foo
    * kubectl drain foo --force --grace-period=0
    * kubectl taint node -l myLabel=X dedicated=foo:PreferNoSchedule
    * kubectl uncordon foo

5. 设置与用法
    * kubectl api-resources -o wide
    * kubectl completion bash
    * kubectl config current-context
    * kubectl explain pods
    * kubectl kustomize /home/configuration/production
    * kubectl version
    * kubectl rolling-update frontend-v1 frontend-v2 --image=image:v2

### 7.3.3 kubeadm
   * kubeadm init:  初始化master 节点
   * kubeadm join: 初始化 worker 节点,并加入集群
   * kubeadm upgrade: 更新集群到新版本
   * kubeadm config: v1.7.x 或者更低版本 kubeadm 初始化集群,需要对集群做一些配置以使用 kubeadm upgrade
   * kubeadm reset: 还原 kubeadm init 或者 kubeadm join 对主机所做的任何更改
   * kubeadm token: 管理 kubeadm join 使用的令牌
   * kubeadm version: 打印 kubeadm 版本
   * kubeadm alpha: 预览一组可用的新功能以便从社区搜集反馈

 ### 7.3.4 helm
   helm install 安装
   helm search 查找包
   helm list 列表已安装

### 7.3.5 CFSSL
   cfssl sign
   cfssl bundle
   cfssl genkey
   cfssl gencert
   cfssl serve

## 7.4 istio
1. Galley
2. istio_ca
3. istioctl
   istioctl auth
   istioctl authn
   istioctl dashboard
   istioctl kube-inject
   istioctl proxy-config
   istioctl experimental
   istioctl proxy-status
   istioctl register
   istioctl validate
   istioctl verify-install
   istioctl version
4. mixs
5. node_agent
6. operator
7. pilot-agent
8. pilot-discovery
9. sidecar-injector

## 7.4 KNative
  Build 构建
  Serving 服务
相关实践学习
通过容器镜像仓库与容器服务快速部署spring-hello应用
本教程主要讲述如何将本地Java代码程序上传并在云端以容器化的构建、传输和运行。
Kubernetes极速入门
Kubernetes(K8S)是Google在2014年发布的一个开源项目,用于自动化容器化应用程序的部署、扩展和管理。Kubernetes通常结合docker容器工作,并且整合多个运行着docker容器的主机集群。 本课程从Kubernetes的简介、功能、架构,集群的概念、工具及部署等各个方面进行了详细的讲解及展示,通过对本课程的学习,可以对Kubernetes有一个较为全面的认识,并初步掌握Kubernetes相关的安装部署及使用技巧。本课程由黑马程序员提供。 &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
目录
相关文章
|
3月前
|
存储 Linux Shell
Linux 导航和文件管理
Linux 导航和文件管理
21 0
|
6月前
|
运维 监控 Linux
【Linux笔记】系统信息
【Linux笔记】系统信息
|
6月前
|
存储 算法 Linux
【Linux】Linux上的绿色免安装软件包
【Linux】Linux上的绿色免安装软件包
191 0
|
Linux
LINUX查看OpenGL信息
LINUX查看OpenGL信息
409 0
|
Linux 开发工具
Linux 为linux enterprises 6安装图形桌面教程
Linux 为linux enterprises 6安装图形桌面教程
90 0
|
Linux
linux中五颜六色的文字
linux中五颜六色的文字
117 0
|
Linux
Linux C 实现屏幕截图
Linux C 实现屏幕截图
395 0
下一篇
无影云桌面