Bash sed awk,从/proc/cpuinfo和/proc/meminfo格式化CPU/Mem信息
我试图解决的问题是生成可移植的输出,我可以在我们环境中的所有服务器上显示,以便在登录时使用所有CentOS/Red Hat系统上的通用信息显示基本信息。我想从Bash sed awk,从/proc/cpuinfo和/proc/meminfo格式化CPU/Mem信息,bash,awk,sed,grep,cpu,Bash,Awk,Sed,Grep,Cpu,我试图解决的问题是生成可移植的输出,我可以在我们环境中的所有服务器上显示,以便在登录时使用所有CentOS/Red Hat系统上的通用信息显示基本信息。我想从/proc/cpuinfo和/proc/meminfo(或免费-m-h)中获取信息;“为什么不只是“yum安装一些很棒的工具””?“并不理想,因为所有这些信息都可以在/proc中免费获得。我知道,对于sed/awk专家来说,这类事情通常是一个非常简单的技巧(我不知道如何处理这个问题) 以我有限的sed/awk知识) 我想在一行中提取如下内容
/proc/cpuinfo
和/proc/meminfo
(或免费-m-h
)中获取信息;“为什么不只是“yum安装一些很棒的工具”
”?“并不理想,因为所有这些信息都可以在/proc
中免费获得。我知道,对于sed/awk专家来说,这类事情通常是一个非常简单的技巧(我不知道如何处理这个问题)
以我有限的sed/awk知识)
我想在一行中提取如下内容:
<model name>, <cpu MHz> MHz, <cpu cores> cores, <detect "vmx" (Intel-VT) or "svm" (AMD-V support)>
我还想将此信息与/proc/meminfo
或free-mh
的信息结合起来,以便:
"AMD Athlon(tm) II Neo N36L Dual-Core Processor, 1300 MHz, 2 cores, 4.7 GB Memory (1.8 GB Free), SVM-Virtualization"
我花了一些时间搜索方法,但运气不好,这可能是一个有趣的通用问题,因为它涉及到获取表的格式,其中包含大量信息,并根据需要提取,因此有一些通用应用程序
$free-m-h
total used free shared buff/cache available
Mem: 4.5Gi 1.2Gi 1.8Gi 77Mi 1.6Gi 3.0Gi
Swap: 4.8Gi 0B 4.8Gi
$cat/proc/cpuinfo
processor : 0
vendor_id : AuthenticAMD
cpu family : 16
model : 6
model name : AMD Athlon(tm) II Neo N36L Dual-Core Processor
stepping : 3
microcode : 0x10000c8
cpu MHz : 1300.000
cache size : 1024 KB
physical id : 0
siblings : 2
core id : 0
cpu cores : 2
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 5
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid pni monitor cx16 popcnt lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a 3dnowprefetch osvw ibs skinit wdt nodeid_msr hw_pstate vmmcall npt lbrv svm_lock nrip_save
bugs : tlb_mmatch apic_c1e fxsave_leak sysret_ss_attrs null_seg amd_e400 spectre_v1 spectre_v2
bogomips : 2595.59
TLB size : 1024 4K pages
clflush size : 64
cache_alignment : 64
address sizes : 48 bits physical, 48 bits virtual
power management: ts ttp tm stc 100mhzsteps hwpstate
MemTotal: 4771304 kB
MemFree: 1862372 kB
MemAvailable: 3195768 kB
Buffers: 2628 kB
Cached: 1542788 kB
SwapCached: 0 kB
Active: 1534572 kB
Inactive: 909316 kB
Active(anon): 917792 kB
Inactive(anon): 62468 kB
Active(file): 616780 kB
Inactive(file): 846848 kB
Unevictable: 8384 kB
Mlocked: 0 kB
SwapTotal: 5070844 kB
SwapFree: 5070844 kB
Dirty: 20 kB
Writeback: 0 kB
AnonPages: 881304 kB
Mapped: 395420 kB
Shmem: 79776 kB
KReclaimable: 152892 kB
Slab: 295508 kB
SReclaimable: 152892 kB
SUnreclaim: 142616 kB
KernelStack: 9328 kB
PageTables: 45156 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 7456496 kB
Committed_AS: 5260708 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 0 kB
VmallocChunk: 0 kB
Percpu: 2864 kB
HardwareCorrupted: 0 kB
AnonHugePages: 417792 kB
ShmemHugePages: 0 kB
ShmemPmdMapped: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
Hugetlb: 0 kB
DirectMap4k: 314944 kB
DirectMap2M: 4796416 kB
DirectMap1G: 0 kB
$cat/proc/meminfo
processor : 0
vendor_id : AuthenticAMD
cpu family : 16
model : 6
model name : AMD Athlon(tm) II Neo N36L Dual-Core Processor
stepping : 3
microcode : 0x10000c8
cpu MHz : 1300.000
cache size : 1024 KB
physical id : 0
siblings : 2
core id : 0
cpu cores : 2
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 5
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid pni monitor cx16 popcnt lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a 3dnowprefetch osvw ibs skinit wdt nodeid_msr hw_pstate vmmcall npt lbrv svm_lock nrip_save
bugs : tlb_mmatch apic_c1e fxsave_leak sysret_ss_attrs null_seg amd_e400 spectre_v1 spectre_v2
bogomips : 2595.59
TLB size : 1024 4K pages
clflush size : 64
cache_alignment : 64
address sizes : 48 bits physical, 48 bits virtual
power management: ts ttp tm stc 100mhzsteps hwpstate
MemTotal: 4771304 kB
MemFree: 1862372 kB
MemAvailable: 3195768 kB
Buffers: 2628 kB
Cached: 1542788 kB
SwapCached: 0 kB
Active: 1534572 kB
Inactive: 909316 kB
Active(anon): 917792 kB
Inactive(anon): 62468 kB
Active(file): 616780 kB
Inactive(file): 846848 kB
Unevictable: 8384 kB
Mlocked: 0 kB
SwapTotal: 5070844 kB
SwapFree: 5070844 kB
Dirty: 20 kB
Writeback: 0 kB
AnonPages: 881304 kB
Mapped: 395420 kB
Shmem: 79776 kB
KReclaimable: 152892 kB
Slab: 295508 kB
SReclaimable: 152892 kB
SUnreclaim: 142616 kB
KernelStack: 9328 kB
PageTables: 45156 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 7456496 kB
Committed_AS: 5260708 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 0 kB
VmallocChunk: 0 kB
Percpu: 2864 kB
HardwareCorrupted: 0 kB
AnonHugePages: 417792 kB
ShmemHugePages: 0 kB
ShmemPmdMapped: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
Hugetlb: 0 kB
DirectMap4k: 314944 kB
DirectMap2M: 4796416 kB
DirectMap1G: 0 kB
使用/proc/cpuinfo和free-mh以及awk,搜索所需字符串,使用:作为字段分隔符,相应地设置变量,将free-mh的输出进一步拆分为一个名为arr的数组,该数组基于“”作为分隔符。最后,使用创建的变量以所需格式打印数据 当搜索以flag开头的行时,我们使用awk的match函数搜索字符串svn或vmx。RSTART变量不为0表示匹配,因此我们对此进行检查以查找所使用的虚拟化类型。由于我们在开始时已将virt设置为“无虚拟化”,因此没有匹配项将打印“无虚拟化”
awk -F: '/^model name/ {
mod=$2
}
/^cpu MHz/ {
mhz=$2
}
/^cpu core/ {
core=$2
}
/^flags/ {
virt="No Virtualisation";
match($0,"svm");
if (RSTART!=0)
{
virt="SVM-Virtualisation"
};
match($0,"vmx");
if (RSTART!=0) {
virt="VMX-Virtualisation"
}
}
/^Mem:/ {
split($2,arr," ");
tot=arr[1];
free=arr[2]
}
END {
printf "%s %dMHz %s core(s) %s %sB Memory (%sB Free)\n",mod,mhz,core,virt,tot,free
}' /proc/cpuinfo <(free -mh)
awk-F:'/^model name/{
国防部=2美元
}
/^cpu MHz/{
兆赫=$2
}
/^cpu核心/{
核心=2美元
}
/^标志/{
virt=“无虚拟化”;
匹配($0,“svm”);
如果(RSTART!=0)
{
virt=“SVM虚拟化”
};
匹配($0,“vmx”);
如果(RSTART!=0){
virt=“VMX虚拟化”
}
}
/^成员:/{
拆分($2,arr,“”);
tot=arr[1];
自由=arr[2]
}
结束{
printf“%s%dMHz%s内核%s%sB内存(%sB空闲)\n”,mod,mhz,core,virt,tot,Free
}“/proc/cpuinfo这太疯狂了,非常感谢@Raman!真迷人。SVM/VMX将是另一回事,但这是难以置信的。。。我已经敬畏地看了15分钟了。太棒了。:)我理解你在这里所做的事情的要素(完全清楚发生了什么)。我真的可以在很多情况下使用它,我想。。。我想我会经常看这个的!:)将拆分更改为:“
而不是:
idea以删除前导/尾随空格,并添加一些逗号以分隔输出。好的,现在我必须选择一条包含svm的线,然后以某种方式得到虚拟化标志的是/否答案。非常令人惊讶的感谢,从.bashrc
:)awk-F:“'/^model name/{mod=$2}/^cpu-MHz/{MHz=$2}/^cpu-core/{core=$2}/^Mem:/{split($2,arr,”);tot=arr[1];free=arr[2]}END{printf“%s,%dMHz,%s-core(s),%sB Memory(%sB free)\n”、mod MHz,core,core,core,tot,free}/proc/cpfo,我现在也为虚拟化类型添加了一些逻辑。很抱歉,我不知道它这么做了,所以我现在已经取消选中了“接受”标志。你能告诉我你的完整答案吗。我喜欢看不同的技巧,总是非常有用/有趣!收集SVM/VMX信息容易吗?有人主动关闭了它,我看到他们也在上面加了“-2”标志。我真的不明白。我觉得你和拉曼的答案很吸引人,我已经从他们身上学到了很多东西。我的问题是否被认为有失于他们的蔑视?我不明白他们为什么想要粉碎这种创造性和有趣的讨论。。。“已结束。此问题需要详细信息或清晰性。当前不接受答案。添加详细信息并澄清您正在解决的问题。这将帮助其他人回答此问题。您可以编辑此问题或发布新问题。1小时前已结束。”我猜您对示例的最终“目标”不清楚。。。只要打开一条新的线索,对你所追求的东西有更清晰的定义(带样本),这样我们就知道我们在努力追求什么。好吧,你和拉曼可以很容易地理解它。对于一个有趣的话题,我只是没有得到积极的否决和审查/结束。我不能关闭这个,因为Raman给出了一个很好的答案,在阅读上面的内容时,我的问题是绝对清楚的(是否有可能让它更清楚?),所以它看起来就像是无缘无故关闭的。希望拥有3000+权限的人能够再次打开它,看看人们可能会使用哪些其他技术也很好。很有趣。。。现在,我的大多数评论都与替代解决方案一起消失了。哦,好吧。。。