Linux 从单个命令行操作确定操作系统
简介: 我有一个“魔术”工具,如果我提供IP,它可以在机器上执行命令行操作。 该工具知道机器正在使用的操作系统,并根据是否为windows/linux在cmd/shell上执行命令,然后盲目返回命令的输出 C:>tool.exe 172.140.56.2“ipconfig” 假设:Linux 从单个命令行操作确定操作系统,linux,windows,shell,cmd,Linux,Windows,Shell,Cmd,简介: 我有一个“魔术”工具,如果我提供IP,它可以在机器上执行命令行操作。 该工具知道机器正在使用的操作系统,并根据是否为windows/linux在cmd/shell上执行命令,然后盲目返回命令的输出 C:>tool.exe 172.140.56.2“ipconfig” 假设: 每台机器一个操作系统。工具在执行命令时没有问题(无论是否失败都是另一个问题) 操作系统通常是windows或linux 我根据命令结果确定操作系统 问题: 使用这种能够执行命令的能力,我想确定操作系统 我的解决方案:
Windows IP Configuration
Ethernet adapter Local Area Connection:
...
然后是窗户
问题:
我想知道这是否是一种万无一失的方法。我想要一个在某些情况下不会失败的命令。(比如说,安装在windows上的cygwin允许linux命令成功,或者在某些特殊的scneario下,ipconfig在linux上成功。)
如果有任何帮助,我可以使用一些解析器处理命令输出
只是为了澄清任何混乱。它可以是任何命令。在我的示例中,我只使用了ipconfig。如果我正确理解了您的问题,那么
uname
是理想的命令。如果是任何Unix系统(包括OSX),它将返回正确的变量,如果是Windows,它将返回command not found或类似命令。如果我正确理解了您的问题,则uname
是理想的命令。如果是任何Unix系统(包括OSX),它将返回正确的变量,如果是Windows,它将返回command not found或类似命令。如果我正确理解了您的问题,则uname
是理想的命令。如果是任何Unix系统(包括OSX),它将返回正确的变量,如果是Windows,它将返回command not found或类似命令。如果我正确理解了您的问题,则uname
是理想的命令。如果是任何Unix系统(包括OSX),它将返回正确的变量,如果是Windows,它将返回command not found或类似命令。确定Linux/版本的最安全方法是
cat /etc/*release
样本输出
DISTRIB_ID=LinuxMint
DISTRIB_RELEASE=17
DISTRIB_CODENAME=qiana
DISTRIB_DESCRIPTION="Linux Mint 17 Qiana"
NAME="Ubuntu"
VERSION="14.04.1 LTS, Trusty Tahr"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 14.04.1 LTS"
VERSION_ID="14.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
确定Linux/版本的最安全方法是
cat /etc/*release
样本输出
DISTRIB_ID=LinuxMint
DISTRIB_RELEASE=17
DISTRIB_CODENAME=qiana
DISTRIB_DESCRIPTION="Linux Mint 17 Qiana"
NAME="Ubuntu"
VERSION="14.04.1 LTS, Trusty Tahr"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 14.04.1 LTS"
VERSION_ID="14.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
确定Linux/版本的最安全方法是
cat /etc/*release
样本输出
DISTRIB_ID=LinuxMint
DISTRIB_RELEASE=17
DISTRIB_CODENAME=qiana
DISTRIB_DESCRIPTION="Linux Mint 17 Qiana"
NAME="Ubuntu"
VERSION="14.04.1 LTS, Trusty Tahr"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 14.04.1 LTS"
VERSION_ID="14.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
确定Linux/版本的最安全方法是
cat /etc/*release
样本输出
DISTRIB_ID=LinuxMint
DISTRIB_RELEASE=17
DISTRIB_CODENAME=qiana
DISTRIB_DESCRIPTION="Linux Mint 17 Qiana"
NAME="Ubuntu"
VERSION="14.04.1 LTS, Trusty Tahr"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 14.04.1 LTS"
VERSION_ID="14.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
另一个应该起作用的命令是
set
,它显示每个环境变量的名称和值。Linux上的任何shell都支持它(尽管csh
和bash
之间的输出不同)。Windows系统的输出将包含PROCESSOR\u ARCHITECTURE
和其他标准变量(请参阅),这些变量不太可能在Linux中设置。另一个应该工作的命令是set
,它显示每个环境变量的名称和值。Linux上的任何shell都支持它(尽管csh
和bash
之间的输出不同)。Windows系统的输出将包含PROCESSOR\u ARCHITECTURE
和其他标准变量(请参阅),这些变量不太可能在Linux中设置。另一个应该工作的命令是set
,它显示每个环境变量的名称和值。Linux上的任何shell都支持它(尽管csh
和bash
之间的输出不同)。Windows系统的输出将包含PROCESSOR\u ARCHITECTURE
和其他标准变量(请参阅),这些变量不太可能在Linux中设置。另一个应该工作的命令是set
,它显示每个环境变量的名称和值。Linux上的任何shell都支持它(尽管csh
和bash
之间的输出不同)。Windows系统的输出将包含处理器_架构
和其他标准变量(请参阅),这些变量不太可能在Linux中设置。我假设您无法以任何方式修改“magic”工具,因为很明显,该工具不知怎的知道,让它向您吐出这些信息似乎是最简单的。是的。考虑到我无法深入到“魔术”工具,甚至无法识别它的“魔力”,我想你不能以任何方式修改“魔术”工具,因为工具显然知道某种程度,只要让它在你身上吐出信息,似乎是最简单的。是的。考虑到我无法深入到“魔术”工具,甚至无法识别它的“魔力”,我想你不能以任何方式修改“魔术”工具,因为工具显然知道某种程度,只要让它在你身上吐出信息,似乎是最简单的。是的。考虑到我无法深入到“魔术”工具,甚至无法识别它的“魔力”,我想你不能以任何方式修改“魔术”工具,因为工具显然知道某种程度,只要让它在你身上吐出信息,似乎是最简单的。是的。考虑到我无法挖掘“魔法”工具,甚至无法识别它是如何“魔力”的。这似乎是一个更明智的执行命令。但是,如果有人不这么想,让我来回答这个问题。我考虑了uname
,但不喜欢“导致错误”这一方面。因此,我在echo“$PATH”
的OP上发表了评论。它对两个操作系统都有效,并在每个操作系统上返回清晰可区分的输出。”(我也相信OSX)“OSX就是unix。有了(tm),仍然如此。是的。这似乎是一个更明智的执行命令。但是,如果有人不这么想,让我来回答这个问题。我考虑了uname
,但不喜欢“导致错误”这一方面。因此,我在echo“$PATH”
的OP上发表了评论。这对操作系统和返回都有效