1. 程式人生 > 其它 >磁碟分割槽 & Linux 三劍客之 awk

磁碟分割槽 & Linux 三劍客之 awk

今日內容

  • 磁碟分割槽
  • Linux 三劍客之 awk

內容詳細

一、磁碟分割槽

磁碟分割槽 --> 掛載

步驟

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

1、檢視磁碟

磁碟目錄

	/dev	--> cdrom、sdb、sdc

[root@localhost ~]# ls /dev

檢視本機的磁碟

	lsblk

[root@localhost ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0  100G  0 disk 
├─sda1            8:1    0  512M  0 part /boot
└─sda2            8:2    0 99.5G  0 part 
  └─centos-root 253:0    0 99.5G  0 lvm  /
sdb               8:16   0  200G  0 disk 
├─sdb1            8:17   0   50G  0 part 
└─sdb2            8:18   0  100G  0 part 
sdc               8:32   0  3.9T  0 disk 
sr0              11:0    1  4.4G  0 rom

檢視本機的分割槽

	df -h

[root@localhost ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 475M     0  475M   0% /dev
tmpfs                    487M     0  487M   0% /dev/shm
tmpfs                    487M  7.6M  479M   2% /run

2、磁碟分割槽命令

fdisk : 分割槽2TB以下的磁碟,最多可以分4個分割槽

fdisk [磁碟路徑(操作物件)]

    1、fdisk [磁碟目錄]
    2、n	: 新建一個分割槽
    3、p	: 列印分割槽表
    4、w	: 寫入磁碟並退出

	q	: 退出
	d	: 刪除一個分割槽

例子:
    1、輸入分割槽命令
    [root@localhost ~]# fdisk /dev/sdb

    2、選擇新建分割槽
    Command (m for help): n
    Partition type:
   p   primary (2 primary, 0 extended, 2 free)	< -- 這裡可以看到還剩餘多少個分割槽可建立
   e   extended

    3、預設列印
    Select (default p): 
    Using default response p
    Partition number (3,4, default 3):

    4、第一個不輸入,第二個輸入分割槽的大小( + 分割槽大小)
    First sector (314574848-419430399, default 314574848): 
    Using default value 314574848
    Last sector, +sectors or +size{K,M,G} (314574848-419430399, default 419430399): +10G
    Partition 3 of type Linux and of size 10 GiB is set

    4、寫入並退出
    Command (m for help): w
    The partition table has been altered!

輸入 m 可以檢視 fdisk 中所有的命令

gdisk :分割槽2TB以上的磁碟,最多可以分128個分割槽

與上述 fdisk 的磁碟分割槽操作步驟 幾乎 一致

3、格式化檔案系統

格式命令

	mkfs.xfs [磁碟路徑]

[root@localhost ~]# mkfs.xfs /dev/sdb3
meta-data=/dev/sdb3              isize=512    agcount=4, agsize=655360 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=2621440, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

4、掛載

命令

	mount [磁碟路徑] [掛載母鹿]

[root@localhost ~]# mount /dev/sdb3 /mnt

5、檢查是否掛載

[root@localhost ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 475M     0  475M   0% /dev
tmpfs                    487M     0  487M   0% /dev/shm
tmpfs                    487M  7.6M  479M   2% /run
tmpfs                    487M     0  487M   0% /sys/fs/cgroup
/dev/mapper/centos-root  100G  2.1G   98G   3% /
/dev/sda1                509M  132M  378M  26% /boot
tmpfs                     98M     0   98M   0% /run/user/0
/dev/sdb3                 10G   33M   10G   1% /mnt		< -- 掛載成功!

三、Linux 三劍客之 awk

awk 的作用主要式格式化文字

1、語法格式

命令書寫格式

	awk [引數] [處理規則] [操作物件]

引數:

-F : 指定文字內容的分隔符(輸出之前指定)

# 指定 passwd 檔案中內容的分隔符為 : 
列印最後一列
awk -F: '{print $NF}' /etc/passwd

[root@localhost ~]# awk -F: '{print $NF}' /etc/passwd
/bin/bash
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/sync

2、awk 的生命週期

注意 : awk 對文字的處理是一行一行進行處理的,直至處理完成,grep 和 sed 也是如此

1、接收一行文字內容作為輸入
2、對剛進來的文字內容進行分解
3、根據處理規則處理文字
4、把處理結果賦值給 $0,直至處理完成
5、把處理完之後的所有資料交給END{}來再次處理

3、awk 中的預定義變數

提前知道 : {} 是迴圈的意思

$0	: 代表當前行
	[root@localhost ~]# awk -F: '{print $0, "---"}' /etc/passwd
    root:x:0:0:root:/root:/bin/bash ---		< -- '當前行'後面都列印了 '---'
    bin:x:1:1:bin:/bin:/sbin/nologin ---
    daemon:x:2:2:daemon:/sbin:/sbin/nologin ---
    adm:x:3:4:adm:/var/adm:/sbin/nologin ---

$n	: 代表第 n 列
    [root@localhost ~]# awk -F: '{print $1}' /etc/passwd
    root		< -- 列印了第一列的內容
    bin
    daemon
    adm
    lp
    sync

NF	: 記錄當前行的欄位數(列數)
    [root@localhost ~]# awk -F: '{print NF}' /etc/passwd
    7			< -- 列印每一行的列數(欄位數)
    7
    7
    7

NR	:記錄當前的行數(行號) 
    [root@localhost ~]# awk -F: '{print NR}' /etc/passwd
    1
    2
    3
    4
    5
    6			< -- 記錄每一行的行號

FS	: 指定文字內容的分隔符,預設是空格(輸出之前,將文字原有的內容分隔)
	[root@localhost ~]# awk -F: 'BEGIN{FS="x"}{print $NF}' /etc/passwd
    :0:0:root:/root:/bin/bash
    :1:1:bin:/bin:/sbin/nologin
    :2:2:daemon:/sbin:/sbin/nologin
    :3:4:adm:/var/adm:/sbin/nologin

    # FS 的優先順序比 -F 的大,優先執行 FS


OFS	: 指定列印(輸出)文字內容的分隔符,預設是空格
列印第一列和第二列,列印時用 ~~ 分隔開
    [root@localhost ~]# awk -F: 'BEGIN{OFS=" ~~ "}{print $NF,$1}' /etc/passwd
    /bin/bash ~~ root
    /sbin/nologin ~~ bin
    /sbin/nologin ~~ daemon
    /sbin/nologin ~~ adm
    /sbin/nologin ~~ lp
    /bin/sync ~~ sync

4、awk 處理規則的執行流程

BEGIN{ }

/ /

{ }

END{ }

5、awk 中的函式

print

列印處理後的文字內容

printf

格式化列印

%s

字串佔位

%d

數字佔位
佔位符中的 左對齊,加數字組合使用,表示佔據多少位元組
佔位符中的 右對齊,加數字組合使用,表示佔據多少位元組

例子

# 用 : 號 分隔 passwd 檔案中的內容,
# 格式化列印分隔後的第一列和最後一列,
# 每列佔用15位元組,
# 輸出的內容用 | 管道符分隔
	awk -F: '{printf"|%-15s|%-15s|\n",$1,$NF}' /etc/passwd

[root@localhost ~]# awk -F: '{printf"|%-15s|%-15s|\n",$1,$NF}' /etc/passwd
|root           |/bin/bash      |
|bin            |/sbin/nologin  |
|daemon         |/sbin/nologin  |
|adm            |/sbin/nologin  |
|lp             |/sbin/nologin  |

6、awk 中的定位

1、正則表示式

# 正則使用 / / 符號來匹配

例子: 
1、列印 passwd 檔案中含有 root 的行
	awk -F: '/root/{print $0}' /etc/passwd
[root@localhost ~]# awk -F: '/root/{print $0}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

2、列印以 root 開頭的行
	awk -F: '/^root/{print $0}' /etc/passwd
[root@localhost ~]# awk -F: '/^root/{print $0}' /etc/passwd
root:x:0:0:root:/root:/bin/bash

3、列印第一列不包含 root 的行
	awk -F: '$1 !~ /root/{print $0}' /etc/passwd
[root@localhost ~]# awk -F: '$1 !~ /root/{print $0}' /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin

2、比較表示式

比較符號:
	> 
	<
	=
	>=
	<=
	~	: 包含,一般與正則表示式一起使用
	!~	: 不包含

例子:
列印所屬主id 與 所屬組id 相加小於1000的行

[root@localhost ~]# awk -F: '($3 + $4 < 1000){print $0}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin

3、邏輯表示式

符號:
	&&	: 邏輯與
	||	: 邏輯或
	!	: 邏輯非

例子:

    [root@localhost ~]# awk -F: '$3 + $4 > 10 && $3 * $4 < 1000{print $0}' /etc/passwd
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

列印所屬主id 與 所屬組id 相加大於1000的行
    [root@localhost ~]# awk -F: '!($3 + $4 < 1000){print $0}' /etc/passwd
    polkitd:x:999:998:User for polkitd:/:/sbin/nologin

4、算術表示式

符號:
	+
	-
	*
	/	: 除以
	==	: 等於
	%	: 取餘數

例子:
1、列印行數是奇數的行
	awk -F: 'NR % 2 == 1{print $0}' /etc/passwd

[root@localhost ~]# cat -n /etc/passwd | awk -F: 'NR % 2 == 1{print $0}'
     1	root:x:0:0:root:/root:/bin/bash
     3	daemon:x:2:2:daemon:/sbin:/sbin/nologin		< -- 行號都是奇數
     5	lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
     7	shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     9	mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

2、列印行數是偶數數的行
	cat -n /etc/passwd | awk -F: 'NR % 2 == 0{print $0}'

[root@localhost ~]# cat -n /etc/passwd | awk -F: 'NR % 2 == 0{print $0}'
     2	bin:x:1:1:bin:/bin:/sbin/nologin
     4	adm:x:3:4:adm:/var/adm:/sbin/nologin
     6	sync:x:5:0:sync:/sbin:/bin/sync
     8	halt:x:7:0:halt:/sbin:/sbin/halt

5、條件表示式

符號 : (與比較表示式相似)
    ==
    >
    <
    >=
    <=

例子:
1、列印第 5 行與第 7 行
	cat -n /etc/passwd | awk -F: 'NR == 5 || NR == 7{print $0}'

[root@localhost ~]# cat -n /etc/passwd | awk -F: 'NR == 5 || NR == 7{print $0}'
     5	lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
     7	shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

6、範圍表示式

類似於 sed 的定位
例子:
1、列印以 root 開頭的行到以 adm 開頭的行
	awk -F: '/^root/,/^adm/{print $0}' /etc/passwd

[root@localhost ~]# awk -F: '/^root/,/^adm/{print $0}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin

8、流程控制

注意: 流程控制只存在迴圈之中

if

1、單分支	: {if(判斷條件){輸出結果}}

2、二分支	: {if(判斷條件){輸出結果}else{}}

例子: 
如果所屬主id 與屬組id 相加大於1000,輸出 big, 否則輸出 small
	awk -F: '{if($3 + $4 > 1000){print "big"}else{print "small"}}' /etc/passwd

[root@localhost ~]# awk -F: '{if($3 + $4 > 1000){print "big"}else{print "small"}}' /etc/passwd
small
small
big
small
small

3、多分支	: {if(){}else if{}else{}}

for

	{for(i="初始值";判斷條件;遊標){}}

例子:
每行列印前 2 次
	awk -F: '{for(i=0;i<5;i++){print $0}}' /etc/passwd

[root@localhost ~]# awk -F: '{for(i=0;i<2;i++){print $0}}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

while

	{while(判斷條件){}}

例子:
每行列印兩遍
[root@localhost ~]# cat -n /etc/passwd | awk -F: '{i=1;while(i<3){print $0, i++}}'
     1	root:x:0:0:root:/root:/bin/bash 1
     1	root:x:0:0:root:/root:/bin/bash 2
     2	bin:x:1:1:bin:/bin:/sbin/nologin 1
     2	bin:x:1:1:bin:/bin:/sbin/nologin 2


列印前 5 行
[root@localhost ~]# cat -n /etc/passwd | awk -F: 'NR < 6{print $0}'
     1	root:x:0:0:root:/root:/bin/bash
     2	bin:x:1:1:bin:/bin:/sbin/nologin
     3	daemon:x:2:2:daemon:/sbin:/sbin/nologin
     4	adm:x:3:4:adm:/var/adm:/sbin/nologin
     5	lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

每隔 5 行 列印一次橫線

每隔 5 行 列印一次橫線

[root@localhost ~]# awk -F: '{if(NR % 5 == 0){print "-----------"}print $0}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
-----------
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
-----------