.

Windows, Linux, PowerShell, WSL, Java. Кое-что об этом.

Виктор Кон, . . . 18-03-2025, . . . kohnvict.narod.ru

Введение в тему

В этой статье я расскажу как я изучал все то, о чем написано в названии статьи, зачем мне это надо, и вообще о новых возможностях, которые появляются так быстро, что сложно успевать за ними. Итак с самого начала. На языке программирования Java (далее джава) я начал работать в 2003 году. Я выбрал этот язык только потому, что он мог работать сразу во всех операционных системах и в интернете. И при этом был достаточно быстрым и с большими возможностями. В то время он был впереди всех по популярности и такой выбор странным не казался. Но у меня был и свой собственный интерес. До этого момента мне приходилось работать в системе Юникс, а к системе Виндовс, в которой я работал, я относился не очень приветливо и старался ей пользоваться по минимуму.

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

А я все годы продолжал работать на своем языке для Десктопа, дописывать свой интерпретатор и все это происходило в системе Виндовс. Хотелось попробовать программу и в системе Линукс, но и руки не доходили, и прибора не было. И вдруг совершенно случайно я узнал, что в моей Виндовс-10 появилась новая программа (Windows PowerShell). А когда я стал разбираться что же это такое, то оказалось, что у меня на компьютере уже давно стоит программа (WSL), про которую я совсем не знал. Ну, Виндовс периодически обновляется, а мне как бы все равно, а делаю что делал и все. А оказалось, что мне в руки дали такой инструмент, которого я давно ждал. Потому что программа (WSL) внутри (Windows PowerShell) позволяет работать в системе Линукс, оставаясь в системе Виндовс. То есть я могу реально проверить работу своей джава программы (vkacl) -- интерпретатора моего языка программирования -- в системе Линукс.

Первые шаги

И я взялся за работу. Сразу на ум лезут слова песни Высоцкого -- и мангусты взялись за работу, без отгулов и без выходных, выходили они на охоту не щадя ни себя, ни родных. Увы, не только мангусты ... Если кому это интересно, то в этой статье он найдет самый быстрый путь как все это установить и попробовать. Я работаю в Виндовс-10, так мне продали ноутбук, и я никогда не меняю системы. Программу (Windows PowerShell) можно найти по клавишам [Win]+[X] или по клику правой кнопки мыши, если установить курсор мыши на иконке Пуск. Дальше надо понять какие дистрибутивы Линукс у вас уже есть возможность установить. Для этого надо набрать команду

PS C:\Users\VK> wsl -list -online

Тут слева от символа > то, что пишет терминал, а справа -- та команда, которую надо напечатать. В ответ вам напишут список дистрибутивов Линукс. У меня в списке был дистрибутив ubuntu, и он устанавливается по умолчанию. То есть его даже можно не указывать. Но полная команда для установки Линукс выглядит так

PS C:\Users\VK> wsl --install -d ubuntu

Можно еще и версию указать, но лучше не стоит. Тогда установится самая последняя версия. И все -- Линукс в варианте ubuntu у вас установился. Чтобы проверить, что все правильно, можно использовать команду

PS C:\Users\VK> wsl -l -v

В моем случае ответ был такой
. . . . . NAME . . . . . STATE . . . . . VERSION
.* . . . UBUNTU . . . STOPPED . . . 2
Запись указывает, что установлен вариант Линукс, который используется по умолчанию (отмечен символом *) и версия 2. То есть этот вариант можно запускать командой wsl без указания дистрибутива. А если их несколько (и такое возможно), то надо писать ( wsl -d debian ). Если захочется этот вариант сделать по умолчанию, то меняем -d на -s. А если есть несколько версий дистрибутива, то пишем вместо -d так -d -v и указываем вариант и его версию. Но это уже лишнее, и нужно только для профессионалов. Хотя мне как раз может пригодится чтобы узнать как моя программа работает в разных версиях Линукс.

Итак, можно начинать работать в Линукс. Как и в Виндовс, первый вход в систему начинается с того, что нужно указать имя пользователя и пароль. И тут может быть сюрприз. При вводе пароля он не показывается. Кроме того, его надо вводить дважды одинаково. И первый пользователь сразу становится администратором. Если забыли пароль или хотите его изменить, то надо набрать команду ( wsl -d ubuntu -u root ) и затем выполнить команду ( passwd ) и по требованию ввести новые имя пользователя и пароль, затем повторить пароль. После этого надо выйти из (wsl) по команде ( exit ). При повторном входе в систему через Power Shell по команде ( wsl ) имя и пароль вводить не надо, все работает автоматически. А если нужно поменять пользователя, то команда такая ( wsl -u ). Параметры системы легко запоминаются (-d == distributive) (-s == set) (-v == version) (-u == user). При первом входе в систему каждый день дается подсказка. Ее можно отменить, но это мелкое дело.

А вообще принцип такой. Для входа в систему как администратор пока у вас нет аккаунта используем имя пользователя (root). А команды с приоритетом администратора надо начинать со слова (sudo). Помощь можно получить по команде ( man sudo_root ). Первый пользователь сразу становится администратором, и ему входить как root не обязательно, но sudo писать все равно надо. Выход из системы Линукс делается по команде ( exit ). Итак, мы вошли в систему Линукс. Тут все проще, чем в Виндовс, хотя многих пользователей это напрягает. Дело в том, что в системе ничего нет. В Виндовс с самого начала все есть и надо просто тыкать многочисленные кнопки. А в Линукс как раз все наоборот. Нет ничего. Все что есть -- это терминал, в котором вы уже находитесь и команды текстом.

И вот первым делом надо учить эти команды. Учить их реально полезно, но вовсе не обязательно. Потому что достаточно установить самую первую программу, и она всю работу сделает намного удобнее. Такой программой является программа Midnight Commander (mc). А что касается команд Линукс, то они точно такие же, как и в Юникс. Только Юникс -- это многопользовательская система для рабочих станций, а Линукс -- аналог Юникс для персоналок. У меня есть список команд, но я тут это приводить не буду, так как в интернете все есть, в том числе в виде pdf файла, который можно скачать и посмотреть. Более того, сейчас поисковик Яндекса включил ИИ, и на любой вопрос можно получить не только ссылки на статьи, где все написано, но и тут же -- внятный и разумный ответ о том, что и как надо делать. Это работает намного эффективнее.

Как работать с программой Midnight Commander (mc)

Прежде всего программу надо установить. Интересно, что при неправильной команде установки сама система подсказывает что надо делать. Для установки (mc) в Линукс ubuntu команда такая

<текст от Линукс> : <имя рабочей папки> $ sudo apt-get install mc

Тут команда написана после символа $, а перед ним идет указание на пользователя какой-то номер, потом двоеточие (:) и (очень плохим цветом) имя рабочей папки. И программа установится. Будет много текста от системы, но это можно не смотреть. После установки программа запускается по короткому имени, как mc, и все. Программа mc работает как Far или Тотал Commander в системе Виндовс. Главные клавиши от F1 до F10. Они подписаны. Можно выбирать файл, смотреть его (F3), редактировать (F4), уничтожать (F8), копировать (F5) и так далее. Работает мышка. Есть куча других команд, и вот это уже разумно изучить, потому что тут все более наглядно, видны файлы в двух каталогах.

Одно замечание полезно сделать сразу. Стандартно (mc) устанавливается с внешним редактором текстов. И при первом запуске спрашивает какой редактор делать как основной. Но внешние редакторы надо изучать. А чтобы перейти на внутренний редактор (который удобнее) надо нажать клавишу [F9], она активирует верхнее меню, затем перейти в раздел (Options), можно клавишей [о], затем в раздел конфигурации, можно клавишей [с], и поменять редактор на внутренний. И еще одно замечание по поводу работы с файлами. В системе (Windows PowerShell) файлы Виндовс и Линукс не различаются, файловая система едина. Линукс может использовать файлы Виндовс и наоборот. Но кодировка русских знаков в этих системах разная. Файлы с русским текстом, записанные в Виндовс, не видно в Линукс, и наоборот. Английские знаки одинаковые.

Так как программа (mc) работает с файлами, то следует сразу выучить, что файлы бывают разные. Бывают тексты, бывают программы и бывают командные файлы, которые содержат команды системы. В системе Виндовс такие файлы имеют расширение (.bat). В Линукс они могут иметь любое расширение, но чтобы было легче их распознавать принято давать им расширение (.sh). И интерпретаторов таких командных файлов тоже много. Одним из первых таких интерпретаторов была программа (bash). Для простых командных файлов она вполне годится.

Название программы -- это аббревиатура от каких-то слов, но это не так уж важно. Важно другое -- надо указывать где эта программа находится. Для определения ее места можно в терминале выполнить команду which bash. Она укажет адрес и его потом надо записать в первой строке командного файла после двух символов #! . Так в моем случае оказалось, что надо записывать #!/usr/bin/bash. Затем можно писать команды, например имя программы и ее аргументы. Обязательно в той системе в которой они будут работать, то есть в Линукс. При работе в программе (wsl) это замечание не лишнее. И набранный файл надо спасти. Пусть его имя будет (any.sh). А поле того, как файл создан, надо установить ему тип исполняемого файла. Для этого надо выполнить команду chmod u+x any.sh.

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

Полезно также знать, что в программе (mc) кроме очевидных операций, то еcть спасти (F2), смотреть (F3), редактировать (F4), копировать (F5), менять имя (F6), открыть папку (F7), уничтожить (F8), активировать меню (F9), выйти (F10) существует очень много других операций для формирования команды в командной строке. Так, клавиши (Ck+o) позволяют убрать или восстановить панели и открыть или закрыть диагностику терминала, клавиши (Ck+x) позволяют сформировать команду chmod на имя выбранного файла, клавиши (Ak+Ek) позволяют спустить имя файла на командную строку, клавиши (Ak+p) позволяют повторить предыдущую команду, клавиши (Ak+n) позволяют повторить следующую команду. Здесь Ck указывает на клавишу [Ctrl], Ak указывает на клавишу [Alt], Ek указывает на клавишу [Enter].

И все же программа (mc) сама ничего не делает. Она просто показывает файлы, их можно смотреть, можно записывать, но для того, чтобы пользоваться программами, их все равно надо устанавливать. Исходно в системе ничего нет. В интернете программ для Линукс очень много. Но их надо знать и надо уметь скачивать. Ну и надо знать где их искать. Лично у меня таких вопросов не возникало. Я как раз знал что мне надо. Мне нужна Джава. И вот этим я и занялся в первую очередь.

Как работать с программами на Джава

Прежде всего надо установить JDK. Я в интернете выяснил, что для этого разумно сначала выполнить команду
sudo apt-get upgrade. Дальше я пишу просто команды, которые надо самому печатать, то есть без сопроводительных текстов. Я выполнил эту команду, но что там происходило не понятно, так как текста было много. Затем предлагали выполнить команду
sudo apt-get update. Я сделал и это, опять было много текста, но опять не понятно. Где-то еще рекомендовали выполнить команду
sudo apt search openjdk. Она показала много самых разных сайтов, где что-то было про джаву. Наконец, на сайте
https://www.dmosk.ru/miniinstruktions.php?mini=openjdk-install
мне предложили два варианта. Первый -- просто запустить команду
sudo apt install default-jdk. Но у меня этот фокуc не прошел. Команда получила отказ. Второй -- сначала выполнить команду
sudo add-apt-repository ppa:linuxuprising/java и потом
sudo apt install openjdk-17-jdk. Я сделал так, и программа установилась.

Это на сегодня последняя версия джавы в Линукс. Стандартная команда java --version прошла нормально. Можно начинать работать. Я решил сразу использовать байт-код своей программы в Виндовс. И запустил команду
java -jar /mnt/c/_vk/_ACLp/aclp.jar. Тут важно отметить, что если в Линукс используются файды системы Виндовс, то адрес надо начинать с текста (/mnt/) затем буква диска и папки. Никаких знаков типа двоеточия не надо. JRE мне выдала ошибку в самом начале моего кода, причем точно указала на файл и строку в тексте моего кода. Затем я повторил то же самое с другим вариантом этой же программы -- та же ошибка в том же месте. Я попробовал третью программу
java -jar /mnt/c/_vk/_Programs/my/vkSM-p/vkSM.jar и эта программа запустилась. Но она копирует экран ноутбука в память, и вот для этой операции не оказалось драйверов. Вместо картинки экрана она показала черный квадрат. Диагностика была такая ( Сould not load native libraries for ScreencastHelper ).

Тогда я cтал смотреть что же я не так сделал со своей основной программой. И очень быстро сообразил, что моя программа просматривает файлы в папке, где она сама находится. То есть эта папка должна быть активной. А у меня было не так. Сначала надо выполнить команду cd /mnt/c/_vk/_ACLp и только после этого уже можно выполнять указанную выше команду. В таком варианте ошибки не было и программа запустилась. Работает она существенно медленнее, чем в Виндовс, и это можно понять. Ведь она работает в системе, которая сидит в чужой системе, и на чужих файлах. Но мне просто интересно понять что в моей программе работает в системе Линукс, а что нет, и как это исправить. И при этом время не важно. Так как командные файлы я пока запускать не умею, то запускается вариант проигрывателя. Я попробовал запустить программу 31 (PTOE). И все сработало. Внешний вид и шрифты у программы хуже, чем в Виндовс, но это все можно настраивать, а можно и привыкнуть.

Интересная особенность состоит в том, что если джава программа на компьютере запущена в Виндовс, то в Линукс она уже не запускается. Чтобы она запустилась надо закрыть программу в Виндовс. Я также попробовал запустить программу из ( mc ). После того, как я перешел в папку программы, ( mc ) сразу запустился в этой папке. В ( mc ) клик на jar файле открывает его как zip архив. Но если в командной строке набрать ( java -jar aclp.jar ), то программа сразу запускается. Еще одна особенность состоит в том, что поскольку файлы общие для обоих систем, то манипулировать с ними можно в обоих системах одновременно. И все отслеживается. Я переименовал файл (program.acl) в программе Q-Dir так, что просто убрал букву m, а потом повторил предыдущую команду, добавив аргумент 0, и запустился вариант с окном, а в нем запустился мой большой редактор текстов. Снова шрифты оказались не очень, ведь надо их настраивать на Линукс. Это наверняка можно сделать и все исправить.

В целом вывод такой, что теперь я имею инструмент для проверки работы своей программы в Линукс без посторонней помощи. И не нужно покупать еще один компьютер, устанавливать систему Линукс и переносить файлы туда и сюда. Так что новая возможность системы Виндовс мне реально пригодилась.

Как установить браузер и как с ним работать

Моя программа на языке vkacl для интерпретатора на языке Джава очень часто взаимодействует с браузером, потому что она создает сайты и pdf файлы, которые затем показывает браузер. В системе Виндовс я автоматически формирую командный файл и запускаю его. В системе Линукс я пока только готовлю файлы, а смотреть их надо в браузере независимо. Фактически они для браузера и создаются. И я запросто могу их смотреть в Виндовс даже в том случае, когда файлы созданы в системе Линукс. Но интересно как это можно видеть в самой системе Линукс. То есть нужно установить третью программу -- браузер.

Делается это таким же способом, как и с программой mc. Надо выполнить в командной строке такую команду

<текст от Линукс> : <имя рабочей папки> $ sudo apt-get install chromium

Браузеров в Линукс не так уж и мало. Но максимально похожий на Яндекс браузер как раз chromium. У меня эта команда сработала нормально, но работала долго. Перед работой сказала, что понадобится еще порядка 250 Мб памяти, но это давно уже не проблема. После установки браузер запускается из командной строки просто по названию. А файлы с расширением htm в каталоге Миднайт Коммандера запускаются в браузере точно так же, как и в Виндовс, то есть при простом клике на имени файла.

Я прежде всего решил посмотреть как выглядит мой сайт в этом браузере Линукса. И был весьма удивлен тем, что две картинки не показались. Я запустил свой сайт в браузере Гугл Хром в Виндовс и все нормально. Все-таки оказалось, что системы разные. И это очень странно. Главная проблема в моем Линуксе в том, что нет шрифтов. Их, вероятно, тоже надо как--то скачивать. Есть только один шрифт пока с неизвестным мне названием. Но браузер должен иметь свои шрифты, это ппока неясный вопрос. Я решил расширить область, в которую мои картинки вписываются. И это помогло. В системе Виндовс ничего не изменилось, а в Линукс все тало правильно, картинки появились. Оказалось, что полезно все же проверять свои сайты сразу в двух системах. Теперь вроде как набор программ полный.

Как решать другие проблемы

И все же проблемы остались. Вся работа в Линуксе все равно идет через терминал и команды, а это значит, что нет окон. В системе Виндовс они есть, а в Линуксе вероятно они есть в графической оболочке Гном, но если работать в режиме командной строки, то программы запускаются по очереди. Нельзя запустить вторую программу, пока не закончит первая. Наверно можно открыть два окна программы PowerShell, но непонятно как это будет работать, и это все равно Виндовс. То есть окна Виндовс как бы независимы, можно открыть новое не закрывая старое. И я это использовал в своей программе, то еть готовил командный файл, записывал его и потом запускал.

В языке джава еть возможность и сразу запускать команды ОС, не формируя командные файлы. Надо попробовать запускать хотя бы программу Миднайт Коммандера в Линукс и Тотал коммандера или Far в Виндовс. Можно и командные файлы запускать, но с этим есть какие-то непонятные проблемы. Вообще говоря, можно и по очереди запускать программы. Сначала полностью отработает программа vkacl, потом из нее можно выйти и делать все, что необходимо дальше. Например смотреть сайты, которые были созданы. Про графическую оболочку надо еще читать. В принципе лично мне это не так необходимо. Гораздо интереснее узнать как установить шрифты. Те, кто постоянно работают в Линукс все это имеют изначально.

А мне как раз было интересно сделать программу, которая не треюует других программ и все делает самостоятельно. Такая цель пока не достигнута. Так что надо продолжать работу. О том как будут развиваться события я напишу позднее. А пока все.

.


.