shell基礎(chǔ)知識(shí)
1.grep
grep是一個(gè)在Unix和Unix-like系統(tǒng)上使用的命令行工具,用于在文本文件中搜索匹配指定模式的行。它的名字來自于"global regular expression print"(全局正則表達(dá)式打?。┑目s寫。grep的基本用法是通過指定一個(gè)正則表達(dá)式模式和一個(gè)文件名(或者從標(biāo)準(zhǔn)輸入讀取數(shù)據(jù)),來查找和打印與模式匹配的行。它可以用于簡(jiǎn)單的文本搜索,也可以與其他命令結(jié)合使用來實(shí)現(xiàn)更復(fù)雜的操作。Linux管道(Pipeline)是一種將多個(gè)命令連接在一起形成一個(gè)處理數(shù)據(jù)流的方法。通過管道,一個(gè)命令的輸出可以直接作為另一個(gè)命令的輸入,實(shí)現(xiàn)數(shù)據(jù)的連續(xù)處理,提高命令行的靈活性和效率。當(dāng)在兩個(gè)命令之間設(shè)置管道時(shí),管道符|左邊命令的輸出就變成了右邊命令的輸入。只要第一個(gè)命令向標(biāo)準(zhǔn)輸出寫入,而第二個(gè)命令是從標(biāo)準(zhǔn)輸入讀取,那么這兩個(gè)命令就可以形成一個(gè)管道。大部分的 Linux 命令都可以用來形成管道。舉個(gè)例子:
history |grep "find"
2.awk
awk是一種強(qiáng)大的文本處理工具,用于從文本文件中提取和處理數(shù)據(jù)。它以逐行方式掃描文件,并根據(jù)指定的規(guī)則執(zhí)行操作。
這將打印文件中每行的第一列和第三列:
awk '{print $1, $3}' file
選項(xiàng)參數(shù) | 功能 |
---|---|
-F | 指定輸入文件分隔符 |
-v | 賦值一個(gè)用戶定義變量 |
3.cut
cut的工作就是剪,具體的說就是在文件中負(fù)責(zé)剪數(shù)據(jù)用的。cut命令從文件的每一行剪切字節(jié)、字符和字段并將這些字節(jié)、字符和字段輸出。
選項(xiàng)參數(shù) | 功能 |
---|---|
-f | 列號(hào),提取第幾列 |
-d | 分隔符,按照指定分割符分割列 |
1.獲取要監(jiān)控的本地服務(wù)器IP地址
IP=`ifconfig | grep inet | grep -vE 'inet6|127.0.0.1' | awk '{print $2}'`
echo "IP地址:"$IP
2.獲取cpu總核數(shù)
cpu_num=`grep -c "model name" /proc/cpuinfo`
echo "cpu總核數(shù):"$cpu_num
- 在linux的/proc目錄下存放了系統(tǒng)運(yùn)行的很多系統(tǒng)資源信息,其中**/proc/cpuinfo**存放了系統(tǒng)運(yùn)行時(shí)cpu的很多重要信息。
所有的cpu核信息由model name字符串給出, - 通過命令grep -c “model name” /proc/cpuinfo 可以計(jì)算出文件 /proc/cpuinfo中出現(xiàn)字符串model name出現(xiàn)的次數(shù),就可以得到cpu總核數(shù)。-c 表示統(tǒng)計(jì)字符串出現(xiàn)次數(shù)。
3.獲取CPU利用率
top命令經(jīng)常用來監(jiān)控linux的系統(tǒng)狀況,是常用的性能分析工具,能夠?qū)崟r(shí)顯示系統(tǒng)中各個(gè)進(jìn)程的資源占用情況。
- us 用戶空間占用CPU百分比
- sy 內(nèi)核空間占用CPU百分比
- ni 用戶進(jìn)程空間內(nèi)改變過優(yōu)先級(jí)的進(jìn)程占用CPU百分比
- id 空閑CPU百分比
- wa 等待輸入輸出的CPU時(shí)間百分比
- hi 硬件中斷
- si 軟件中斷
# 獲取用戶空間占用CPU百分比
cpu_user=`top -b -n 1 | grep Cpu | awk '{print $2}'`
echo "用戶空間占用CPU百分比:"$cpu_user
# 獲取內(nèi)核空間占用CPU百分比
cpu_system=`top -b -n 1 | grep Cpu | awk '{print $4}'`
echo "內(nèi)核空間占用CPU百分比:"$cpu_system
# 獲取空閑CPU百分比
cpu_idle=`top -b -n 1 | grep Cpu | awk '{print $8}'`
echo "空閑CPU百分比:"$cpu_idle
# 獲取等待輸入輸出占CPU百分比
cpu_iowait=`top -b -n 1 | grep Cpu | awk '{print $10}'`
echo "等待輸入輸出占CPU百分比:"$cpu_iowait
4.獲取CPU上下文切換和中斷次數(shù)
這是vmstat命令的輸出結(jié)果,它顯示了系統(tǒng)的各種指標(biāo),包括進(jìn)程、內(nèi)存、交換空間、IO、系統(tǒng)和CPU利用率等。以下是各列的含義:
-
procs:進(jìn)程統(tǒng)計(jì)信息
- r:運(yùn)行隊(duì)列中的進(jìn)程數(shù)
- b:處于非中斷睡眠狀態(tài)的進(jìn)程數(shù)
-
memory:內(nèi)存統(tǒng)計(jì)信息
- 交換:交換空間的使用量
- 空閑:空閑內(nèi)存量
- 緩沖:用作緩沖的內(nèi)存量
- 緩存:用作緩存的內(nèi)存量
-
swap:交換空間統(tǒng)計(jì)信息
- si:每秒從磁盤交換到內(nèi)存的數(shù)據(jù)量
- so:每秒從內(nèi)存交換到磁盤的數(shù)據(jù)量
-
io:IO統(tǒng)計(jì)信息
- bi:每秒從塊設(shè)備讀取的塊數(shù)
- bo:每秒寫入塊設(shè)備的塊數(shù)
-
system:系統(tǒng)統(tǒng)計(jì)信息
- in:每秒中斷的數(shù)量
- cs:每秒上下文切換的數(shù)量
-
cpu:CPU統(tǒng)計(jì)信息
- us:用戶空間占用CPU的百分比
- sy:內(nèi)核空間占用CPU的百分比
- id:CPU空閑時(shí)間的百分比
- wa:等待IO的CPU時(shí)間的百分比
- st:被虛擬化偷取的時(shí)間的百分比
# 獲取CPU中斷次數(shù)
cpu_interrupt=`vmstat -n 1 1 | sed -n 3p | awk '{print $11}'`
echo "CPU中斷次數(shù):"$cpu_interrupt
# 獲取CPU上下文切換次數(shù)
cpu_context_switch=`vmstat -n 1 1 | sed -n 3p | awk '{print $12}'`
echo "CPU上下文切換次數(shù):"$cpu_context_switch
# 獲取任務(wù)隊(duì)列(就緒狀態(tài)等待的進(jìn)程數(shù))
cpu_task_length=`vmstat -n 1 1 | sed -n 3p | awk '{print $1}'`
echo "CPU任務(wù)隊(duì)列長(zhǎng)度:"$cpu_task_length
5.獲取CPU負(fù)載信息
uptime命令顯示了系統(tǒng)的運(yùn)行時(shí)間以及系統(tǒng)的平均負(fù)載(load average)。
輸出解釋如下:
- 16:28:42:當(dāng)前系統(tǒng)時(shí)間。
- up 3:17:系統(tǒng)已經(jīng)運(yùn)行了3小時(shí)17分鐘。
- 1 user:當(dāng)前有1個(gè)用戶登錄系統(tǒng)。
- load average: 1.26, 1.62, 1.85:系統(tǒng)的平均負(fù)載,分別表示過去1分鐘、5分鐘和15分鐘的平均負(fù)載情況。在這個(gè)例子中,1分鐘的平均負(fù)載是1.26,5分鐘的平均負(fù)載是1.62,15分鐘的平均負(fù)載是1.85。
# 獲取CPU15分鐘前到現(xiàn)在的負(fù)載平均值
cpu_load_15min=`uptime | awk '{print $10}'`
echo "CPU 15分鐘前到現(xiàn)在的負(fù)載平均值:"$cpu_load_15min
# 獲取CPU5分鐘前到現(xiàn)在的負(fù)載平均值
cpu_load_5min=`uptime | awk '{print $9}' | cut -f 1 -d ','`
echo "CPU 5分鐘前到現(xiàn)在的負(fù)載平均值:"$cpu_load_5min
# 獲取CPU1分鐘前到現(xiàn)在的負(fù)載平均值
cpu_load_1min=`uptime | awk '{print $8}' | cut -f 1 -d ','`
echo "CPU 1分鐘前到現(xiàn)在的負(fù)載平均值:"$cpu_load_1min
6.獲取內(nèi)存信息
# 獲取物理內(nèi)存總量
mem_total=`free | grep "內(nèi)存" | awk '{print $2}'`
echo "物理內(nèi)存總量:"$mem_total
# 獲取操作系統(tǒng)已使用內(nèi)存總量
mem_sys_used=`free | grep "內(nèi)存" | awk '{print $3}'`
echo "已使用內(nèi)存總量(操作系統(tǒng)):"$mem_sys_used
# 獲取操作系統(tǒng)未使用內(nèi)存總量
mem_sys_free=`free | grep "內(nèi)存" | awk '{print $4}'`
echo "剩余內(nèi)存總量(操作系統(tǒng)):"$mem_sys_free
7. 獲取指定設(shè)備磁盤I/O統(tǒng)計(jì)信息
iostat命令用于顯示CPU使用情況和磁盤I/O統(tǒng)計(jì)信息。如果沒有指定選項(xiàng)或參數(shù),iostat將顯示所有活動(dòng)的設(shè)備的平均統(tǒng)計(jì)信息,包括CPU利用率、設(shè)備的傳輸速率、請(qǐng)求隊(duì)列長(zhǎng)度等。
文章來源:http://www.zghlxwxcb.cn/news/detail-859497.html
echo "指定設(shè)備(/dev/sda)的統(tǒng)計(jì)信息"
# 每秒向設(shè)備發(fā)起的讀請(qǐng)求次數(shù)
disk_sda_rs=`iostat -kx | grep sda| awk '{print $2}'`
echo "每秒向設(shè)備發(fā)起的讀請(qǐng)求次數(shù):"$disk_sda_rs
# 每秒向設(shè)備發(fā)起的寫請(qǐng)求次數(shù)
disk_sda_ws=`iostat -kx | grep sda| awk '{print $8}'`
echo "每秒向設(shè)備發(fā)起的寫請(qǐng)求次數(shù):"$disk_sda_ws
# 向設(shè)備發(fā)起的I/O請(qǐng)求隊(duì)列長(zhǎng)度平均值
disk_sda_avgqu_sz=`iostat -kx | grep sda| awk '{print $22}'`
echo "向設(shè)備發(fā)起的I/O請(qǐng)求隊(duì)列長(zhǎng)度平均值"$disk_sda_avgqu_sz
# 向設(shè)備發(fā)起I/O請(qǐng)求的CPU時(shí)間百分占比
disk_sda_util=`iostat -kx | grep sda| awk '{print $23}'`
echo "向設(shè)備發(fā)起I/O請(qǐng)求的CPU時(shí)間百分占比:"$disk_sda_util
完整腳本
文章來源地址http://www.zghlxwxcb.cn/news/detail-859497.html
#!/bin/bash
# 獲取要監(jiān)控的本地服務(wù)器IP地址
IP=`ifconfig | grep inet | grep -vE 'inet6|127.0.0.1' | awk '{print $2}'`
echo "IP地址:"$IP
# 獲取cpu總核數(shù)
cpu_num=`grep -c "model name" /proc/cpuinfo`
echo "cpu總核數(shù):"$cpu_num
# 1、獲取CPU利用率
# 獲取用戶空間占用CPU百分比
cpu_user=`top -b -n 1 | grep Cpu | awk '{print $2}'`
echo "用戶空間占用CPU百分比:"$cpu_user
# 獲取內(nèi)核空間占用CPU百分比
cpu_system=`top -b -n 1 | grep Cpu | awk '{print $4}'`
echo "內(nèi)核空間占用CPU百分比:"$cpu_system
# 獲取空閑CPU百分比
cpu_idle=`top -b -n 1 | grep Cpu | awk '{print $8}'`
echo "空閑CPU百分比:"$cpu_idle
# 獲取等待輸入輸出占CPU百分比
cpu_iowait=`top -b -n 1 | grep Cpu | awk '{print $10}'`
echo "等待輸入輸出占CPU百分比:"$cpu_iowait
#2、獲取CPU上下文切換和中斷次數(shù)
# 獲取CPU中斷次數(shù)
cpu_interrupt=`vmstat -n 1 1 | sed -n 3p | awk '{print $11}'`
echo "CPU中斷次數(shù):"$cpu_interrupt
# 獲取CPU上下文切換次數(shù)
cpu_context_switch=`vmstat -n 1 1 | sed -n 3p | awk '{print $12}'`
echo "CPU上下文切換次數(shù):"$cpu_context_switch
#3、獲取CPU負(fù)載信息
# 獲取CPU15分鐘前到現(xiàn)在的負(fù)載平均值
cpu_load_15min=`uptime | awk '{print $10}'`
echo "CPU 15分鐘前到現(xiàn)在的負(fù)載平均值:"$cpu_load_15min
# 獲取CPU5分鐘前到現(xiàn)在的負(fù)載平均值
cpu_load_5min=`uptime | awk '{print $9}' | cut -f 1 -d ','`
echo "CPU 5分鐘前到現(xiàn)在的負(fù)載平均值:"$cpu_load_5min
# 獲取CPU1分鐘前到現(xiàn)在的負(fù)載平均值
cpu_load_1min=`uptime | awk '{print $8}' | cut -f 1 -d ','`
echo "CPU 1分鐘前到現(xiàn)在的負(fù)載平均值:"$cpu_load_1min
# 獲取任務(wù)隊(duì)列(就緒狀態(tài)等待的進(jìn)程數(shù))
cpu_task_length=`vmstat -n 1 1 | sed -n 3p | awk '{print $1}'`
echo "CPU任務(wù)隊(duì)列長(zhǎng)度:"$cpu_task_length
#4、獲取內(nèi)存信息
# 獲取物理內(nèi)存總量
mem_total=`free | grep "內(nèi)存" | awk '{print $2}'`
echo "物理內(nèi)存總量:"$mem_total
# 獲取操作系統(tǒng)已使用內(nèi)存總量
mem_sys_used=`free | grep "內(nèi)存" | awk '{print $3}'`
echo "已使用內(nèi)存總量(操作系統(tǒng)):"$mem_sys_used
# 獲取操作系統(tǒng)未使用內(nèi)存總量
mem_sys_free=`free | grep "內(nèi)存" | awk '{print $4}'`
echo "剩余內(nèi)存總量(操作系統(tǒng)):"$mem_sys_free
#5、獲取磁盤I/O統(tǒng)計(jì)信息
echo "指定設(shè)備(/dev/sda)的統(tǒng)計(jì)信息"
# 每秒向設(shè)備發(fā)起的讀請(qǐng)求次數(shù)
disk_sda_rs=`iostat -kx | grep sda| awk '{print $2}'`
echo "每秒向設(shè)備發(fā)起的讀請(qǐng)求次數(shù):"$disk_sda_rs
# 每秒向設(shè)備發(fā)起的寫請(qǐng)求次數(shù)
disk_sda_ws=`iostat -kx | grep sda| awk '{print $8}'`
echo "每秒向設(shè)備發(fā)起的寫請(qǐng)求次數(shù):"$disk_sda_ws
# 向設(shè)備發(fā)起的I/O請(qǐng)求隊(duì)列長(zhǎng)度平均值
disk_sda_avgqu_sz=`iostat -kx | grep sda| awk '{print $22}'`
echo "向設(shè)備發(fā)起的I/O請(qǐng)求隊(duì)列長(zhǎng)度平均值"$disk_sda_avgqu_sz
# 向設(shè)備發(fā)起I/O請(qǐng)求的CPU時(shí)間百分占比
disk_sda_util=`iostat -kx | grep sda| awk '{print $23}'`
echo "向設(shè)備發(fā)起I/O請(qǐng)求的CPU時(shí)間百分占比:"$disk_sda_util
到了這里,關(guān)于獲取linuxIP、內(nèi)存、cpu、磁盤IO等信息的Shell腳本及其講解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!