【问题标题】:value of total physical memory in linux OSLinux操作系统中总物理内存的值
【发布时间】:2022-01-09 12:40:13
【问题描述】:

我有一个来自this question 的问题。 总物理内存的值是否总是以 KB 为单位显示?因为我想以 GB 为单位打印它并且我使用此命令

grep MemTotal /proc/meminfo | awk '{$2=$2/(1024^2); print $2}'

我不确定是否应该添加 if 语句来证明命令 grep MemTotal /proc/meminfo 显示 KB 值或其他值

任何帮助将不胜感激

【问题讨论】:

    标签: bash shell command-line-interface


    【解决方案1】:

    您不需要使用grep + awk,您可以在单个awk 本身中执行此操作。从解释的角度来看,我已将您尝试的 grep 代码合并到 awk 代码本身中。在awk 程序中,我正在检查条件,如果第一个字段是MemTotal:,第三个字段是kB,然后以 GB 为单位打印第二个字段的值(取自 OP 的尝试代码本身)。

    awk '$1=="MemTotal:" && $3=="kB"{print $2/(1024^2)}' /proc/meminfo
    

    如果您想让kB 在第三个中匹配不区分大小写的,请尝试以下代码:

    awk '$1=="MemTotal:" && $3~/^[kK][bB]$/{print $2/(1024^2)}' /proc/meminfo
    

    【讨论】:

      【解决方案2】:

      总物理内存的值是否总是以 KB 为单位显示?

      是的,单元kB 在内核代码中是固定的。请参阅:12

      【讨论】:

      • 他们进行了 10 位移位,所以准确地说,它的单位是 KiB
      【解决方案3】:

      如果您假设 MemTotal: 条目始终是 /proc/meminfo 的第一行,则可以在不产生子 shell 或外部命令的情况下获取 Gigabyte 值,并且只使用适用于 ksh 的 POSIX-shell 语法、ash、dsh、zsh 或 bash:

      #!/usr/bin/env sh
      
      IFS=': ' read -r _ memTotal _ < /proc/meminfo;
      
      printf 'Total RAM: %d GB\n' "$((memTotal / 1024000))"
      

      【讨论】:

        猜你喜欢
        • 2021-10-01
        • 2016-07-12
        • 1970-01-01
        • 2012-04-24
        • 1970-01-01
        • 1970-01-01
        • 2020-07-24
        • 1970-01-01
        • 2012-05-07
        相关资源
        最近更新 更多