3

Я вернулся с последующим вопросом. Как заставить команды Linux работать на Cygwin? Сначала я спросил вас, какой инструмент следует использовать, чтобы помочь мне запускать свои сценарии Linux для Windows, и вы предложили Cygwin и я установили его, а также несколько пакетов. Сейчас я пробую некоторые команды, которые я использую в среде Linux, такие как iostat, free и ifconfig, но они не будут работать. Итак, мои вопросы:

  1. Почему не работают некоторые команды?
  2. Где должны находиться мои сценарии? И они должны иметь расширение .bat или я должен позволить им сохранить их расширение .sh?

Спасибо, парни! Я действительно надеюсь, что вы могли бы помочь мне с этим.

4 ответа4

3

Позвольте мне сначала уточнить терминологию.

  • Linux = ядро операционной системы
  • Дистрибутив Linux = ядро Linux + утилиты пользовательского пространства (bash, ifconfig и т.д.)
  • Windows = NT ядро + утилиты пространства пользователя
  • Cygwin = пользовательские утилиты

Из-за фундаментальных различий между ядрами NT и Linux вы не можете считать, что ваши скрипты работают без изменений в Windows. Некоторые вещи, которые менее специфичны для ядра ОС, работают в основном одинаково, и Bash - одна из них. С другой стороны, ifconfig довольно специфичен для ОС и является частью проекта net-tools , который не обновлялся с 2001 года и устарел с 2004 года. Я считаю, что существует версия ifconfig для Cygwin, и, хотя она, скорее всего, не будет работать для обновления конфигурации, она должна нормально работать для ее печати. Брайан С. указал, как убедиться, что он установлен.

Что касается вашего второго вопроса, расширение не имеет значения, пока вы запускаете свои скрипты из Bash (оно зависит от разрешения на выполнение и строки shebang). Однако, если вы хотите запустить их из-за пределов Bash, лучше завершить их с помощью .sh (подробности см. В этом ответе).

1

Прежде всего. Некоторые мониторы системного уровня Linux отсутствуют, так как вы работаете на уровне эмуляции, вы можете не получить столь же точный результат, как если бы вы использовали исходную версию команды Windows (если она доступна).

Затем убедитесь, что у вас установлены пакеты, включающие эти команды. Вы можете найти поиск в Cygwin Package List для получения дополнительной информации. В некоторых случаях вам может понадобиться скомпилировать команду из Cygwin, если предварительно скомпилированные сборки недоступны.

Что касается второй части вашего вопроса, если это bash-скрипты, используйте расширение .sh. Вы можете запускать их из любого места, но помните, что вам нужно выполнять их из оболочки Cygwin, а не из командной строки Windows. Конечно, вам также может потребоваться исправить разрешения, чтобы разрешить выполнение.

1

Linux ifconfig переводит (свободно) в команду ipconfig в Windows. В Cygwin-inside-Windows у вас есть доступ ко всему спектру программ Windows, включая любые командные файлы и дополнительные программы, добавленные пользователем, которые находятся вдоль PATH =

Попробуйте " ipconfig.exe /all ", которая является программой c:\windows\system32\ipconfig.exe .
Который на самом деле находится в /cygdrive/c/Windows/System32/ipconfig.exe

Да, это не идеальная замена для ifconfig

Пока кто-то не найдет истинный ifconfig для Cygwin.com, попробуйте следующее:
псевдоним ifconfig =/cygdrive/c/Windows/System32/ipconfig.exe

Получите IP-адрес вашей машины:
ipconfig.exe -all | grep -i "IPv4-адрес" | голова -n 1
Вы можете использовать sed/awk, чтобы получить только IP-адрес

0

Даже различные версии Linux не совместимы друг с другом. Например, вы можете установить на него программу, например, с помощью apt-get, и один дистрибутив linux получает программу из одного депозитария, другой, как и должно быть, получает из другого депозитария, но в программах могут быть различия. Программа, подобная ssh, может хранить конфигурационные файлы в /etc /ssh или может хранить их только в /etc, которые вы должны узнать в вашей системе Linux, где она находится.

И даже одна версия Linux, в зависимости от того, как она настроена, скрипт может быть несовместим с обоими. Например, в Debian(и, несомненно, не только в Debian) команда mail выполняет одну почтовую программу, но может быть настроена для запуска другой. Разные почтовые программы имеют разные параметры.

И тогда возникает вопрос, какие программы вы установили. Если скрипт обращается к программе, которая не установлена, он не будет работать. Это относится к cygwin или linux. И это может быть просто крошечная программа.

А в linux есть разные оболочки. А также оболочка может быть настроена необычным образом, например, включает * . и .. или нет. Linux открывает вам море сложности, о котором вы даже не подозревали.

Что касается вашего вопроса о том, хорошо ли использовать .bat или .sh. Если вы работаете в обычном cmd.exe без Cygwin, то сценарий будет .bat (хотя есть и другие сценарии или программы, хотя они могут запускаться в качестве параметра для другой программы, выступающей в роли интерпретатора). Если вы работали в Cygwin, расширение ничего не изменит.

Вы должны немного подумать о том, сколько вы хотите и можете узнать о скрипте, прежде чем его использовать. Если это один лайнер с сайта, то разумно знать хоть что-то о том, как он работает. Не делайте вещи полностью слепыми. Если это огромный скрипт, который является частью сложной программы, которую вы скачали, то вы можете посмотреть на скрипт, прежде чем запускать его, но, возможно, вы в порядке, не понимая все или многое в нем. Linux может отвлекать вас от сложности, но я бы не советовал избегать сложности. На вопрос, совместим ли «a» с «b», является такой общий вопрос, вы можете получить более полезный ответ, если, столкнувшись с конкретным случаем, убедитесь, что вы делаете это правильно для своего дистрибутива или Cygwin. , В файле readme или на сайте, откуда вы его получаете, или в установочном файле должно быть написано. Каждая вещь может иметь свой собственный способ делать вещи.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .