1. 程式人生 > 其它 >Linux三劍客之awk(包含磁碟管理)

Linux三劍客之awk(包含磁碟管理)

1. 磁碟管理

Linux系統中磁碟管理就是將硬碟通過掛載的方式,掛載到Linux檔案系統中

1. 掛載磁碟的步驟
    磁碟分割槽
    掛載
	
# 磁碟分割槽
    fdisk  分割槽2TB以下的磁碟
        最多可以分4個分割槽
    # 不絕對!!!!!!只能說這樣分最穩定
    gdisk  分割槽2TB以上的磁碟(其實都可以)
    # 需先安裝  yum install gdisk -y
        最多可以分128個分割槽
    
# 新增一塊磁碟
    lsblk:檢視本機的磁碟
        sda  磁碟
        sr0  映象檔案
    df -h:檢視本機分割槽
    關機,新增磁碟,新硬碟

1

2

3


持續下一步,直至完成,確定

# 磁碟分割槽
    lsblk
    fdisk /dev/sdb
    n  新建一個分割槽
    p  列印分割槽表
    d  刪除分割槽
    q  退出
    w  寫入磁碟並退出

"開始:"
    1. n
    2. 預設p--回車
    3. 預設1--回車
    4. 起始預設2048--回車
    5. 確定末尾+10G(選擇你想要分的大小)
    6. w寫入

# 掛載磁碟分割槽
    # mount /dev/sdb1  /mnt/
    # 目錄不限制,只是mnt就是用來掛載的資料夾
    1. 格式化檔案系統
        mkfs.xfs /dev/sdb1/

    2. 掛載
        mount /dev/sdb1 /mnt/

"總結:"
    1.關機
    2.新增硬碟
    3.建立分割槽
        fdisk /dev/sdb/
        or
        gdisk /dev/sdb
    4.格式化檔案系統
        mkfs.xfs  /dev/sdb1
    5.掛載
        mount /dev/sdb1  /mnt

2. Linux三劍客之awk

awk支援變數,支援迴圈,像一個程式語言,內容很多
主要用來處理(格式化)文字的

2.1 awk的語法格式和引數

"awk的語法格式:"
    awk [引數] [處理規則] [操作物件]

"引數:"
    -F  指定文字分隔符(預設以空格作為分隔符)
    # vim x.txt -->asldfa/asdfaf/fdaos/fasf
    # awk '{print $NF}' x.txt
    # awk -F'f' '{print $NF}' x.txt

"案例:"列印系統所有的使用者的解析器
awk -F: {'print $NF'} /etc/passwd
awk -F":" {'print $NF'} /etc/passwd
# 冒號:的引號可加可不加。

2.2 awk的生命週期

"awk的生命週期:"
    grep,sed,awk都是讀一行處理一行,直至處理完成
    1. 接收一行作為輸入
	
    2. 把剛剛讀入進來的資料文字,進行分解
    # -F指定的分隔符

    3. 使用處理規則處理文字

    4. 輸入一行賦值給$0($0代表當前行的內容),直至處理完成

    5. 把處理完成之後的所有的資料交給END{}來再次處理(空 就不處理)


2.3 awk中的預定義變數

"awk中的預定義變數:"
    $0  代表當前行
    # awk -F: '{print $0, '---'}' /etc/passwd

    $n  代表第n列
    # awk -F: '{print $1}' /etc/passwd
	
    NF  用來記錄當前行的欄位數(分割的段數)有多少列
    # awk -F: '{print NF}' /etc/passwd
    # awk -F: '{print $NF}' /etc/passwd
    # 可以用$NF取最後一列

    NR  用來記錄行號的
    # awk -F: '{print NR}' /etc/passwd
    # 並不是文字再檔案內部的行號

    FS  指定文字內容分隔符(預設是空格)
    # awk 'BEGIN{FS=":"}{print $FN,$1}' /etc/passwd
    awk -F: 'BEGIN{FS="x"}{print $NF}' /etc/passwd
    "FS的優先順序要高於 -F"

    OFS  指定列印分隔符(預設空格)
    # awk -F: 'BEGIN{OFS=" >>> "}{print $NF,$1}' /etc/passwd


2.4 awk處理規則的執行流程和awk中的函式

"awk處理規則的執行流程:"
    BEGIN{}  # 變數在這裡
    //       # 正則
    {}       # 迴圈,處理文字
    END{}    # 列印之前再統一處理一遍
    # 以上沒有哪一部分是必須的,至少有一個,最多有四個

"awk中的函式:"
    # 函式只能應用於迴圈和END中{},END{}

    "print"   列印

    "printf"  格式化列印
        %s    字串
        %d    數字
        -     左對齊
        +     右對齊
        15    至少佔用15(n)個字元
        awk -F: 'BEGIN{OFS=" | "}{printf "|%-15s|%-15s|",$NF,$1}' /etc/passwd


2.5 awk中的定位

"awk中的定位:"
    1. 正則
        awk -F: '/root/{print $0}' /etc/passwd
        awk -F: '/^root/{print $0}' /etc/passwd
        awk -F: '/root/ROOT/Root/{print $0}' /etc/passwd
        ......

    2. 比較表示式(匹配文字內的內容)
        >,<,>=,<=, ~(正則匹配), !~(正則匹配)(取反)
        案例:要求列印屬組id大於屬主id的行
        awk -F: '$4 > $3{print $0}' /etc/passwd
        
        # 打印出結尾包含bash的
        awk -F: '$NF ~ /bash/{print $0}' /etc/passwd

        # 不包含的
        awk -F: '$NF !~ /bash/{print $0}' /etc/passwd

    3. 邏輯表示式
    &&  邏輯與
    ||  邏輯或
    !   邏輯非

    awk -F: '$3 + $4 > 2000 && $3 * $4 > 2000{print $0}' /etc/passwd

    4. 算術表示式
    # + - * / %(取模)
        案例:要求屬組+屬主的id大於2000的
        awk -F: '$3 + $4 > 2000{print $0}' /etc/passwd
        案例:要求列印偶數行
        awk -F: 'NR % 2 ==0{print $0}' /etc/passwd

    5. 條件表示式(匹配自定義的內容)
    # >,<,>=,<=,== 多出一個==
        案例:要求列印第三行
        awk -F: 'NR == 3{print $0}' /etc/passwd
		
    6. 範圍表示式
        案例:列印以root開頭的行到ftp開頭的行
        awk -F: '/^root/,/^ftp/{print $0}' /etc/passwd


2.6 awk中的流程控制

# 只存在於迴圈之中{}

    1. if
        # 判斷
        awk -F: '{if($3>$4)}{print "大於"}else{print "大於或等於"}' /etc/passwd
        if(){}
        if(){}else{}
        if(){}else if(){}else{}

    2. for
        案例:每行列印10次
        awk -F: '{for(i=0;i<10;i++){print $0}}' /etc/passwd
        for(i='初始值';條件判斷;遊標每次處理變數){}

    3. while
        案例:每行列印10次
        awk -F: 'i=1; while(i<10){print $0, i++}' /etc/passwd
        while(條件判斷){}

        案例:每隔5行列印一個橫線行
        awk -F: '{if(NR%5==0){print "--------------"}print $0}' /etc/passwd