Швидкість Linux на Windows 10 - Микола Громов
- Вступ
- спойлер
- Згадувані в статті файли
- Основи використання терміналу Ubuntu в Windows 10
- Як запускати Sublime Text з консолі Ubuntu
- Налаштування консолі Ubuntu
- Перехід до потрібної директорії при старті
- аліаси
- Дивна проблема з аліасами
- Показ git-гілки в командному рядку
- дрібні поліпшення
- помічені баги
- Як заходити на сервер, запущений в WSL, зі сторонніх пристроїв в одній локальній мережі
- Комфортне використання з Cmder
- замість висновку
Стаття про налаштування функціональності і зовнішнього вигляду bash-терміналу Windows Subsystem for Linux (WSL) в Windows 10.
Вступ
Я постійно використовую термінал для роботи з git і автоматизації збирання проектів (верстка / фронтенд: компіляція pug і scss, обробка зображень, транспіляція js ...). На моєму робочому комп'ютері стоїть Windows 10, а на ноутбуці - OSX і мені хочеться використовувати одні і ті ж консольні команди на обох системах, тому я використав GitBash (термінал, який встановлюється разом з Git) всередині емулятора (Cmder) . Така зв'язка працювала помітно повільніше терміналу на OSX, тому я був натхнений новиною «У Windows 10 вбудували підсистему Linux» (Березень 2016 г.), але тоді, в 2016 році, її використання розчарувало: не можна було запускати з bash-терміналу програми Windows, підсистема не визначає зміна файлу, якщо зміна була зроблена з Windows. Зараз ці проблеми вирішені.
спойлер
Головний виграш для мене - швидкість. У моєму стартовому репозиторії є трудомістке завдання повного складання проекту (компіляція, транспіляція, спрайт, шрифти, картинки ...), з Gitbash вона займає 17 секунд, з bash-терміналом WSL - 10 секунд.
Згадувані в статті файли
Установка Windows Subsystem for Linux (WSL)
У мережі повно статей з інструкціями (здебільшого, застарілих). користуйтеся офіційною інструкцією з docs.microsoft.com і все вийде. Я встановив Ubuntu, тому що маю невеликий досвід її використання.
Після успішної установки можна запустити термінал підсистеми Linux командою bash в cmd.exe (або PowerShell) або кліком по іконці в меню «Пуск».

Основи використання терміналу Ubuntu в Windows 10
Це підсистема всередині Windows, щоб використовувати nodeJS і git, потрібно поставити їх у підсистему (навіть якщо вони вже встановлені в Windows). Я вибрав варіант з Ubuntu, тому при установці nodejs користувався цією інструкцією , А git встановив командою sudo apt-get install git (не забудьте вказати git-у своє ім'я користувача та email).
Можна запускати додатки Windows. Спробуйте notepad.exe - запуститься Windows-блокнот.
Диски Windows розташовані в / mnt /. Спробуйте cd / mnt / c / && ls для переходу до диску С: / і виведення його кореневих директорій (за замовчуванням висновок виглядає сумно, але це налаштовується).
Директорія користувача розташована в ~ (cd ~ для переходячи в неї). Просто нагадую.
В Linux-системах великі і малі символи - різні символи. При використанні автодоповнення (Tab) важливо вводити символи в правильному регістрі.
Директорія користувача підсистеми Linux фізично у мене розташувалася по досить довгому шляху (див. Нижче). Сегмент nicothin - ім'я користувача системи (як на початку шляху (Windows), так і в кінці (Ubuntu)).
c: \ Users \ nicothin \ AppData \ Local \ Packages \ CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc \ LocalState \ rootfs \ home \ nicothin \
Якщо редагувати файли Linux-підсистеми з Windows, то Linux в деяких випадках не зможе отримати до них доступ (не вистачить прав). Після такого редагування потрібно в bash-терміналі підсистеми виконати щось на зразок chmod 777 ~ / .bashrc (де ~ / .bashrc - редагований з Windows файл) і перезапустити термінал. Або можна використовувати команду source ~ / .bashrc (вкажіть редагований файл) для застосування внесених змін.
Як запускати Sublime Text з консолі Ubuntu
Якщо використовуєте Sublime Text, додайте шлях до subl.exe в PATH в Windows, щоб по команді в терміналі subl.exe запускався Sublime Text:
- У провіднику зробіть правий клік на Цей комп'ютер, виберіть Властивості, потім Додаткові параметри системи.
- На вкладці Додатково натисніть кнопку Змінні середовища.
- Зробіть подвійний клік по Path для переходу до її редагування.
- Натисніть кнопку Створити і додайте шлях до subl.exe.
У моєму випадку це c: \ Program Files \ Sublime Text 3 \. - Перезапустіть термінал.
Вконтакте ВКонтакте вконтакте Вконтакте

Налаштування консолі Ubuntu
кольори
На жаль, відразу після установки консоль (особливо висновок команди ls) виглядає «бородато» і «носить светр».

Можна додати файл з настройками колірного оформлення (touch ~ / .dircolors для створення файлу) з цим вмістом .
Вміст зручно додавати з Windows, але тоді після збереження файлу в bash-терміналі виконайте chmod 777 ~ / .dircolors і перезапустіть термінал.

Перехід до потрібної директорії при старті
Якщо при запуску терміналу хочеться потрапляти в директорію проектів, можна вписати в самому верху ~ / .bashrc команду cd / mnt / d / projects / (вкажіть шлях до потрібної директорії).
аліаси
Додамо файл (touch ~ / .bash_aliases) c цим вмістом і перезапустити bash-термінал.
Тепер по команді subl. відкриється Sublime Text (поточна папка буде показана як проект), а по команді на кшталт subl filename.txt можна швидко відкривати файли.
Дивна проблема з аліасами
Я налаштовував bash-термінал на двох домашніх комп'ютерах з Windows 10 і на одному з них після додавання файлу термінал при рестарт виводив 4 повідомлення: command not found. Через що - я так і не зрозумів (права доступу були і власник файлу - я), але знайшов рядки в ~ / .bashrc, які до цього призводили. Це було підключення файлу з аліасами:
if \ [-f ~ / .bash_aliases \]; then. ~ / .Bash_aliases fi
Вирішив проблему, закоментувавши ці рядки і вписавши аліаси прямо в ~ / .bashrc (в самому низу).
Показ git-гілки в командному рядку
Крок 1: додамо на початку ~ / .bashrc функцію для показу гілки:
git_branch () {git branch 2> / dev / null | sed -e '/ ^ [^ *] / d' -e 's / * \ (. * \) / (\ 1) /'}
Крок 2: визначимо змінну, що відповідає за запрошення командного рядка, додамо в неї показ результату роботи цієї функції (див. .bashrc ). Вийде щось на зразок:
if [ "$ color_prompt" = yes]; then PS1 = '$ {debian_chroot: + ($ debian_chroot)} \ [\ 033 [01; 32m \] \ u @ \ h \ [\ 033 [00m \]: \ [\ 033 [01; 34m \] \ w \ [\ 033 [00m \] \ e [32m $ (git_branch) \ e [0m \ $ 'else PS1 =' $ {debian_chroot: + ($ debian_chroot)} \ u @ \ h: \ w \ $ 'fi
дрібні поліпшення
Є досить багато дій в bash-терміналі, на які Windows 10 відреагує звуковим сигналом (натискання Backspace, коли вже нічого прати, наприклад). Щоб це відключити, створіть ~ / .inputrc з рядком set bell-style none.
Vim за замовчуванням показує досить темний текст, що на темному тлі виглядає погано. Можна створити ~ / .vimrc з рядком set background = dark, щоб текст став більш читабельним.
помічені баги
Працювати з буфером обміну за замовчуванням не комфортно (Ctrl + V, Shift + Insert не працюють, доводиться кликати (!!!) ПКМ по заголовку вікна і вибирати Змінити → Вставити). Вирішується використанням терміналу не самостійно, а всередині Cmder.
Кілька разів бачив дивний глюк відображення многострочной команди: неначе символи другий рядки не перенеслися, а друкуються в першому рядку. Рідко, не критично.
На одному з домашніх комп'ютерів працює збереження історії команд між сеансами, на іншому не працює (хоча права доступу і власник файлу ~ / .bash_history - активний користувач і збереження історії включено). Не критично.
Не працюють інструменти копіювання в буфер. Наприклад, при налаштуванні SSH для github.com, є інструкція для Linux:
sudo apt-get install xclip # Downloads and installs xclip. If you do not have `apt-get`, you might need to use another installer (like` yum`) xclip -sel clip <~ / .ssh / id_rsa.pub # Copies the contents of the id_rsa.pub file to your clipboard
Але її неможливо виконати, тому що xclip працювати не буде. Вирішується використанням віндовскій утиліти: clip.exe <~ / .ssh / id_rsa.pub
Після завантаження Windows іноді (було всього двічі) відмовляється працювати. Допомагає перезавантаження (це ж Windows).
Брандмауер Windows за замовчуванням не дає зайти на запущений всередині WSL сервер при запиті з іншого пристрою (запускаємо сервер розробки на робочому компі, відкриваємо його сторінки з телефону, що знаходиться в тій же локальній мережі). Як це лікувати - не розібрався, доводиться тимчасово відключати брандмауер.

Як заходити на сервер, запущений в WSL, зі сторонніх пристроїв в одній локальній мережі
Я пишу багато html-сторінок. У процесі роботи у мене запущений локальний сервер, який збирає розмітку, стилі, javascript, спрайт і т.п. Буває зручно запустити на основному комп'ютері сервер і зайти на нього за допомогою ноутбука, телефону, планшета (сервер доступний за IP, на зразок http://192.168.1.207:8080). Однак, вбудований в Windows 10 фаєрвол за замовчуванням блокує такі сполуки.
Щоб потрапити на такий сервер, потрібно додати правило для брандмауера:

- Знайти за допомогою пошуку «Брандмауер захисника Windows», відкрити, натиснути зліва «Додаткові параметри».
- У вікні Монітора брандмауера вибрати (зліва) «Правила для вхідних ...», натиснути «Створити правило» (праворуч).
- Вибрати «Для порту», натиснути «Далі».
- Вибрати «Певні локальні порти», ввести номер порту (мій локальний сервер працює на порту 8080, його я і ввів), натиснути «Далі».
- Вибрати «Дозволити підключення», натиснути «Далі», вибрати профілі (я вибрав все), «Далі».
- Ввести якесь ім'я, натиснути «Готово».
Після цього вийде зайти з будь-якого пристрою (в одній локальній мережі) на запущений в WSL на робочому комп'ютері сервер.
Комфортне використання з Cmder
Для більш тонкої настройки зовнішнього вигляду і комфортної роботи з буфером обміну (звичне поєднання Ctrl + V для вставки) зручно використовувати bash-термінал підсистеми Linux всередині cmder (Емулятор терміналу, всередині якого можна запустити один з встановлених в Windows терміналів). Для цього потрібно додати можливість старту WSL-консолі в налаштуваннях Cmder:
- Правий клік по іконці бургера в нижньому правому куті для переходу до налаштувань.
- У розділі Startup вибрати радіокнопку Auto save / restore opened tabs, щоб при рестарт не створювати вкладки заново.
- У розділі Startup, підрозділі Tasks перевірити наявність завдання WSL :: bash. Якщо її немає, натиснути кнопку Add / refresh default tasks ... і погодитися на додавання завдань.
- У списку завдань з'явиться пункт WSL :: bash, при створенні нової вкладки терміналу потрібно вибрати його.

Якщо в списку завдань є пункт WSL :: bash, але WSL не запускається під час його виборі (в момент створення нової вкладки Cmder), то в налаштуваннях можна спробувати натиснути Add / refresh default tasks ... і погодитися на оновлення списку завдань (див. П. 3). Якщо і після цього не виходить запустити термінал підсистеми (Cmder повідомляє про проблему і пише, що після натискання Enter закриє вкладку), то можна додати свою власну задачу, яка буде запускати cmd.exe і відразу викликати в ній команду bash. Команда запуску терміналу буде виглядати так:
* Cmd / k ""% ConEmuDir% .. init.bat "" && bash

замість висновку
Я скачав і встановив в систему шрифт Ubuntu Mono для більшої автентичності зовнішнього вигляду терміналу.