目录

 

一、目的所在

二、实例

2.1、需求

2.2、通过Shell实现

2.3、通过Python实现

2.4、扩展

Shell

Python

主要区别:

实现功能:

跨平台性:


一、目的所在

通过简单的例子去找出Linux运维中使用shell与使用python的一些不同,分析两者的主要特点

二、实例

2.1、需求

  1. 查询当前主机是否支持超线程

  2. 查询当前内存使用情况

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的跨平台性更强

 

Logo

更多推荐