JAVA返回" Linux-all-ports"作为os.name。与" Linux"相比有什么意义?作为os.name?

时间:2015-08-11 17:02:31

标签: java linux operating-system

我有两个相同的*系统。一个返回"Linux-all-ports",一个从"Linux"返回System.getProperty("os.name")

"Linux-all-ports"是什么意思?为什么一个系统返回一个系统,一个系统返回另一个系统? JAVA中是否存在可以更改此属性的内部状态?

注意:特定硬件可能不相同(主板,芯片组,PCI卡等),但我们不希望这会改变操作系统.name对吗?如果硬件会影响os.name属性,那么肯定会很清楚。

*两台机器PXE从同一操作系统映像(Ubuntu)启动,我们确认JAVA ver / build是相同的,uname的输出是相同的,所以我们非常有信心环境是相同的。

1 个答案:

答案 0 :(得分:0)

在Linux系统上,System.getProperty("os.name")应返回"Linux"

但是os.name属性不是只读属性,因此任何人都可以将其更改为任意值。 (这看起来很疯狂)。

"Linux-all-ports"在RXTX库之外没有任何意义;它由该项目的开发人员组成。有人将os.name设置为该值以触发RXTX库中的某个魔术开关,并且永远不会将其设置回来。

tl; dr section:

如果您的应用程序需要一些自定义设置,则在启动JVM时设置系统属性非常有用。但是从应用程序中使它们可写可能很尴尬。

我假设os.name之类的内容永远不会是用户可设置的值,所以我认为它设置的内容非常重要。但这种情况并非如此。您可以将os.name"Linux"更改为"ZippityFreakinDooDaa"并完全破坏所有内容。

Oracle acknowledges this here

Warning: Changing system properties is potentially dangerous and should be done with discretion. Many system properties are not reread after start-up and are there for informational purposes. Changing some properties may have unexpected side-effects.

显然可以使用Security Manager保护系统属性(使其成为只读)。