Linux系统中/etc/shadow的密码格式

- 举例:

grep -n root /etc/shadow

**root:$6$O2PgbgtuMWeM4tA.$4tEpVBS7yozpRUONzM8ERndYAx2R.0hTmJhX6XM0H9qc8PON4WRkQ1t/kt//KYPnJpmvvkOsbIMSLjWANL563/:18642:0:99999:7:::**

18642这个字段记录了改动密码的日期,但他不是以日期的形式,而是以“时间戳”的形式显示,Linux日期的时间是以1970年1月1日作为1而累加的日期,1971年1月1日则为366。对应的18462则为2021年1月15日,可以通过命令查看日期对应的时间戳:

echo $(($(date --date="2021/01/15" +%s)/86400+1))

2021/01/15为想要计算时间戳的日期,86400为每一天的秒数,%s为1970/01/01以来的累积总秒数。我们在/etc/passwd中查看root时可以发现登录shell为/bin/bash,其中bash仅支持整数,因此最终需要加上1补齐1970/01/01当天。

  • 为何Linux的时间是由1970/01/01开始的呢?

最初计算机操作系统是32位,而时间也是用32位表示。
Integer(整数)在JAVA内用32位表示,因此32位能表示的最大值是2147483647。另外1年365天的总秒数是31536000,2147483647/31536000 = 68.1。

也就是说32位能表示的最长时间是68年,而实际上到2038年01月19日03时14分07秒,便会到达最大时间,过了这个时间点,所有32位操作系统时间便会变为10000000 00000000 00000000 00000000

也就是1901年12月13日20时45分52秒,这样便会出现时间回归的现象,很多软件便会运行异常了。

因为用32位来表示时间的最大间隔是68年,而最早出现的UNIX操作系统考虑到计算机产生的年代和应用的时限综合取了1970年1月1日作为UNIX TIME的纪元时间(开始时间),而java自然也遵循了这一约束。

至于时间回归的现象相信随着64为操作系统的产生逐渐得到解决,因为用64位操作系统可以表示到292,277,026,596年12月4日15时30分08秒,相信我们的N代子孙,哪怕地球毁灭那天都不用愁不够用了,因为这个时间已经是千亿年以后了。

猜你喜欢

转载自blog.csdn.net/qq_39599464/article/details/114402957