我回来问一个后续问题。如何让 Linux 命令在 Cygwin 上运行?首先我问你应该使用什么工具来帮助我在 Windows 上运行 Linux 脚本,你建议我使用 Cygwin,于是我安装了它以及一些软件包。现在我正在尝试一些我在 Linux 环境中使用的命令,如 iostat、free 和 ifconfig,但它们不起作用。所以我的问题是:
- 为什么有些命令不起作用?
- 我的脚本应该存放在哪里?它们的扩展名应该是 .bat 还是应该保留 .sh?
谢谢大家!我真的希望你们能帮我解决这个问题。
答案1
让我先澄清一下术语。
- Linux = 操作系统内核
- Linux 发行版 = Linux 内核 + 用户空间实用程序(bash、ifconfig 等)
- Windows = NT 内核 + 用户空间实用程序
- Cygwin = 用户空间实用程序
由于 NT 和 Linux 内核之间存在根本差异,因此您不能指望您的脚本在 Windows 上不加修改就能运行。有些不太特定于操作系统内核的东西,其工作方式大致相同,Bash 就是其中之一。另一方面,ifconfig 是相当特定于操作系统的,并且是网络工具项目,自 2001 年以来没有更新过,自 2004 年以来已弃用。我相信,有一个 cygwin 版本的 ifconfig,尽管它很可能无法更新配置,但它应该可以很好地打印它。Bryan C. 指出了如何确保它已安装。
至于你的第二个问题,只要你从 Bash 启动脚本,扩展名就无关紧要(它依赖于执行权限和舍邦线)。但是,如果你想从 Bash 外部启动它们,你最好让它们以 .sh 结尾(请参阅这个答案了解详情)。
答案2
Linux ifconfig 大致相当于 Windows 中的 ipconfig 命令。在 Cygwin-inside-Windows 中,您可以访问所有 Windows 程序,包括 PATH= 中的任何批处理文件和用户添加的其他程序
尝试 ”ipconfig.exe /全部“ 哪一个是目录:\windows\system32\ipconfig.exe程序。
实际上/cygdrive/c/Windows/System32/ipconfig.exe
是的,这不是 ifconfig 的理想替代品
直到有人找到 Cygwin.com 的真正 ifconfig 为止,请尝试以下操作:
别名 ifconfig=/cygdrive/c/Windows/System32/ipconfig.exe
获取你的机器IP地址:
ipconfig.exe -all | grep -i "IPv4 地址" | head -n 1
你可以使用 sed/awk 来获取 IP 地址
答案3
首先。由于您在模拟层中运行,因此某些 Linux 系统级监视器不存在,因此您可能无法获得与 Windows 本机版本的命令(如果可用)一样准确的结果。
接下来,确保已安装包含这些命令的软件包。您可以看到搜索Cygwin 软件包列表了解更多信息。在某些情况下,如果没有预编译版本,您可能需要在 Cygwin 中编译命令。
至于问题的第二部分,如果这些是 bash 脚本,请使用 .sh 扩展名。您可以从任何地方运行它们,但请记住,您需要从 Cygwin shell 执行它们,而不是从 Windows 命令提示符执行它们。当然,您可能还需要修复权限以允许执行。
答案4
甚至各种 Linux 版本之间也不兼容。例如,您可以使用 apt-get 等程序安装程序,一个 Linux 发行版从一个存储库获取程序,另一个发行版从另一个存储库获取程序,这是理所当然的,但程序之间可能会有差异。像 ssh 这样的程序可能会将配置文件存储在 /etc/ssh 中,也可能只存储在 /etc 中,您必须在 Linux 系统上找到它的位置。
甚至一个 Linux 版本(取决于配置方式)的脚本也可能不兼容两者。例如,在 Debian(毫无疑问不仅仅是 Debian)中,“mail”命令运行一个邮件程序,但可以配置为运行另一个邮件程序。不同的邮件程序具有不同的参数。
然后就是你安装了什么程序的问题。如果脚本访问了未安装的程序,那么它将无法工作。这适用于 cygwin 或 linux。它可能只是一个很小的程序。
在 Linux 中有不同的 shell。而且 shell 可以以不寻常的方式配置,例如,包含*
或.
不包含..
。Linux 为你打开了一片你显然从未想象过的复杂海洋。
至于您关于是否使用 .bat 或 .sh 的问题。如果您只是在普通的 cmd.exe 中运行,而没有 cygwin,那么脚本将是 .bat(尽管还有其他脚本或程序,但它们可能作为另一个充当解释器的程序的参数运行)如果您在 cygwin 中运行,则扩展不会改变任何东西。
在使用脚本之前,您应该考虑一下您想要了解多少以及可以了解多少。如果它是网站上的一行代码,那么至少了解一些它的工作原理是合理的。不要完全盲目地运行。如果它是一个巨大的脚本,是您下载的复杂程序的一部分,那么您可能希望在运行它之前查看该脚本,但您可能不理解其中的所有内容或大部分内容。Linux 可能会用复杂性分散您的注意力,但我不建议避免复杂性。询问“a”是否与“b”兼容是一个非常笼统的问题,如果您在面对特定情况时,可能会得到更有用的答案,请确保您以适合您的发行版或 cygwin 的方式执行此操作。您从中获取它的自述文件或网站或安装文件应该说。每件事都可以有自己的做事方式。