Linux 从/proc返回信息的脚本/

Linux 从/proc返回信息的脚本/,linux,bash,awk,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

我正在尝试编写一个脚本,该脚本将从/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 #:  
我知道如何使用切割、awk等,但不知道如何设置。我也不知道如何强制计算所使用的mem

如果您能提供任何帮助,我们将不胜感激

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

我越来越接近于我想做的事情,把这里贴的东西和我需要想出的东西结合起来

数学函数- 我只想取memtotal,然后减去memfree

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

    memused=$(bc $memtotal - memfree)

然后用一个简单的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脚本将为您完成所有工作(尽管不完全按照示例输出的顺序):


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

示例

#!/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
#/垃圾箱/垃圾箱
地点=$1
如果[“$#”-ne“1”]
然后
echo“用法:./$0”
其他的
模型=$(cat/proc/cpuinfo | grep-m1“模型名”| cut-d'-f4-);
兆赫=$(cat/proc/cpuinfo | grep-m1“cpu兆赫”| cut-d'-f3-);
mem=$(cat/proc/meminfo | grep MemTotal | cut-d'-f2-);
免费=$(cat/proc/meminfo | grep MemFree | cut-d'-f2-);
版本=$(cat/proc/version | cut-d'-f 3);
fi
回声e\
“/proc/cpuinfo,型号名称:$Model
/进程/CPU信息,CPU MHz:$MHz
/proc/meminfo,MemTotal:$mem
/proc/meminfo,MemFree:$free
/进程/版本,Linux Verion#:$ver“>$LOCATION
这将把每个结果放在一个变量中,这样您就可以
echo
将其放在一个文件中,当您调用类似
sh test.sh mynewfile.txt这样的脚本时,您可以声明该文件


至于“我也不知道如何强制计算所使用的mem。”请更新您的问题,以包括您希望这些值如何出现(kb、MB、GB)以及您正在寻找的样本输出。以下是如何仅使用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

发布示例输入和预期输出。就我个人而言,我不知道这些文件可以包含什么,但我对awk有一点了解,也许可以提供帮助。你熟悉Python吗?如果是的话,我在这里的文章:可能会有所帮助。完全没有理由向grep输送
更多
。猫的无用使用已经够糟糕的了,但这是更多的无用使用!只需执行
grep MemTotal/proc/meminfo
您可能想要丢失命令。@tripleee猫并不是无用的人。对于不习惯*nix shell的人来说,它提供了一定程度的详细信息,这对于帮助OP了解命令发生了什么很重要。如果没有它,就像你读英语一样(从左到右),这个命令就没有意义,也更难理解。我想使用来自MemTotal和MemFree的任何东西。是否需要这样的工作:memused=$(MemTotal MemFree)??我试图不让自己一下子变得太过势不可挡。所以第一点是保持操作的“味道”,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