目錄
一、目的所在
通過簡單的例子去找出Linux運維中使用shell與使用python的一些不同,分析兩者的主要特點
二、實例
2.1、需求
-
查詢當前主機是否支持超線程
- 查詢當前內存使用情況
2.2、通過Shell實現
既然是在Linux,那麼肯定要先使用Linux自身的工具,實現腳本內容如下:
g='\e[1;32m'
e='\e[0m'
prin(){
echo -e "$1"
}
cpu_red(){
#內核數[即線程]
cpu_processor=`grep processor /proc/cpuinfo | wc -l`
#CPU數量[即多路]
cpu_number=`cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l`
#CPU物理內核
cpu_core=`cat /proc/cpuinfo | grep "cpu cores" | sed -n '1p' | awk '{print $4}'`
#CPU型號
cpu_info=`cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c`
}
mem_red(){
#總內存[單位MB]
total=`free -m | grep -v "Swap" | awk '{print $2}' | sed -n "2p"`
used=`free -m | grep -v "Swap" | sed -n '2p' | awk '{print $3}'`
free=`free -m | grep -v "Swap" | sed -n '2p'| awk '{print $4}'`
shared=`free -m | grep -v "Swap" | sed -n '2p' | awk '{print $5}'`
cache=`free -m | grep -v "Swap" | sed -n '2p' | awk '{print $6}'`
}
print_cpu(){
cpu_red
echo -e "CPU物理數:${g}${cpu_number}${e}\nCPU內核數:${g}${cpu_core}${e}\nCPU型號:${g}${cpu_info}${e}"
if [[ ${cpu_core} == ${cpu_processor} ]];then
echo -e "超線程:${g}支持${e}"
else
echo -e "超線程:${g}不支持${e}"
fi
}
print_mem(){
mem_red
d="當前主機內存信息 總內存:${g}${total}MB${e} 當前已用:${g}${used}MB${e} 當前可用:${g}${free}MB${e} 共享佔用:${g}${shared}MB${e} 緩存佔用:${g}${cache}MB${e}"
for i in $d;do
prin "$i"
done
}
print_cpu
print_mem
執行結果如下:
2.3、通過Python實現
源碼如下:
import psutil
def cpu():
info = psutil.cpu_times()
luoji = psutil.cpu_count()
wuli = psutil.cpu_count(logical=False)
if luoji == wuli:
print("主機CPU不支持超線程")
else:
i = int(luoji/2)
if wuli == i:
print("主機CPU支持超線程")
def mem():
mems = psutil.virtual_memory()
print('當前主機總內存:', int(mems.total/1024/1024), 'MB')
print('當前已使用:', int(mems.used/1024/1024), 'MB')
cpu()
mem()
執行結果如下:
2.4、擴展
下面附上Windows端的執行結果
Shell
Python
主要區別:
實現功能:
-
Shell需要通過相關命令進行特定的篩選,靈活性比較高,但是比較複雜
-
Python只需要調用別人寫好的模塊即可實現相關功能,且不需要熟悉Linux命令,但是能夠實現的功能相對來說不夠靈活,總體就是簡單
跨平臺性:
-
Shell可以在任意Linux平臺上運行
-
Python可以在任意平臺上運行,所以Python的跨平臺性更強