Bash 如何在几分钟内找出正常运行时间?

Bash 如何在几分钟内找出正常运行时间?,bash,shell,solaris,Bash,Shell,Solaris,如何在几分钟内找出Solaris上的正常运行时间并将其保存到文件,而无需对其进行剪切和转换?有什么优雅的方法吗?感谢您的回答我不完全确定这是否适用于Solaris,但是 uptime | awk -F ',' ' {print $1} ' | awk ' {print $3} ' | awk -F ':' ' {hrs=$1; min=$2; print hrs*60 + min} ' 在Solaris上,uptime(1)命令只是指向w(1)的链接。您可以在找到它的源代码 在这里,您将发现正

如何在几分钟内找出Solaris上的正常运行时间并将其保存到文件,而无需对其进行剪切和转换?有什么优雅的方法吗?感谢您的回答

我不完全确定这是否适用于Solaris,但是

uptime | awk -F ',' ' {print $1} ' | awk ' {print $3} ' | awk -F ':' ' {hrs=$1; min=$2; print hrs*60 + min} '

在Solaris上,
uptime(1)
命令只是指向
w(1)
的链接。您可以在找到它的源代码

在这里,您将发现
正常运行时间(1)
获取了
/var/run/utmpx
中记录的引导时间。与它们一样,您可以使用
getutxent(3)
函数族从该文件中读取数据,并使用
ut\u type==BOOT\u TIME
查找记录。在此记录中,查看
ut_tv
字段,它是一个
struct timeval
,包含启动时间的秒数和微秒数。由此可以计算出系统运行了多长时间


(编辑:我刚刚注意到标签。此解决方案更适合从C程序调用。哦,好吧,也许它对某人有用。)

以下是一种可靠而准确的方法,可以获取自上次在Solaris上启动以来的分钟数:

kstat -n system_misc | 
    nawk '/boot_time/ {printf("%d minutes\n",(srand()-$2)/60)}'

nawk
下,
srand()
函数返回自启动时起的秒数,
boot_time
kstat
统计返回自启动时起的秒数。从后者中减去前者得到秒数,再除以60得到自上次引导以来的分钟数。

对@jilliagre建议的一个小改进是在传递到nawk(1)之前使用kstat(1m)为您提取更多信息:


-p
表示“可解析的输出”,
-s
选择
-n
模块名称下的特定状态。

噢,糟糕,很抱歉。
$ kstat -p -n system_misc -s boot_time| nawk '{printf("%d minutes\n",(srand()-$2)/60)}'
26085 minutes