在Linux系统中,一切都可以通过命令行命令来控制。 从小任务到大任务,您都可以找到一个简单的命令来完成您的工作。如果您是 Linux 新手,并且对系统管理感兴趣,那么您需要对命令行有扎实的了解。在本文中,我们将使用一些易于理解的示例来讨论此命令的基础知识。 最后附上uptime代码实现。
    
     如何使用 uptime 命令
    
   
我们知道,uptime 命令为您提供系统启动(或运行)的时间。除了系统的运行时间,您还可以获得系统的其他详细信息,包括当前时间、运行会话的用户数以及过去 1、5 和 15 分钟的系统平均负载。
uptime [options]
uptime 的基本用法非常简单——只需输入命令名称并按回车键即可。
    
   
通过命令行运行 Linux 系统的 uptime 命令,会输出以下信息。
- 系统的当前时间。
 - 系统的总正常运行时间。
 - 当前正在运行系统的活动用户。
 - 过去 1、5 和 15 分钟内可用的系统负载的平均值。
 
“up”表示系统正在运行。
    这里的
    
     系统负载平均值
    
    是处于可运行状态或可运行状态的平均进程数不间断状态。 处于可运行状态的进程要么正在使用 CPU,要么正在等待使用中央处理器。 处于不可中断状态的进程正在等待某些 I/O 访问,例如等待磁盘。
   
    
     如何查看uptime帮助信息
    
   
uptime 命令带有各种选项。 要检查选项,我们可以运行 help 命令。
    
   
除了 help 命令,您还可以运行 man 命令来检查“uptime”命令的使用情况。
    
   
    
     如何让工具以漂亮的格式显示时间
    
   
如果您只想知道系统已启动的时间,并且以更易于阅读的格式知道,请使用 -p 命令行选项。
uptime -p
    
   
您可以获得非常清晰的输出,以天数、小时数、分钟数和秒数的格式显示正常运行时间。
    我们还可以使用“-s”选项在命令行界面上运行以下命令。
    
    
   
显示的信息来看,检查系统首次启动的确切时间,而不是自启动以来花费的时间。
    
     uptime代码实现
    
   
void getloadavg(char *loadavg, size_t nelem)
{
    char command[512] = {0};
    snprintf(command, sizeof(command), "%s |%s %s|%s -F: '%s'", "w","grep", "load", "awk","{print $4}");
    FILE *fp = popen(command, "r");
    if (fp == NULL)
	{
		printf("popen failed!\n");
		return;
	}
    fread(loadavg, nelem-1, 1, fp);
    fclose(fp);
}
static void print_uptime(void)
{
	FILE *fp;
	time_t time_now;
	time_t uptime = 0;
	long int updays;
	int uphours;
	int upmins;
	struct tm *tmn;
	struct utmp *u;
	int utmp_num = 0;
	char sz_loadavg[64] = {0};
	fp = fopen ("/proc/uptime", "r");
	if (fp != NULL)
	{
		char buf[BUFSIZ];
		char *b = fgets (buf, BUFSIZ, fp);
		if (b != NULL)
		{
			char *end_ptr;
			double upsecs = strtod (buf, &end_ptr);
			//printf("buf: %s\n",buf);
			//printf("end_ptr: %s\n",end_ptr);
			if (buf != end_ptr)
			uptime = (0 <= upsecs && upsecs < TYPE_MAXIMUM (time_t)
					  ? upsecs : -1);
		}
		fclose (fp);
	}
	
	while((u = getutent()))
    {
		
        if(u->ut_type == USER_PROCESS)
		{
			++utmp_num;
            //printf("%d %s %s %s \n", u->ut_type, u->ut_user, u->ut_line, u->ut_host);
		}
		
    }
	
	
	time_now = time (NULL);
	if (uptime == 0)
	{
		printf("couldn't get boot time\n");
	}
	updays = uptime / 86400;
	uphours = (uptime - (updays * 86400)) / 3600;
	upmins = (uptime - (updays * 86400) - (uphours * 3600)) / 60;
	tmn = localtime (&time_now);
	//printf("uphours: %d\n",uphours);
	//printf("upmins: %d\n",upmins);
	printf("%2d:%2d:%2d\t", tmn->tm_hour, tmn->tm_min, tmn->tm_sec); /* 这将打印当前时钟时间 */
	printf("up %2d:%2d\t",uphours,upmins);
	printf("%lu users\t",utmp_num);
	
	getloadavg(sz_loadavg,sizeof(sz_loadavg));
	printf ("load average: %s\t",sz_loadavg);
}
运行结果
    
   
当前输出以下信息:当前时间,系统多长时间已运行,当前登录的用户数,以及过去的系统平均负载1、5 和 15 分钟。
    
     总结
    
   
uptime命令易于理解和使用。 它不提供很多功能(或命令行选项),希望本篇文章对你有帮助,如果你有任何疑问,可以查看man手册。
    欢迎关注微信公众号【
    
     程序猿编码
    
    】,需要源代码欢迎添加本人微信号(
    
     17865354792
    
    )交流学习。