Cygwin установка. Cygwin: Введение

30.03.2019

После статьи Криса Касперски "Как из Windows сделать Unix" в КГ?3 от 23.01.01 я загорелся желанием чуть подробнее рассказать пользователям Windows о том, что такое Cygwin. Пользуюсь я им достаточно давно и уже не могу эффективно работать в Windows без установленного Cygwin.

Слово Cygwin складывается из двух составляющих: Cygnus - это имя компании, и Windows, но было бы неверно сказать, что все в Cygwin написано ребятами из Cygnus. Cygwin - это порт утилит Gnu под Windows, а Gnu (www.gnu.org) - это проект Фонда Свободного Программного Обеспечения (Free Software Foundation, или просто FSF), ставящий своей целью создание некоммерческой Unix системы, не принадлежащей никому в отдельности и свободной от ограничивающих свободу распространения и модификации ПО лицензий. В рамках этого проекта были переписаны заново практически все стандартные утилиты UNIX. Три самых значительных вклада FSF - это gcc (Gnu C Compiler, или Gnu Compiler Collection), Bash (командный интерпретатор Bourne Again Shell) и Emacs. Без gcc не было бы Линукса, а Bash - стандартная командная оболочка для многих современных Unix-систем. Люди с опытом говорят, что первое, что делают сисадмины после установки коммерческих Unix"ов, - это доинсталлируют Gnu утилиты. В принципе, GNU и FSF сами по себе - тема обширная и заслуживающая отдельной подробной статьи.

Весь набор Gnu-утилит представляет собой набор маленьких (как правило) программок, которые покрывают большинство задач, с которыми ежедневно сталкивается пользователь Unix системы (и не только Unix), каждая такая программка выполняет одну задачу, и выполняет ее хорошо. Эти программки могут затем комбинироваться для решения различных задач.

Попытки перенести Gnu на другие, не Unix платформы осуществлялись не раз, что, кстати, свидетельствует об их популярности.

Стоит упомянуть проект портирования утилит под DOS - DJGPP. Сходите на сайт http://www.delorie.com/djgpp/, это действительно интересно.

Cygnus не стал компилировать каждую утилиту в отдельности, мучаясь каждый раз для решения одних и тех же проблем, вместо этого была написана некая "прокладка" между GNU утилитами и операционной системой. Эта прокладка - cygwin1.dll (1 - номер версии) - обеспечивает эмуляцию системных вызовов UNIX, что позволяет компилировать и исполнять Unix программы без или почти без изменения исходного кода. В принципе, эта dll и есть сам Cygwin, а все остальное - программные пакеты GNU, скомпилированные для работы с Cygwin.

Наличие gcc и библиотек дает возможность переносить под Windows самые различные приложения и делает Cygwin полноценной платформой - вы можете иногда найти выражение "Cygwin platform". Со времени первых бета-версий Cygwin различные люди компилировали под Cygwin то, чего им не хватало под Windows, рос постепенно и стандартный дистрибутив Cygwin, в том числе и за счет этих самопальных компиляций. К примеру, во время версии Beta 20 мне приходилось отдельно скачивать редактор vim, а сейчас он ставится вместе со всем набором.

Как это все инсталлировать

В Cygnus написали удобную программку для управления пакетами, слегка напоминающую некоторые аналогичные программы из дистрибуций ОС Линукс. Первый шаг - это скачать ее с сайта Cygnus http://sources.redhat.com/cygwin/setup.exe. Запустив ее, Вы сможете скачать стандартный набор пакетов с одного из многочисленных зеркал, причем Вы можете желать это выборочно, пропуская отдельные пакеты.

На будущее - запуская эту программку позже из этой же директории, Вы сможете увидеть, какие появились новые пакеты или новые версии уже имеющихся пакетов.

Эта же программа и поставит Вам Cygwin, опять предлагая самому распорядиться, что устанавливать, а что нет. Инсталляция создаст Вам директории, обычные для файловой иерархии Unix - bin, usr, sbin, и т.д., поэтому удобно поместить их все в какую-то одну директорию, дабы они не путались с Вашими виндозными папками.

И как этим всем пользоваться

Когда Вы запустите Cygwin, вы увидите окошко с консолью, подобное обычной виндозной консоли, command.com в Win9x или cmd.exe в NT. Но нет! У Вас на Windows запустился славный потомок юниксовых командных интерпретаторов, который и пыталась имитировать command.com со своими BAT файлами. Bash и его старший брат sh - это тот клей, который связывает в одно целое Unix систему, он может вполне полноправно называться языком программирования, то есть на нем можно писать.

Несколько основных команд и их аналоги в Windows

ls = dir - просмотреть содержание директории;
cd = chdir - перейти в другую директорию;
cp = copy - скопировать файл;
mv = mv - переместить/переименовать файл;
rm = del - удалить файл;
mkdir = mkdir - создать директорию;
pwd - вывести текущую директорию.

Запомните - большое "A" уже не равно маленькому "a", символ \ теперь должен быть заменен на /. Команда cd / в Cygwin приведет Вас в ту директорию, где находятся bin, usr и т.д. В Unix выше / уже ничего нет, а в Cygwin для того, чтобы путешествовать по виндозным партициям, можно пользоваться командой cd //c/ (cd //d/MyDir и т.д.).

Одна из удобнейших особенностей Bash - это автодополнение (autocompletion). Создадим командой cat несколько файлов:

cat > first_file ENTER

введите что-то, затем Ctr-C,

и то же самое для другого файла:

cat > second_file ENTER.

Убедитесь, что файлы существуют:

Теперь наберите любую команду, например, ls, и первую букву первого файла. Нажмите TAB. Bash сам допишет имя файла. Если файлы начинаются одинаково, например, file_one и file_two, Bash допишет только file_ и подождет, пока Вы введете еще одну букву, чтобы устранить многозначность.

Несколько примеров использования некоторых утилит.

Допустим, у Вас есть текстовый файл in.txt. Посчитать количество слов в нем Вы можете так:

Количество строк:

Найти строки, содержащие последовательность символов Larry:

grep "Larry" in.txt

Разбить строки на слова, заменяя пробелы на символы конца строки:

cat in.txt | gawk "gsub(" +","\n")"

Команда gawk "gsub(" +","\n")" значит - заменить один или больше пробелов (" +") на символ конца строки ("\n").

Сделать то же самое, но с возможностью удобного просмотра (PageUp, PageDown, выйти - q)

cat in.txt | gawk "gsub(" +","\n")" | less

Отсортировать строки (слова):

cat in.txt | gawk "gsub(" +","\n")" | sort | less

Убрать одинаковые строки (слова):

cat in.txt | gawk "gsub(" +","\n")" | sort | uniq | less

cat in.txt | gawk "gsub(" +","\n")" | sort | uniq | wc -l

Убрать одинаковые строки (слова), считая их количество:

cat in.txt | gawk "gsub(" +","\n")" | sort | uniq --count | less

Опять отсортировать, получив, таким образом, частотный словник текста:

cat in.txt | gawk "gsub(" +","\n")" | sort | uniq --count | sort -r | less

То же самое, с выводом результатов в текстовый файл:

cat in.txt | gawk "gsub(" +","\n")" | sort | uniq --count | sort -r > out.txt

То же самое, с сохранением промежуточных результатов в файле intermediate.txt:

cat in.txt | gawk "gsub(" +","\n")" | tee intermediate.txt | sort | uniq --count | sort -r | less

Теперь, используя возможности Bash, можно повторить эту команду для нескольких файлов. Набирайте скрипт прямо в консоли, переходя на новую строку так, как это напечатано в статье, - Bash поймет, что команда не закончена и сменит приглашение на ">":

for file in *.txt; do

cat $file | gawk "gsub(" +","\n")" | sort | uniq --count | sort -r > $file.out

Вот так. Простые задачи - простые решения.

Чтобы узнать, как работает та или иная команда, можно запустить ее с ключом --help либо воспользоваться командой man (manual) - man awk, man grep. Выйти из man можно с помощью q.

ЧТО ЕЩЕ ЕСТЬ В CYGWIN

Компилятор

Простой (люди говорят - 1 день обучения) язык программирования для обработки текстов, один из предков Perl

Потоковый редактор

Генератор парсеров на С

Генератор парсеров на С

Язык программирования. Собственно к утилитам Gnu прямого отношения не имеет, некоторое время поддерживался корпорацией Sun. Можно сделать cd /usr/share/tk8.0/demos и запустить программку widget -./widget. Вы увидите демонстрацию возможностей Tk - расширения Tcl для создания GUI.

Архиватор

Мощный архиватор

Программа для сравнения файлов

И очень много другого. Просто зайдите в bin и посмотрите, что у Вас там лежит. Залежи пакетов можно найти на сайте http://www.hirmke.de/software/develop/gnuwin32/cygwin/porters/Hirmke_Michael/GNUWin32-contents.html. Также много информации и линков по теме есть на сайте Cygnus http://sources.redhat.com/cygwin/.

Как настроить CYGWIN

Во-первых, Вам совсем не обязательно запускать Bash, если Вас пугает консоль. Вы можете пользоваться всеми программками из Far"а, Windows Commander"а и т.д., нужно только прописать пути к директории bin. В Windows 9x это делается в файле autoexec.bat, в NT в My Computer / Properties / Environment к переменной окружения PATH нужно добавить дорожку к bin.

Для более удобной работы в Bash советую сделать следующее: если директории Cygwin у Вас находятся в c:\cygwin, создать директорию c:\cygwin\root (mkdir /root) и внести строку в файл cygwin.bat, что лежит в c:\cygwin:

HOME=d:\cygwin\root

В директории root следует создать 2 файла, начинающихся с точки: .inputrc и.bashrc. Оба файла исполняются Bash при запуске, .inputrc отвечает за то, чтобы правильно работали все клавиши, а.bashrc содержит различную информацию. Как пример приведу свой.bashrc:

export PS1="\w > "

export PATH=".:$PATH"

alias ls="ls --color"

alias untar="tar xvf"

echo Welcome to CygWin!

Первая строка указывает путь Bash. Так в Юниксе поступают со всеми интерпретаторами. К примеру, если у вас есть скрипт hello.pl на Perl, а сам perl в /usr/bin, Вы можете написать в первой строке:

и запускать его так:

Таким образом, можно запускать программы, не заботясь о том, на чем они написаны.

PS1 - это переменная, в которой хранится Bash prompt, приглашение к работе, как его еще называют. \w - это текущая директория.

После такого добавления к PATH можно делать так, как это привыкли делать Windows пользователи:

Далее я использую синонимы, или alias"ы. К примеру, команда ls по умолчанию не раскрашивает свой вывод в зависимости от того, чем являются файлы, для этого ее нужно запустить с ключом --color. Это неудобно. Командой alias ls="ls --color" я решаю эту проблему. Теперь ls значит ls --color. Не обязательно использовать то же имя команды, можно сделать ll="ls --color" - и пользоваться новой командой ll. Примерно так я делаю, создавая команду untar для распаковки tar архивов, вместо того, чтобы каждый раз набирать tar xvf. В alias можно помещать и pipes (трубы, конвейеры): alias sort_un_sort=" sort | uniq --count | sort -r ".

В действительности простор для обустройства рабочего места здесь безграничен, и мои примеры примитивны и просты. Есть еще функции, интерактивные команды в.bashrc, функции, запускающиеся из приглашения (prompt)...

Что такое CYGWIN После статьи Криса Касперски "Как из Windows сделать Unix" в КГ №3 от 23.01.01 я загорелся желанием чуть подробнее рассказать пользователям Windows о том, что такое Cygwin. Пользуюсь я им достаточно давно и уже не могу эффективно работать в Windows без установленного Cygwin.

Слово Cygwin складывается из двух составляющих: Cygnus - это имя компании, и Windows, но было бы неверно сказать, что все в Cygwin написано ребятами из Cygnus. Cygwin - это порт утилит Gnu под Windows, а Gnu (www.gnu.org) - это проект Фонда Свободного Программного Обеспечения (Free Software Foundation, или просто FSF), ставящий своей целью создание некоммерческой Unix системы, не принадлежащей никому в отдельности и свободной от ограничивающих свободу распространения и модификации ПО лицензий. В рамках этого проекта были переписаны заново практически все стандартные утилиты UNIX. Три самых значительных вклада FSF - это gcc (Gnu C Compiler, или Gnu Compiler Collection), Bash (командный интерпретатор Bourne Again Shell) и Emacs. Без gcc не было бы Линукса, а Bash - стандартная командная оболочка для многих современных Unix-систем. Люди с опытом говорят, что первое, что делают сисадмины после установки коммерческих Unix"ов, - это доинсталлируют Gnu утилиты. В принципе, GNU и FSF сами по себе - тема обширная и заслуживающая отдельной подробной статьи.

Весь набор Gnu-утилит представляет собой набор маленьких (как правило) программок, которые покрывают большинство задач, с которыми ежедневно сталкивается пользователь Unix системы (и не только Unix), каждая такая программка выполняет одну задачу, и выполняет ее хорошо. Эти программки могут затем комбинироваться для решения различных задач.

Попытки перенести Gnu на другие, не Unix платформы осуществлялись не раз, что, кстати, свидетельствует об их популярности.

Стоит упомянуть проект портирования утилит под DOS - DJGPP. Сходите на сайт http://www.delorie.com/djgpp/, это действительно интересно.

Cygnus не стал компилировать каждую утилиту в отдельности, мучаясь каждый раз для решения одних и тех же проблем, вместо этого была написана некая "прокладка" между GNU утилитами и операционной системой. Эта прокладка - cygwin1.dll (1 - номер версии) - обеспечивает эмуляцию системных вызовов UNIX, что позволяет компилировать и исполнять Unix программы без или почти без изменения исходного кода. В принципе, эта dll и есть сам Cygwin, а все остальное - программные пакеты GNU, скомпилированные для работы с Cygwin.

Наличие gcc и библиотек дает возможность переносить под Windows самые различные приложения и делает Cygwin полноценной платформой - вы можете иногда найти выражение "Cygwin platform". Со времени первых бета-версий Cygwin различные люди компилировали под Cygwin то, чего им не хватало под Windows, рос постепенно и стандартный дистрибутив Cygwin, в том числе и за счет этих самопальных компиляций. К примеру, во время версии Beta 20 мне приходилось отдельно скачивать редактор vim, а сейчас он ставится вместе со всем набором.

Как это все инсталлировать

В Cygnus написали удобную программку для управления пакетами, слегка напоминающую некоторые аналогичные программы из дистрибуций ОС Линукс. Первый шаг - это скачать ее с сайта Cygnus http://sources.redhat.com/cygwin/setup.exe. Запустив ее, Вы сможете скачать стандартный набор пакетов с одного из многочисленных зеркал, причем Вы можете желать это выборочно, пропуская отдельные пакеты.

На будущее - запуская эту программку позже из этой же директории, Вы сможете увидеть, какие появились новые пакеты или новые версии уже имеющихся пакетов.

Эта же программа и поставит Вам Cygwin, опять предлагая самому распорядиться, что устанавливать, а что нет. Инсталляция создаст Вам директории, обычные для файловой иерархии Unix - bin, usr, sbin, и т.д., поэтому удобно поместить их все в какую-то одну директорию, дабы они не путались с Вашими виндозными папками.

И как этим всем пользоваться

Когда Вы запустите Cygwin, вы увидите окошко с консолью, подобное обычной виндозной консоли, command.com в Win9x или cmd.exe в NT. Но нет! У Вас на Windows запустился славный потомок юниксовых командных интерпретаторов, который и пыталась имитировать command.com со своими BAT файлами. Bash и его старший брат sh - это тот клей, который связывает в одно целое Unix систему, он может вполне полноправно называться языком программирования, то есть на нем можно писать.

Несколько основных команд и их аналоги в Windows

ls = dir - просмотреть содержание директории;
cd = chdir - перейти в другую директорию;
cp = copy - скопировать файл;
mv = mv - переместить/переименовать файл;
rm = del - удалить файл;
mkdir = mkdir - создать директорию;
pwd - вывести текущую директорию.

Запомните - большое "A" уже не равно маленькому "a", символ \ теперь должен быть заменен на /. Команда cd / в Cygwin приведет Вас в ту директорию, где находятся bin, usr и т.д. В Unix выше / уже ничего нет, а в Cygwin для того, чтобы путешествовать по виндозным партициям, можно пользоваться командой cd //c/ (cd //d/MyDir и т.д.).

Одна из удобнейших особенностей Bash - это автодополнение (autocompletion). Создадим командой cat несколько файлов:

cat > first_file ENTER

введите что-то, затем Ctr-C,

и то же самое для другого файла:

cat > second_file ENTER.

Убедитесь, что файлы существуют:

Теперь наберите любую команду, например, ls, и первую букву первого файла. Нажмите TAB. Bash сам допишет имя файла. Если файлы начинаются одинаково, например, file_one и file_two, Bash допишет только file_ и подождет, пока Вы введете еще одну букву, чтобы устранить многозначность.

Несколько примеров использования некоторых утилит.

Допустим, у Вас есть текстовый файл in.txt. Посчитать количество слов в нем Вы можете так:

Количество строк:

Найти строки, содержащие последовательность символов Larry:

grep "Larry" in.txt

Разбить строки на слова, заменяя пробелы на символы конца строки:

cat in.txt | gawk "gsub(" +","\n")"

Команда gawk "gsub(" +","\n")" значит - заменить один или больше пробелов (" +") на символ конца строки ("\n").

Сделать то же самое, но с возможностью удобного просмотра (PageUp, PageDown, выйти - q)

cat in.txt | gawk "gsub(" +","\n")" | less

Отсортировать строки (слова):

cat in.txt | gawk "gsub(" +","\n")" | sort | less

Убрать одинаковые строки (слова):

cat in.txt | gawk "gsub(" +","\n")" | sort | uniq | less

cat in.txt | gawk "gsub(" +","\n")" | sort | uniq | wc -l

Убрать одинаковые строки (слова), считая их количество:

cat in.txt | gawk "gsub(" +","\n")" | sort | uniq --count | less

Опять отсортировать, получив, таким образом, частотный словник текста:

cat in.txt | gawk "gsub(" +","\n")" | sort | uniq --count | sort -r | less

То же самое, с выводом результатов в текстовый файл:

cat in.txt | gawk "gsub(" +","\n")" | sort | uniq --count | sort -r > out.txt

То же самое, с сохранением промежуточных результатов в файле intermediate.txt:

cat in.txt | gawk "gsub(" +","\n")" | tee intermediate.txt | sort | uniq --count | sort -r | less

Теперь, используя возможности Bash, можно повторить эту команду для нескольких файлов. Набирайте скрипт прямо в консоли, переходя на новую строку так, как это напечатано в статье, - Bash поймет, что команда не закончена и сменит приглашение на ">":

for file in *.txt; do

cat $file | gawk "gsub(" +","\n")" | sort | uniq --count | sort -r > $file.out

Вот так. Простые задачи - простые решения.

Чтобы узнать, как работает та или иная команда, можно запустить ее с ключом --help либо воспользоваться командой man (manual) - man awk, man grep. Выйти из man можно с помощью q.

ЧТО ЕЩЕ ЕСТЬ В CYGWIN

Компилятор

Простой (люди говорят - 1 день обучения) язык программирования для обработки текстов, один из предков Perl

Потоковый редактор

Генератор парсеров на С

Генератор парсеров на С

Язык программирования. Собственно к утилитам Gnu прямого отношения не имеет, некоторое время поддерживался корпорацией Sun. Можно сделать cd /usr/share/tk8.0/demos и запустить программку widget -./widget. Вы увидите демонстрацию возможностей Tk - расширения Tcl для создания GUI.

Архиватор

Мощный архиватор

Программа для сравнения файлов

И очень много другого. Просто зайдите в bin и посмотрите, что у Вас там лежит. Залежи пакетов можно найти на сайте http://www.hirmke.de/software/develop/gnuwin32/cygwin/porters/Hirmke_Michael/GNUWin32-contents.html. Также много информации и линков по теме есть на сайте Cygnus http://sources.redhat.com/cygwin/.

Как настроить CYGWIN

Во-первых, Вам совсем не обязательно запускать Bash, если Вас пугает консоль. Вы можете пользоваться всеми программками из Far"а, Windows Commander"а и т.д., нужно только прописать пути к директории bin. В Windows 9x это делается в файле autoexec.bat, в NT в My Computer / Properties / Environment к переменной окружения PATH нужно добавить дорожку к bin.

Для более удобной работы в Bash советую сделать следующее: если директории Cygwin у Вас находятся в c:\cygwin, создать директорию c:\cygwin\root (mkdir /root) и внести строку в файл cygwin.bat, что лежит в c:\cygwin:

HOME=d:\cygwin\root

В директории root следует создать 2 файла, начинающихся с точки: .inputrc и.bashrc. Оба файла исполняются Bash при запуске, .inputrc отвечает за то, чтобы правильно работали все клавиши, а.bashrc содержит различную информацию. Как пример приведу свой.bashrc:

export PS1="\w > "

export PATH=".:$PATH"

alias ls="ls --color"

alias untar="tar xvf"

echo Welcome to CygWin!

Первая строка указывает путь Bash. Так в Юниксе поступают со всеми интерпретаторами. К примеру, если у вас есть скрипт hello.pl на Perl, а сам perl в /usr/bin, Вы можете написать в первой строке:

и запускать его так:

Таким образом, можно запускать программы, не заботясь о том, на чем они написаны.

PS1 - это переменная, в которой хранится Bash prompt, приглашение к работе, как его еще называют. \w - это текущая директория.

После такого добавления к PATH можно делать так, как это привыкли делать Windows пользователи:

Далее я использую синонимы, или alias"ы. К примеру, команда ls по умолчанию не раскрашивает свой вывод в зависимости от того, чем являются файлы, для этого ее нужно запустить с ключом --color. Это неудобно. Командой alias ls="ls --color" я решаю эту проблему. Теперь ls значит ls --color. Не обязательно использовать то же имя команды, можно сделать ll="ls --color" - и пользоваться новой командой ll. Примерно так я делаю, создавая команду untar для распаковки tar архивов, вместо того, чтобы каждый раз набирать tar xvf. В alias можно помещать и pipes (трубы, конвейеры): alias sort_un_sort=" sort | uniq --count | sort -r ".

В действительности простор для обустройства рабочего места здесь безграничен, и мои примеры примитивны и просты. Есть еще функции, интерактивные команды в.bashrc, функции, запускающиеся из приглашения (prompt)...

Надеюсь, у Вас появилось желание поэкспериментировать с Cygwin. Ваши комментарии присылайте на


Скрипт cygwin.bat выполняется из командной строки DOS, устанавливает среду Cygwin и запускает интерпретатор bash под Windows. Cygwin прекрасно настраивает переменные Unix-окружения в соответствии с переменными окружения Windows. Например, на своей машине, я вошел в Windows, как пользователь bjohnson. Когда я запускаю Cygwin , он по умолчанию загружается под управлением пользователя bjohnson.

Ниже представлено окно с некоторыми стандартными Unix-командами в Cygwin .


В зависимости от установленных вами пакетов, вы легко можете запускать соответствующие Unix-утилиты. Если вы пользователь Unix, вам, несомненно, хотелось бы, чтобы в Windows была команда ps для просмотра выполняемых в настоящее время процессов без использования Task Manager . Если вы используете флаг -aW , вы сможете увидеть процессы Windows, как и любые запущенные процессы Cygwin . Ниже представлен список Windows-процессов, доступный в результате выполнения Cygwin команды (ps -aW | less ).

PID PPID PGID WINPID TTY UID STIME COMMAND 3193213 0 0 4291774083 ? 0 Dec 31 C:\WINDOWS\SYSTEM\KERNEL32.DLL 63753 0 0 4294903543 ? 0 Dec 31 C:\WINDOWS\SYSTEM\MSGSRV32.EXE 60569 0 0 4294906727 ? 0 Dec 31 C:\WINDOWS\SYSTEM\MPREXE.EXE 77349 0 0 4294889947 ? 0 Dec 31 C:\WINDOWS\SYSTEM\RPCSS.EXE 196093 0 0 4294771203 ? 0 Dec 31 C:\WINDOWS\SYSTEM\mmtask.tsk 191237 0 0 4294776059 ? 0 Dec 31 C:\WINDOWS\EXPLORER.EXE 237709 0 0 4294729587 ? 0 Dec 31 C:\WINDOWS\TASKMON.EXE 230713 0 0 4294736583 ? 0 Dec 31 C:\WINDOWS\SYSTEM\SYSTRAY.EXE 217533 0 0 4294749763 ? 0 Dec 31 C:\PROGRAMFILES\DIRECTCD\DIRECTCD.EXE 5.1.

Структура директорий и полномочия доступа к файлам

Cygwin монтирует ваши локальные диски в директории /cygdrive . Сюда входят разделы жесткого диска, дисководы, устройства для чтения компакт-дисков, устройства для чтения ZIP . Выполним команду df на моей машине. Получим структуру, подобную той, что приведена ниже.

Bjohnson@BRADMAN $ df Filesystem 1k-blocks Used Available Use% Mounted on C:\cygwin\bin 2096832 0 2096832 0% /usr/bin C:\cygwin\lib 2096832 0 2096832 0% /usr/lib C:\cygwin 2096832 0 2096832 0% / c: 2096832 0 2096832 0% /cygdrive/c d: 670496 670496 0 100% /cygdrive/d

После установки Cygwin я указал инсталлятору сохранить файлы в директорию C:\cygwin\ . Cygwin использовал эту директории в качестве корневой точки монтирования файловой системы . Он смонтировал C:\cygwin\ bin на /usr/bin и C:\cygwin\lib на /usr/lib . В директории /usr/bin , /bin , и /usr/local/bin были добавлены переменные окружения Cygwin (но не Windows). Директории из среды окружения Windows были импортированы в среду Cygwin , чтобы иметь к ним доступ.

Cygwin также использует разумную систему полномочий доступа для Unix-файлов. Но что это может означать для всех ваших Windows-файлов? Кто владелец файлов , и какие полномочия установлены по умолчанию? Запустим команду ls -al на несколько Windows-файлов, чтобы получить ответ.

bjohnson@BRADMAN /cygdrive/c/cyginstall $ ls -al total 273 drwxr-xr-x 1 bjohnson unknown 0 Mar 13 17:48 . drwxr-xr-x 1 bjohnson unknown 0 Dec 31 1969 .. drwxr-xr-x 1 bjohnson unknown 0 Mar 13 18:06 contrib drwxr-xr-x 1 bjohnson unknown 0 Mar 13 18:03 latest -rwxr-xr-x 1 bjohnson unknown 218112 Mar 13 17:48 setup.exe -rw-r--r-- 1 bjohnson unknown 60607 Mar 13 17:54 setup.ini

Cygwin попытается получить информацию о владельцах файла (пользователе и группе) из Windows. Пока я использовал машину под управлением Windows 98 с одним пользователем, все файлы принадлежали мне (bjohnson) с указанием в качестве группы "unknown". Это устанавливало полномочия для всех Windows-директорий и исполняемых файлов на значение 755 (чтение и выполнение для всех, запись только для владельца) и устанавливала всем файлам Windows полномочия 644 (чтение для всех, запись только для владельца). Выполнение команды chmod для Windows-файлов игнорируется.

Оригинал: How to Compile Linux Programs Under Windows with Cygwin
Автор: Gary Sims
Дата публикации: 12 июня 2014 г.
Перевод: Н.Ромоданов
Дата перевода: июль 2014 г.

Windows и Linux являются двумя очень разными системами и поэтому часто непросто портировать программы, написанные для одной из них на другую систему, особенно когда дело касается программ с графическим интерфейсом. Хотя есть много различных кросс-платформенных библиотек и пакетов SDK, нативные программы, написанные без учета портируемости, портировать довольно трудно.

Когда дело касается компиляции и запуска программ, написанных для Linux, в Windows, есть решение, известное как Cygwin. Проект Cygwin представляет собой набор наиболее распространенных инструментов и компиляторов (включая оболочки Bash и цепочку компиляторов GNU) для Windows. В его состав также входит библиотека, с помощью которой реализован слой совместимости, поэтому можно компилировать программы, в которых вызываются интерфейсы API, специфические для Linux. Cygwin не является эмулятором или виртуальной машиной, и он не позволяет двоичным файлам Linux работать на Windows без их предварительной перекомпиляции.

Скачайте исходные файлы с помощью команды wget:

Wget http://www.w3.org/Tools/HTML-XML-utils/html-xml-utils-6.7.tar.gz

Теперь распакуйте архивный файл:

Tar -zxf html-xml-utils-6.7.tar.gz

Cd html-xml-utils-6.7

Исходные файлы теперь находятся в каталоге html-xml-utils-6.7. Перейдите этот каталог:

Cd html-xml-utils-6.7

Прежде, чем файлы будут собраны, вам нужно будет запустить скрипт configure для генерации файла Makefile (файл инструкций по сборке), который предназначен для данной среды сборки. Это обычный шаг сборки на Linux (и в Cygwin) для построения пакетов из исходных кодов.

./configure

После того, как операция configure будет завершена, вы можете начать сборку с помощью команды make:

Сборка не прошла до конца из-за ошибки. Я был в нерешительности относильно того, что делать дальше. Я мог либо перейти на другой проект, либо сражаться с пакетом HTML-XML-utils. Я выбрал последнее, поскольку на нем показано, что не все гладко, когда вы пытаетесь компилировать программы Linux под Cygwin. Решение этой конкретной проблемы проста. Сообщение об ошибке показывает, что компоновщик не в состоянии найти библиотеку iconv. Беглый взгляд на команду компоновки показывает, что эта библиотека не указана. Быстрое и грубое решение представляет собой запуск команды вручную и задание инструкции компоновщику использовать библиотеку libconv. «Правильный» способ исправить эту ошибку состоит в анализе файла Makefile и т. д. с тем, чтобы выяснить, почему сборка не проходит.


Выполните следующую команду, указав в конце "-liconv":

Gcc -g -O2 -o hxindex.exe hxindex.o scan.o html.o openurl.o url.o heap.o class.o errexit.o connectsock.o types.o tree.o genid.o dtd.o headers.o dict.o fopencookie.o -liconv

После того, как файл hxindex.exe будет построен, можно переходить к остальной части сборки, набрав еще раз команду make. Когда работает команда make, она проверяет, что было собрано, а что — нет, а затем процесс сборки продолжается. Поскольку мы вручную собрали пакет hxindex.exe, команда make просто перенесет следующий двоичный файл в этот список.

Когда команда make завершить работу, у вас в каталоге html-xml-utils-6.7 будут все файлы.exe.

Если у вас при использовании Cygwin возникли проблемы, вы можете посмотреть часто задаваемые вопросы FAQ и документацию. Либо вы можете обратиться к спискам рассылки. Если у вас возникли проблемы с выполнением действий, описанных выше, то, пожалуйста, расскажите об этом в комментариях.

Данная статья предназначается для двух
типов людей: для тех, кто не разбирается в
Linux, но не может поставить его на своем компе
(причины разные бывают), либо для тех, кто
мало шарит в пингвинах 🙂 и не прочь
познакомиться с ними на "нейтральной"
территории, то бишь на Win98/NT.

На сайт уже описывали Cygwin как самый лучший
эмулятор Linux под вынь, но не было сказано
ничего про установку, настройку и баги Cygwin.
Тут я расскажу об этом 🙂 На самом деле, если
вдуматься, то Cygwin — это вовсе и не эмулятор, а
просто дистрибутив Linux, написанный под Win32 😉

Хватит рассусоливать… Идем на http://www.cygwin.com ,
берем оттудова прогу-инсталлялку setup.exe. Ей
мы будем тянуть уже прекомпиленные
бинарники (в exe-расширении), припоминаешь rpm?
😉 с сайта разработчика, либо с зеркала.
РЕКОМЕНДУЮ этой прогой только скачивать
эти файлы — ставить будем вручную, т.к. если
ставишь при помощи setup.exe, не работает gcc — фиг
знает, почему… Может, разработчики уже учли
этот баг, но мне пока об этом не известно…

Итак, качаем все главные бинарники (исходники
можно не качать), и несколько
дополнительных — кто ж откажется от wget, lynx,
BitchX, Python 🙂 А вот Perl можно не качать… У меня
был ActivePerl — продвинутый Perl-эмулятор. Скачать
можно с http://www.acriveperl.com .
Глюков не наблюдал 🙂 (я расскажу, как я
внедрил его в cygwin).

Настройка

И в файле "group" в той же папке "etc":
root:x:0:root

Если ты хочешь закодировать твой пароль, а
не "password", как я сделал в моем примере,
пиши Perl-скрипт

#!/usr/bin/perl
chomp ($pass=);
print $crypt ("SA",$pass);

Где, SA — салта, по которой будет криптоваться
пароль… можно ее сделать рандомной, но в
этой статье это будет оффтопиком.

Теперь редактируем файл "c:\cygwin\cygnus.bat" —
в нем меняем PATH, просто изменив путь к
эмулятору и путь к файлу login.exe. Запустим
файл.

Авторизуемся: в моем примере "root":"password".
Вот мы и попали в сам эмулятор. Мне не
понравилось приглашение ввода. Изменим его
— переменную PS1. Открываем (создаем) файл "c:\cygwin\etc\profile"
и пишем туда:

# /etc/profile
PROFILE_LOADED=1
PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/usr/local/sbin:$PATH"
unset DOSDRIVE
unset DOSDIR
unset TMPDIR
unset TMP
export HOSTNAME=test
PS1="[\u@$HOSTNAME \W]# "
LOGNAME=$USER
export PATH PS1 USER LOGNAME

Вот… Затем перелогинимся, и все будет на
месте и красиво 🙂 Приглашение будет: # — стандартое, линуховое 🙂

Все, первичная инсталляция закончена.
Переходим к установке сервисов 🙂

В стандартную поставку входит туева хуча
сервисов. Запускать их нужно таким образом:
/usr/sbin/inetd -R /usr/sbin/in.ftpd (пример для ftpd).

SSHD лучше поставить самому — встало на ура и
рулюсь я из SecureCRT, законнекченной на 127.0.0.1 —
совсем другой вид 🙂

Что касается работы с TCP/IP, недостатков я не
заметил 🙂 Все коннектится и работает как
надо…

А теперь несколько советов:

1) Доступ ко ВСЕМ дискам открыт. Так что будь
осторожен. К примеру, диск d: находится тут —
"/cygdrive/d".

2) Что касается Perl, создай симлинк на файл
Perl.exe, к примеру, так "ln -s /cygdrive/c/perl/bin/perl.exe
/usr/bin/perl"

3) Если у тебя по какой-то причине не
устанавливается линуховое приложение —
просто поправь Си-код. Быть может,
увенчается успехом.. (именно так я скомпилил
micq).

4) Следи за обновлениями Cygwin на сайте http://www.cygwin.com
— бинарники часто обновляются.

Вопросы? Пишите мне на E-Mail — постараюсь
помочь…