Я знаю про виртуальные машины и про то, что Microsoft что-то там реализовала с поддержкой ядра Linux. Виртуальная машина требует ресурсов (не подходит для совсем слабых компьютеров). Другие варианты тоже не особо простые.
Cygwin устанавливается как обычное портативное приложение. После установки на рабочий стол добавляется ярлык при клике по которому открывается консоль Linux. При том это не просто эмулятор — здесь самые настоящие программы Linux — то есть как они будут работать точно также и в настоящей ОС Linux.
У такого подхода есть ограничения — в первую очередь, нет доступа к железу (к Wi-Fi картами, сетевым картам, видеокарте). Также отсутствует как таковой менеджер пакетов — пакеты для установки можно выбрать в установщике Cygwin. То есть установить то, что не входит в стандартную поставку Linux (например, sqlmap, WPScan и т. д.) будет проблематично.
То есть с одной стороны использовать как полноценный Linux не получится. Но с другой стороны здесь предостаточно программ на знакомства с командной строкой. Например, cURL, grep, wget, sed, vim и многие другие.
Например, можно тренироваться в парсинге (в этом окружении будут работать практически все примеры из «Парсинг сайтов: азы, продвинутые техники, сложные случаи»).
Пример запуска команды в Cygwin:
curl -s https://hackware.ru/ | grep -E -o '<h3 class=ftitle>.*</h3>' | sed 's/<h3 class=ftitle>//' | sed 's/<\/h3>//'
В Cygwin имитирована структура директорий Linux, то есть вы также сможете начать знакомство с устройством этой операционной системы.
Для начала обучения работе в консоли Linux рекомендуется ознакомиться со статьями:
- Азы работы в командной строке Linux (часть 1)
- Азы работы в командной строке Linux (часть 2)
- Азы работы в командной строке Linux (часть 3)
- Азы работы в командной строке Linux (часть 4)
Как установить Cygwin
Перейдите на сайт https://www.cygwin.com/ , найдите там файл setup-x86_64.exe, скачайте и запустите его.
В процессе установки программа предложит выбрать зеркало для скачивания, папку для сохранения и программы для установки — всё это можно оставить без изменений.
После установки на рабочем столе появится ярлык.
SSH, Python, Vim, инструменты компиляции
Не надо воспринимать Cygwin как простую игрушку. Это весьма продвинутая среда, которая содержит множество инструментов Linux, в том числе для продвинутых пользователей
В Cygwin имеется полноценный SSH клиент, который позволяет подключаться к удалённым системам и даже генерировать SSH ключи. То есть вы можете использовать Cygwin для подключения к вашим удалённым серверам или другим системам Linux — Cygwin может заменить сторонние клиенты SSH, которые не всегда удобны
В Cygwin уже присутствует Python — вы можете начать осваивать данный язык без установки в Windows.
Консольный текстовый редактор, например, Vim — обязательный инструмент при редактировании конфигураций на удалённых системах — здесь вы можете в спокойной обстановке начать с ним знакомство.
Имеется Git — обновления своих репозиториев Git, либо можно использовать просто для скачивания (клонирования) репозиториев других разработчиков.
Совсем продвинутые пользователи могут даже воспользоваться инструментами компиляции.
В пакетах можно увидеть PHP, веб-сервер и многое другое.
Итак
Cygwin — это отличный вариант начать знакомство с Linux. Работает даже на слабых компьютерах и поддерживает очень многие возможности ОС Linux.
В этой теме будем рассматривать простые и сложные примеры использовании Cygwin, в том числе компиляцию и установку инструментов.
Как получить доступ к дискам в Cygwin
Если при установке Cygwin вы оставили путь по умолчанию, то Cygwin храниться в папке C:\cygwin64. Именно эта папка является для Cygwin корнем файловой системы выше которой подняться невозможно.
В ОС Linux другие диски (если они есть) подключаются в выбранные точки монтирования ниже по дереву файловой системы. То есть в Cygwin можно просматривать список файлов, создавать новые файлы, редактировать и удалять существующие файлы на всех дисках ОС Windows (если позволяют права записи). Но нужно знать, куда они смонтированы.
Чтобы просмотреть список физических дисков в системе:
ls -l /dev/s*
Пример вывода:
brw-rw-rw- 2 MiAl Отсутствует 11, 0 окт 14 10:23 /dev/scd0
brw-rw-rw- 1 MiAl Отсутствует 8, 0 окт 14 10:23 /dev/sda
brw-rw-rw- 1 MiAl Отсутствует 8, 1 окт 14 10:23 /dev/sda1
brw-rw-rw- 1 MiAl Отсутствует 8, 2 окт 14 10:23 /dev/sda2
brw-rw-rw- 1 MiAl Отсутствует 8, 3 окт 14 10:23 /dev/sda3
brw-rw-rw- 1 MiAl Отсутствует 8, 4 окт 14 10:23 /dev/sda4
brw-rw-rw- 2 MiAl Отсутствует 11, 0 окт 14 10:23 /dev/sr0
lrwxrwxrwx 1 MiAl Отсутствует 15 июл 12 23:41 /dev/stderr -> /proc/self/fd/2
lrwxrwxrwx 1 MiAl Отсутствует 15 июл 12 23:41 /dev/stdin -> /proc/self/fd/0
lrwxrwxrwx 1 MiAl Отсутствует 15 июл 12 23:41 /dev/stdout -> /proc/self/fd/1
Как можно понять из предыдущего вывода, диск /dev/sda разделён на четыре раздела: /dev/sda1, /dev/sda2, /dev/sda3 и /dev/sda4.
Но здесь размещены диски как устройства — то есть к этим устройствам в Linux можно обращаться при форматировании, создании и удалении томов (возможно, Cygwin не может взаимодействовать с дисками на таком уровне). Для доступа к файлам дисков, их нужно смонтировать, то есть подключить к дереву файловой системы (подробности смотрите в статье «Структура директорий Linux. Важные файлы Linux»).
Чтобы просмотреть информацию о смонтированных дисках и точках монтирования, выполним команду:
mount
Пример вывода:
C:/cygwin64/bin on /usr/bin type ntfs (binary,auto)
C:/cygwin64/lib on /usr/lib type ntfs (binary,auto)
C:/cygwin64 on / type ntfs (binary,auto)
C: on /cygdrive/c type ntfs (binary,posix=0,user,noumount,auto)
Z: on /cygdrive/z type vboxsharedfolderfs (binary,posix=0,user,noumount,auto)
Из этой информации следует, что диск C смонтирован в директорию /cygdrive/c. Диск Z: (это сетевой диск) смонтирован в директорию /cygdrive/z.
Запись C:/cygwin64 on / означает, что в качестве корневой файловой системы (/) смонтирована папка C:/cygwin64.
Чтобы увидеть все диски системы, включая сетевые и включая флешки и другие внешние диски выполните команду:
ls -l /cygdrive/
Итак, к любому диску в Windows из Cygwin можно получить доступ через папку /cygdrive/. К примеру, для просмотра файлов и папок на диске C:
ls -l /cygdrive/c
Как установить пакеты (программы) в Cygwin
Рассмотрим ситуацию, как в Cygwin установить дополнительные пакеты
Рассмотрим на примере: нам нужно установить ряд зависимостей, а именно следующие пакеты (они нужны для компиляции):
- libssl-devel
- ibbz2-devel
- libgmp-devel
- zlib-devel
- libOpenCL-devel
- libcrypt-devel
Это можно сделать двумя разными способами.
Первый способ установки программ в Cygwin
Во-первых, вы можете запустить установщик ещё раз, и на этапе выбора пакетов переключитесь в список «Full», введите имя пакета и дважды кликните на слово «Skip»:
Чтобы вместо него появился номер версии:
Сразу после этого введите имя второго пакета (первый пакет как бы пропадёт — не надо об этом беспокоится), кликните на слово «Skip».
Повторите это для всех пакетов.
Когда закончите, очистите поле поиска и переключитесь на список «Pending» чтобы увидеть список пакетов для установки:
Нажмите далее и завершите установку выбранных пакетов.
Второй способ установки программ в Cygwin
Возможно, вам больше понравится другой способ: переместите установочный файл setup-x86_64.exe в папку C:\cygwin64\ и затем откройте командную строку Windows (PowerShell) и просто выполните команду вида:
C:\cygwin64\setup-x86_64.exe -q -P ПАКЕТ1 -P ПАКЕТ2 -P ПАКЕТ3
К примеру, для моего примера по установке шести пакетов команда выглядит так:
C:\cygwin64\setup-x86_64.exe -q -P libssl-devel -P libbz2-devel -P libgmp-devel -P zlib-devel -P libOpenCL-devel -P libcrypt-devel
Сразу после запуска команды начнётся скачивание и установка требуемых пакетов CygWin.
Выберите любой из этих способов.
apt-cyg — apt для Cygwin
Как установить apt-cyg
Кроме показанного выше способа установки пакетов в Cygwin с помощью установщика самого Cygwin, имеется аналог программы apt (apt-get) для Cygwin, он называется apt-cyg.
Чтобы установить apt-cyg выполните следующие команды:
wget https://raw.githubusercontent.com/transcode-open/apt-cyg/master/apt-cyg install apt-cyg /bin
Если появится ошибка
-bash: wget: command not found
то сделайте так:
curl https://raw.githubusercontent.com/transcode-open/apt-cyg/master/apt-cyg > apt-cyg install apt-cyg /bin
Для нормальной работы apt-cyg нужны пакеты lynx и wget. Если они у вас отсутствуют, то может потребоваться установить их обычным способом, с помощью установщика Cygwin.
Теперь для установки новых пакетов вы можете использовать команду вида:
apt-cyg install ПАКЕТ
Например:
apt-cyg install libxml2
Справка по команде apt-cyg
НАЗВАНИЕ
apt-cyg — утилита управления пакетами
ИСПОЛЬЗОВАНИЕ
apt-cyg [операция] [опции] [цели]
ОПИСАНИЕ
apt-cyg — это утилита управления пакетами, которая отслеживает установленные пакеты в системе Cygwin. Вызов apt-cyg включает в себя указание операции с любыми потенциальными параметрами и целями для работы. Целью обычно является имя пакета, имя файла, URL-адрес или строка поиска. Цели могут быть предоставлены как аргументы командной строки.
ОПЕРАЦИИ
install
Установить пакет(ы).
remove
Удалить пакет(ы) из системы.
update
Загрузить новую копию главного списка пакетов (setup.ini) с сервера, определённого в setup.rc.
download
Получить пакет(ы) с сервера, но ничего не устанавливать/не обновлять.
show
Показать информацию о данном пакете(ах).
depends
Создать дерево зависимостей для пакета.
rdepends
Создать дерево пакетов, зависящих от названного пакета.
list
Найти в каждом локально установленном пакете имена, соответствующие регулярному выражению. Если в командной строке не указаны имена пакетов, будут опрошены все установленные пакеты.
listall
Будет искать каждый пакет в главном списке пакетов (setup.ini) на предмет имён, соответствующих регулярному выражению.
category
Отобразить все пакеты, входящие в указанную категорию.
listfiles
Список всех файлов, принадлежащих данному пакету. В командной строке можно указать несколько пакетов.
search
Найти загруженные пакеты, которым принадлежат указанные файлы. Путь может быть относительным или абсолютным, можно указать один или несколько файлов.
searchall
Поиск по cygwin.com, чтобы получить информацию о файлах о пакетах. Предоставленная цель считается именем файла, и поисковая система вернёт пакет(ы), содержащий этот файл.
mirror
Установить зеркало; полный URL-адрес места, где можно найти базу данных, пакеты и подписи для этого репозитория. Если URL-адрес не указан, отобразит текущее зеркало.
cache
Установит каталог кэша пакетов. Если файл не найден в каталоге кеша, он будет загружен. Принимаются пути в формах Unix и Windows, а также абсолютные или обычные пути. Если каталог не указан, отобразить текущий кеш.
ОПЦИИ
--nodeps
Укажите этот параметр, чтобы пропустить все проверки зависимостей.
--version
Вывести версию и выйти.
Ошибка «apt-cyg: command not found»
Если при запуске
apt-cyg
Вы получили ошибку
-bash: apt-cyg: command not found
то это означает, что вам нужно установить скрипт apt-cyg как это показано в начале данного поста.
Как обновить Cygwin
Обновление пакетов Cygwin выполняется также, как и установка.
Для обновления всех компонентов Cygwin и установленных пакетов, перейдите на сайт https://www.cygwin.com/ , найдите там файл setup-x86_64.exe, скачайте и запустите его.
Далее следуйте всех шагам установщика, при завершении его работы, Cygwin будет обновлён.
Как из Cygwin запустить программу в Windows
С помощью утилиты cygstart вы можете запустить программу в Windows прямо из Cygwin:
cygstart notepad
Если запускаемая программа не включена в PATH, то вам нужно указать полный путь до неё.
При желании, вы можете передать аргументы в запускаемую программу, например:
cygstart notepad C:\file.txt
Как конвертировать пути Windows и UNIX
С помощью утилиты cygpath вы можете конвертировать пути Windows и UNIX между собой.
Например:
Путь в формате Windows с указанием относительного пути до файла:
cygpath --windows ~/.bashrc C:\cygwin64\home\MiAl\.bashrc
Путь в формате Linux для файла в смешанной записи:
cygpath --unix C:/cygwin/bin/ls.exe /cygdrive/c/cygwin/bin/ls.exe
Путь до файла в директории Cygwin в формате Linux с указанием абсолютного пути до файла:
cygpath --unix C:\\cygwin\\bin\\ls.exe /cygdrive/c/cygwin/bin/ls.exe
Обратите внимание, что bash интерпретирует обратную косую черту «\» как escape-символ (экранирование), поэтому вы должны ввести его дважды в оболочке bash, если хотите, чтобы он распознавался как буквальная обратная косая черта.
Вывод в смешанной записи:
cygpath --mixed ~/.bashrc C:/cygwin64/home/MiAl/.bashrc
Чтобы показать путь до директории Desktop и выйти:
cygpath -D /cygdrive/c/Users/MiAl/Desktop
Чтобы показать путь до директории Profiles и выйти:
cygpath -H /cygdrive/c/Users
Чтобы показать путь до директории My Documents и выйти:
cygpath -O /cygdrive/c/Users/MiAl/Documents
Чтобы показать путь до директории Programs в Start Menu и выйти:
cygpath -P /cygdrive/c/Users/MiAl/AppData/Roaming/Microsoft/Windows/Start Menu/Programs
Чтобы показать путь до системной директории и выйти:
cygpath -S /cygdrive/c/Windows/System32
Чтобы показать путь до директории Windows и выйти:
cygpath -W /cygdrive/c/Windows
Вывод системной информации о Cygwin (cygcheck)
Утилита cygcheck выводит системную информацию, проверяет установленные пакеты или делает запросы к базе данных пакетов.
Использование:
cygcheck [-v] [-h] PROGRAM cygcheck -c [-d] [PACKAGE] cygcheck -s [-r] [-v] [-h] cygcheck -k cygcheck -f FILE [FILE]... cygcheck -l [PACKAGE]... cygcheck -p REGEXP cygcheck --delete-orphaned-installation-keys cygcheck -h
Требуется хотя бы одна опция команды или ПРОГРАММА, как показано выше.
Опции:
ПРОГРАММА список зависимостей библиотеки (DLL) ПРОГРАММЫ -c, --check-setup показать установленную версию ПАКЕТА и проверить целостность (или для всех установленных пакетов, если не указан) -d, --dump-only просто перечислить пакеты, не проверять (с -c) -s, --sysinfo производить диагностическую информацию о системе (подразумевает -c) -r, --registry также просканировать реестр на предмет настроек Cygwin (с -s) -k, --keycheck выполнить сеанс проверки клавиатуры (должен запускаться только с простой консоли, а не с pty/rxvt/xterm) -f, --find-package найти пакет, которому принадлежит ФАЙЛ -l, --list-package перечислить содержимое ПАКЕТА (или всех пакетов, если они не указаны) -p, --package-query поиск REGEXP во всем репозитории пакетов cygwin.com (требуется подключение к Интернету) --delete-orphaned-installation-keys Удалите установочные ключи старых, теперь неиспользуемых установок из реестра. Требуется право вносить изменения в реестр. -v, --verbose производить более подробный вывод -h, --help аннотировать вывод пояснительными комментариями, если он задан другой командой, в противном случае распечатать эту справку -V, --version распечатать версию cygcheck и выйти
Примечание: -c, -f и -l сообщают только об установленных в данный момент пакетах. Вместо этого для поиска во всех официальных пакетах Cygwin используйте -p. Параметр -p REGEXP сопоставляет имена пакетов, описания и имена файлов/путей во всех пакетах.
Зеркала репозиториев Cygwin
Cygwin имеет ряд зеркал FTP серверов для своих репозиториев. Полный список актуальных зеркал вы найдёте по ссылке https://cygwin.com/mirrors.html . Список автоматически обновляется и поддерживается.
Чтобы вывести текущее зеркало, выполните команду:
apt-cyg mirror
Чтобы установить новое зеркало, выполните команду вида:
apt-cyg mirror URL
Например:
apt-cyg mirror https://cygwin.cu.be/
32-битный Cygwin
На первый взгляд, на главной странице Cygwin имеется только один установщик, это setup-x86_64.exe — установщик 64-битной версии. На самом деле, внизу страницы всё же присутствует и установщик 32-битного Cygwin, но авторы настоятельно не рекомендуют его использовать, вот что сказано об этом на официальном сайте:
Адресное пространство — очень ограничивающий фактор для Cygwin. В наши дни полноценный 32-битный дистрибутив Cygwin больше невозможен и, по всей вероятности, выйдет из строя в случайных местах из-за проблемы с системным вызовом fork(2).
Поэтому мы рекомендуем использовать 32-битный Cygwin только в ограниченных сценариях, с установленным минимумом необходимых пакетов и только в том случае, если вместо этого нет возможности запустить 64-битный Cygwin.
Вы были предупреждены. Если вы все еще уверены, что вам действительно нужен 32-битный Cygwin, и нет никакого способа обойтись без него, вы можете запустить установщик setup-x86.exe.
Запуск программ с графическим интерфейсом в Cygwin
В Cygwin возможно запускать программы с графическим интерфейсом, а также менеджеры окон и даже графические окружения рабочего стола.
Пакеты Cygwin/X в категории X11.
- xorg-server (требуется, X сервер Cygwin/X)
- xinit (требуется, скрипты для запуска X сервера: xinit, startx, startwin (и ссылки на Start Menu для его запуска), startxdmcp.bat )
- xorg-docs (опциональный, man страницы)
- xlaunch (опциональный, мастер для запуска X сессий)
Пример запуска программы с графическим интерфейсом в Cygwin.
Установите apt-cyg, если не сделали это ранее:
curl https://raw.githubusercontent.com/transcode-open/apt-cyg/master/apt-cyg > apt-cyg install apt-cyg /bin
Установите X сервер и необходимый скрипты:
apt-cyg install xorg-server xinit
Запустите X сервер:
startxwin &
Нажмите Enter, чтобы увидеть приглашение командной строки.
Установите значение переменной DISPLAY:
export DISPLAY=:0.0
Запустите желаемую программу с графическим интерфейсом:
~/johnny/johnny
Смотрите также: Chapter 3. Using Cygwin/X
Ошибка «Could not connect to any X display.» в Cygwin
Если при запуске программы с графическим интерфейсом вы получили ошибку вроде следующей:
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-MiAl'
qt.qpa.screen: QXcbConnection: Could not connect to display
Could not connect to any X display.
То она означает, что вы не запустили X сервер и/или не установили значение переменной DISPLAY. Для исправления ошибки, выполните шаги, показанные выше.
Как перезагрузить Cygwin
Вы можете обратить внимание, что даже после закрытия консоли, а затем её открытия, некоторые процессы, запущенные в Cygwin, продолжают работать. Вы можете проверить их с помощью команд
ps -e
Или
top
В Менеджере задач Windows вы можете увидеть процесс conhost.exe, принадлежащий Cygwin, даже после закрытия всех терминалов.
Программы, запущенные с X сервером, также не отключаются при закрытии терминалов Cygwin.
Поскольку Cygwin не является полным ядром Linux, некоторые мелкие вещи, такие как выключение машины, не будут работать так, как на Linux.
Единственные способы, которыми удаётся закрыть эти процессы — перезагрузить Windows или снять задачи вручную.