脚本从/ proc /返回信息

时间:2014-04-07 23:09:04

标签: linux bash awk

我正在尝试编写一个脚本,它将从/ proc / cpuinfo,/ proc / meminfo和/ proc / version文件返回信息。

从cpuinfo文件中,我想返回cpu Mhz和模型名称。 我可以通过这些命令获得这些

    more /proc/cpuinfo | grep "model name" | head -n 1

    more /proc/cpuinfo | grep "cpu MHz"

对于meminfo文件,我想获得总内存,无内存和总使用量。我可以通过以下命令获得前2个:

    more /proc/meminfo | grep MemTotal
    more /proc/meminfo | grep MemFree

我可以用这个获得linux版本#:

    more /proc/version

然后我可以将此文件保存为文件,方法是将第一个输出重定向到文件中,然后使用>>附加下一个信息项。而不是>。

我的问题是这样 - 我如何编写一个脚本来获取上面的信息并将其置于这种格式:

  /proc/cpuinfo, Model name: (result of first command above)
  /proc/cpuinfo, cpu Mhz:  (result of 2nd)
  /proc/meminfo, MemTotal: (result of 3rd)
  /proc/meminfo, MemFree: (result of 4th)
  /proc/meminfo, MemUsed:  (calculate it based off memtotal and memfree)
  /proc/version, Linux version #:  

我知道如何使用cut,awk等等,但不知道如何设置它。我不知道如何强制计算所使用的mem。

您可以给予任何帮助。

编辑:我使用的更多,因为我对Linux不太熟悉。

我越来越接近我想要做的事情,结合在这里发布的内容和我需要提出的内容。

MATH功能 - 我只是想记住memtotal并从中减去memfree。

我可以创建一个变量,例如

    memused=$(bc $memtotal - memfree)

然后回应它?

3 个答案:

答案 0 :(得分:1)

使用简单的shell函数,如:

filedata() {
    grep -H "$@" | sed -e 's/:/, /'
}

您可以致电

获取所需的大部分数据
filedata 'model name' /proc/cpuinfo
filedata -E 'Mem(Total|Free)' /proc/meminfo
filedata . /proc/version

要获得MemUsed,您可以使用以下内容:

awk '/MemFree/ {free=$2} /MemTotal/ {total=$2} END {print FILENAME",","MemUsed:", total-free}' /proc/meminfo

或者,以下awk脚本将为您完成所有操作(尽管不完全按照示例输出的顺序):

awk '/model name|cpu MHz|MemTotal|MemFree|^Linux/ {
    print FILENAME",",$0
}

/MemTotal|MemFree/ {
    v=$1
    gsub(/^Mem/, "", v)
    gsub(/:$/, "", v)
    mem[v]=$2
}

END {
    print "/proc/meminfo, MemUsed:", mem["Total"] - mem["Free"]
}' /proc/cpuinfo /proc/meminfo /proc/version

答案 1 :(得分:1)

以简化的方式,您可以执行以下操作:

示例

#!/bin/sh

LOCATION=$1

if [ "$#" -ne "1" ]
then
echo "Usage: ./$0 <FILE>"
else
model=$(cat /proc/cpuinfo |grep -m 1 "model name"|cut -d' ' -f 4-);
mhz=$(cat /proc/cpuinfo |grep -m 1 "cpu MHz"|cut -d' ' -f 3-);
mem=$(cat /proc/meminfo | grep MemTotal|cut -d' ' -f 2-);
free=$(cat /proc/meminfo | grep MemFree|cut -d' ' -f 2-);
ver=$(cat /proc/version|cut -d' ' -f 3);


fi


echo -e \
"/proc/cpuinfo, Model Name: $model
/proc/cpuinfo, CPU MHz: $mhz
/proc/meminfo, MemTotal: $mem 
/proc/meminfo, MemFree: $free 
/proc/version, Linux Verion #: $ver" > $LOCATION

这会将每个结果放在一个变量中,这样你就可以echo将它变成你在调用脚本时声明的文件sh test.sh mynewfile.txt

至于“我不知道如何强制使用mem的计算。”请更新您的问题,以包括您希望如何存在这些值(kb,MB,GB)和您正在寻找的样本输出。

答案 2 :(得分:0)

以下是仅使用awk获取价值的方法:

model=$(awk -F: '/model name/ {print $2;exit}' /proc/cpuinfo)
mhz=$(awk -F: '/cpu MHz/ {print $2;exit}' /proc/cpuinfo)
mem=$(awk -F"[: ]+" '/MemTotal/ {print $2;exit}' /proc/meminfo)
etc