我正在尝试编写一个脚本,它将从/ 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)
然后回应它?
答案 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