天天看點

Linux 知識地圖1. 概述:2. 基礎篇3.系統操作篇4.系統管理篇5. Shell 篇6 文本操作篇7. 容器篇

1. 概述:

  極客時間發表了 linux 知識體系的知識圖譜,在參照其地圖整理學習 linux 過程中,對原内容做了整理修改,并增加了容器篇等内容,圖譜不少内容抄自原地圖,分享一下:

Linux 知識地圖1. 概述:2. 基礎篇3.系統操作篇4.系統管理篇5. Shell 篇6 文本操作篇7. 容器篇

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 使用者臨時挂載的檔案系統,比如挂載光驅的CD光牒
  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 檔案系統

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           
Linux 知識地圖1. 概述:2. 基礎篇3.系統操作篇4.系統管理篇5. Shell 篇6 文本操作篇7. 容器篇
  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 之上,相當于分區概念,大小可以改變           
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. for 循環
  2. 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 服務