Windows Subsystem for Linuxで楽しい

ビルド2016で、Microsoftはwindows Subsystem for Linux(Beta)を世界に紹介しました。これは、開発者がwindows10のBashシェルを介してネイティブのUbuntuユーザーモードコンソールバイナリを実行できるようにします。 Windows Insider programに参加している場合は、最新のWindows Anniversary Update Insiderビルドを使用してこの機能を試す機会がありました。

Web開発者は、積極的に作業しているオペレーティングシステムに基づいて、どのツールやライブラリを使用できるかを困難な選択をすることに慣れ WSLは、Windowsカーネルチームによって設計および構築され、Canonicalと提携して提供され、Windows10の開発者が、別のオペレーティングシステムやVMを起動することなく、windowsで既 これは間違いなく、特に開発者の毎日のワークフローから摩擦のビットを削除するように設計されたWindows10の機能、”開発者によって、開発者のために”です。

この記事では、私が個人的に非常に興味深いWSLの機能のいくつかを紹介し、より多くのことを学ぶのに役立ついくつかのリソースを紹介します。

まず、linuxサーバーやデバイスを操作するためのsshのような定番コマンドの統合を示します。 次に、Bashスクリプトを使用してタスクを非常に自然な方法で自動化する機能を示します。 第三に、私は偉大なコマンドラインコンパイラ、他のツールと提供される*nixの互換性と少し楽しみを持っている、と少しNetHackを再生します。 最後に、既存のPythonやweb上で利用可能な他のスクリプトを使用する機能を紹介します。

Windowsは私の主要なオペレーティングシステムと開発環境であり、Windows3.0から私の最初の286になっています。 それにもかかわらず、私はいつも私の場所の周りに蹴るLinuxサーバーやデバイスを持っていました。 Raspberry Piや専用のルーター/ゲートウェイデバイスなどのIoTデバイスからMinecraftサーバーまで、彼らは私のオフィスの棚やコーナーに集まる傾向があります。 私はいつも行う必要があることの一つは、私のメインワークステーションから簡単にこれらのLinuxコンピューサーバーとデバイスの管理

私は現在、私の家からヘッドレスUbuntu Minecraftサーバーを実行しています。 それは私の10歳の息子への私のクリスマスプレゼント今年でしたが、それは彼の(ok、より多くの私のおもちゃ)と同じくらい私のおもちゃであることが 私はプライマリWindows10PCからそれを管理するためにいくつかのクライアントアプリを使用していましたが、今はWindows10のBash内からコマンドラインsshを使 Cygwinに付属している素晴らしいツールを使用しているように、PuTTYやTera Termのようなアプリを使用することはもちろん問題ありませんが、私はちょうどよく流れた真のネイティブで自然な経験を望んでいました。 Cygwinはいつも私に少しピザの場所で炒め物を注文するように感じました。 それは問題ありませんでしたが、実行は環境に適していませんでした。WSLからssh-keygenとssh-copy-idを使用して公開鍵と秘密鍵のペアを設定しているので、sshには単純に入力します:p>

ssh ssh<><>

私はそれをより速くするエイリアスを作成しました。 これは標準のLinux/Bash機能です:

user alias mc=’ssh<user><>’

今、私はMinecraftサーバーに到達するために、私はMinecraftのサーバーに到達するために、私はMinecraftのサーバーに到達するために、私はMinecraftのサーバーに到達するために、私はMinecraftのサーバーに到達するために、私はMinecraftのサーバーに到達するために、私はMinecraftのサーバーに到達するために、私はMinecraftのサーバーに到達するために、私はMinecraftのサーバーに到達するために、私はMinecraftのサーバーに到達するために、私はMinecraftのサーバーに到達するために、iv id=”windows10のbashプロンプトで「mc」と入力するだけです。この同じアプローチは、もちろん、Linuxベースのwebサーバーやデータベースサーバー、さらにはRaspberry Piや同様のIoTデバイスでも機能します。

コンソールプロンプトからシェルをきれいにセキュリティで保護できることは、単なる利便性と好みです。 しかし、シェルで直接作業することに慣れたら、apt、node、Ruby、Pythonなどのステープルを含む完全な環境では、あらゆる種類の自動化の可能性を開きます。

Remote Scripting

Linuxデバイスやサーバーがたくさんあり、それらに対してリモートコマンドを実行したいとしましょう。 公開鍵と秘密鍵のペアをすでに設定していると仮定すると、Bashからリモートsshコマンドを実行するだけです。

たとえば、最後の再起動時刻がリモートサーバー上にあった時刻を確認するには、次のように入力します:ssh ssh<user><>’last-x|grep reboot’

サーバーにシェルを保護し、last-xコマンドを実行します。”reboot”という単語を含む行を検索します。”Ubuntu Minecraftサーバーに対して実行すると、次の結果が得られます。

再起動システムブート4.4.0-28-generic Thu Jul7 08:14まだ実行中

それは単一のサーバーです。 サーバーのリストがある場合は、その部分も自動化できます。 Serversという名前のファイルを作成しました。WSL上の私のホームディレクトリにtxt。 これには、Linuxサーバー/デバイス名の束が含まれています—1行に1つ。 次に、WSLのホームディレクトリに作成したスクリプトからそのファイルを読み取ります。これは私のお気に入りのコンソールエディタでスクリプトがどのように見えるかです:

あなたはもちろん、vimやemacs、またはubuntuコンソールセッションで動作する他のエディタを使用できます。使用される言語はBashスクリプト(Bashシェルスクリプトとも呼ばれます)です。 スクリプトを実行するには、単に次のように入力します。

$./foreachserver.sh ‘last-x|grep reboot’

そして、ファイル内の各サーバー/デバイスを反復処理し、そのコマンドをssh経由でリモートで実行します。 もちろん、これは非常に簡単な例ですが、ローカルスクリプトやその他の便利なコマンドでリダイレクトするように拡張できます。 Bashスクリプト言語は十分に豊富であるため、ほとんどのリモート管理タスクを使用して実行できます。 また、WSLまたはリモートコンピュータにダウンロードした他のアプリケーションで拡張することもできます。

他のLinuxコンピュータでワークフローでローカルWindowsファイルとリソースを使用する場合はどうすればよいですか? または、Linuxをまったく使用しない場合はどうなりますか? BashはローカルのWindowsファイルとリソースを扱うことができますか、それとも完全に分離された環境ですか?WSLは/mnt/<>/ディレクトリ(またはマウントポイント)を介してPCのファイルシステムにアクセスできます。 たとえば、WINDOWSのC:およびD:rootディレクトリは、WSLのそれぞれ/mnt/c/および/mnt/d/を介して利用できます。 これは、Windowsプロジェクトファイル、ダウンロード、またはその他のファイルをLinux/Bashベースのワークフローに組み込む場合に便利です。それらは私がPCに持っているSSDとメカニカルドライブにマップします:

それらは私がPCに持っているSSDとメカニカルドライブにマップします:

それらは私がPCに持っているSSDとメカニカルドライブにマップします:

iv id=”これらは論理的なマウントなので、シェルでmountのようなコマンドを使用すると現在表示されません。 しかし、彼らはあなたがそれらを期待するように動作します。 たとえば、Windows内から、testという名前のテキストファイルを配置しました。私のCドライブのルートにあるtxt。 私はWSLから次のようにアクセスできます:

ビルドツアー中に、デモはすべてインターネットにアクセスせずに機能したことを確認したいと思いました(会場ネットワーキングがどのようなものになるかはわかりません)。 そのため、Bash/WSLデモがGit部分で機能することを確認し、ローカルPC上のWindowsファイルへのアクセスを実証するために、windows PC上のc:gitNetHackにローカルレポを設定しま そのコマンドラインはgitにfile://プロトコルを使用し、/mnt/c/git/NetHackにあるレポをクローンするように指示しました。 同様の方法ですべてのWindowsファイルにアクセスできます。警告:他のコンソールと同様に、注意しない場合は、WindowsファイルシステムのファイルをBashから変更/削除できます。 たとえば、以下のようなことをして、実行しているWindowsアカウントがそうする権利を持っていると仮定して、windowsインストールの良いビットを一掃するこ:P>

Linux rm-rf/mnt/c/<strong><</strong>

Linuxコマンドは私たちの多くに新しいので、これをwindowsコンソールのコマンドはありません。このファイルシステムの統合を実現する魔法は、DrvFsと呼ばれます。

このファイルシステムの統合を実現する魔法は、DrvFsと呼ばれます。 ファイルシステムとそれがWSLでどのように機能するかについての詳細を知りたい場合は、WSLチームはすべての詳細を含む素晴らしいブログ記事をもちろん、ファイルシステムへのアクセスは物語の一部に過ぎません。

多くの開発タスクでは、HTTPやその他のネットワークプロトコルを介してリモートリソー

HTTP要求を行う

コンパイルされたプログラムやwebページではなく、スクリプトやコマンドラインからRESTやその他のHTTP(またはFTP)呼び出しを行 ほとんどのLinuxディストリビューションと同様に、WSLにはHTTPやその他のネットワーク呼び出しを行うためのcurlやwgetなどの標準ユーティリテ たとえば、curlを使用してプロファイル情報を取得するためのGitHubへのREST呼び出しは次のとおりです:

これをBashスクリプトと組み合わせて、REST Api用のクイックテストクライアントを作成したり、サーバー上のwebページにpingを実行してステータスを報告するユー 画面上で表示するのではなく、単に出力をファイルにリダイレクトすることができます。

curl curl-ihttps://api.github.com/users/Psychlist1972>pete。私はPowerShellユーザーでもあり、PowerShellでWindows10MIDIを使用したり、特定の録音ハードウェアのユーザーに起こっていたファイルの破損を修正するための興味深い拡張機能を作 長年の.NET開発者とファンとして、私は自分のプロジェクトにとって理にかなっているように、PowerShellを引き続き使用して拡張します。 しかし、PowerShellは、今日のWeb上でこれらすべてのBashとLinuxに焦点を当てたオープンソースのユーティリティと例を実行するのに適した環境ではありません。 私はタスクを達成するために最も簡単で摩擦のない方法を使用したいと思っています。私はBash、Bashスクリプト、そしてあなたがシェルから達成できるタスクについて、ここではほとんど表面を傷つけていません。

これまでのところ、私は有用であるが開発に付随するユーティリティ作業について話してきました。 WSL内から実際の開発とコンパイルを行うのはどうですか? 私はビルドツアーの一環としてそれを実証しました。

ビルドツアーでBash–NetHack

今年の夏の初めに、Microsoftのスピーカーは、WindowsとMicrosoftクラウドのクールな新しい開発者機能のいくつかを実証し、世界中に行きました。 その一環として、WSLを楽しい方法で実証したかったのですが、開発者が関係する方法でも実証したかったのです。私は個人的にgitといくつかの伝統的なコンソール開発ツールを使用して表示したかったです。 私はBashのアップデートにコメントはそれぞれの基礎(“こんにちは世界”Python、Ruby、見せちょっとりに殴打されます。私は大学時代、Unix(DEC UltrixとSunOS)とVAX/VMSの間を行き来していたときに思い返しました。 当時、Unixはほとんどコマンドラインの最初の環境でした。 私の学校では、グラフィックスワークステーションの一握りでほとんどのXユーザーはちょうど別のウィンドウで複数の端末セッションを開いたが、バック 学生の大半は彼らのセッションのためにVT-220端末を使用しました(学校はボストンから遠くなかったので、私たちはDEC機器をたくさん持っていました)。

当時、コンピュータサイエンス専攻のすべてがプレイしていた二つの大きなゲームがありました:泥(lpmudと当時のdikumud、主にブランドの新しい)とNetHack。 NetHackと他のローグライクは、歴史の中で最も影響力のあるゲームのいくつかであると考えられてきました,私たちが今日楽しむ多くのダンジョンクロールとロールプレイングゲームの前駆体であること.

NetHackは長い歴史を持っており、今日は十万行以上の数十年前の*nixコードだけでなく、現代の追加が含まれています。 ゲーム自体は、端末の対話のためにcurses(またはその代替品)を使用し、lexとyacc(またはflexとbison)とcc(またはgcc)、およびビルドするための他の多数の開発者ツールが必

これはCで書かれており、Bourneシェル用に書かれた多くのスクリプト化された設定ユーティリティが含まれています。 WINDOWS10でWSLとBashの開発者機能を実行することは、良い楽しいテストになると思いました。 Curses(LinuxおよびWSLではlibncurses)を使用しているため、Windows10コンソールウィンドウに組み込まれているターミナルエミュレーションの機能を実証するのにも役立ちます。

昔は、ソースからNetHackを構築することは、私たちの時間スライスされたUltrixサーバー上で永遠にかかりました。 今では私のPC上で分かかり、それはすべて完了です。 私は進歩が大好きです。 LinuxまたはWSLでNetHackを設定してコンパイルする簡単な方法と難しい方法があります。 あなたにいくつかの時間を節約するために、私は簡単なアプローチを歩いていきます。

前提条件

まず、WSL環境を更新して、ソフトウェアの最新のカタログを参照していることを確認し、ベースインストールを最新にします。 一般的に、新しいパッケージをインストールする前にこれを行うことをお勧めします。

$sudo apt update
$sudo apt upgrade

次に、必須の開発者ツールをインストールします。 これを行う最も簡単な方法は、build-essentialパッケージを使用することです。 これには、Linux開発者がc/C++でアプリを構築するために必要なほぼすべてのコンソールプログラムが含まれます。

sudo sudo apt install build-essential

これには数分かかります。 より外科的になりたい場合は、gcc、gdb、make、flex、bison、およびNetHack docsで必要とされる他のツールを別々にインストールすることができます。 しかし、あなたが開発者であれば、おそらくある時点で他のツールが必要になるでしょう。 Build-essentialパッケージは、ツールセットのインストールから当て推量を取り出します。

次に、gitをインストールします。 あなたが想像できるように、それは次のように簡単です:

Linux sudo apt install git

Linuxと同じように、git PPAを追加して最新バージョンを入手することができますが、こそして最後に、コンソール画面の対話のためにcurses(実際にはncurses)をインストールしたいと思います。

$sudo apt install libncurses-dev

これらの手順を完了したら、nethackを構築する準備

ビルドNetHack

公式のNetHackレポはGitHubにあります。 まず、我々はそれをつかむと、私たちのホームディレクトリからサブフォルダに入れてみましょう。

Net cd~
Net git clonehttp://github.com/NetHack/NetHack

NetHackは非常に多くの異なるオペレーティングシステムをサポートしているため、次のようにする必要があります。コマンドラインでlinuxを使用し、ccのgccのようなunixの古典のための無料でオープンソースのツールを置き換えていることを伝えるための基本的な設定。私が言及したように、これを行うにはいくつかの方法があります。

誰かが、設定の多くをヒントファイルにカプセル化するのに十分な思慮深さでした。 ここで私を信頼してください、hintsファイルを使用すると、GitHubリポジトリに記載されている手順と比較して、設定の頭痛の時間を節約できます。 READMEファイルやその他のドキュメントを見ると、ヒントの使い方がすぐには分かりません。

cd cd NetHack/sys/unix
../setup.sh hints/linux

linux用の適切なツール、ライブラリ、パスを使用するようにmakefileを設定します。 私は彼らがWSLで完全に動作することを報告してうれしいです。 シェルスクリプトに興味がある場合は、お気に入りのエディタで開いてください。

次に、最終ビルド:

cd cd~/NetHack
make make all

ビルド後、インストールを作成します。 これは実際には、実行可能ファイルを既知の場所にコピーすることです。

make make install

これにより、~/nhという名前のフォルダが残ります。 Nethackは~/nh/install/gamesディレクトリにあり、単にnethackと呼ばれています。 それを実行するには、そのディレクトリに移動し(またはフルパスを入力し)、次のように入力します。

$cd~/nh/install/games
$nethack

それを行うと、画面がクリアされ、NetHackの再生を開始するように求められます。 ここで行われるすべては、バニラのUbuntu Linuxインストールで行われるのと同じように行われることに注意してください。

NetHackをプレイする

コンソールゲームの制限とNetHackの複雑さを考えると、それに入るには少しかかるかもしれません。 それは最初は少し不可解であると言うことは控えめな表現になりますが、私は良い挑戦から敬遠した開発者に会ったことはありません。

ナビゲーションキーはVI(M)で使用されているものと同じであるため、Hjklはそれぞれ左、下、上、右に使用されます。 終了するには、トップレベルの階段を見つけてそれらを使用するか、Control-Cを押してゲームを強制的に終了させることができます。NetHackでは、あなたは@記号です。 各レベルは、部屋、廊下、ドア、および上下の階段の両方で構成されています。 モンスター、宝物、アイテムは、あなたがプレイするように慣れるだろう様々なASCII文字として表されます。 ローグライクと規範であるように、そこには保存されておらず、あなただけの一つの命を得る。 あなたが死んで再びプレイすると、ダンジョンはランダムに再生成され、アイテムはスクランブルになります。

NetHackのポイントは、ダンジョンを生き残る金やアイテムを収集し、できるだけ多くのモンスターを殺すことです。 それをはるかに超えた目標がありますが、それらを発見するにはしばらくプレイする(または読む)必要があります。 ルールは緩やかにダンジョンに従ってください&武器、スキルなどのためのドラゴンのルール

ここでは、三つの部屋と二つの廊下が見えるNetHackのスクリーンショットです。 階段は左上の部屋にあり、私は現在、いくつかの宝物やその他のアイテムと一緒に、右上の部屋にいます。あなたのバージョンに色がない場合は、~/という名前のファイルを作成します。nethackrcとその中に次のものを入れてください:

OPTIONS=color:true,dark_room:true,menucolors:true

脇: ASCII文字グラフィックスはあなたのものではありませんが、あなたはコンセプトが好きなら、Microsoft Storeで”ローグライク”を検索し、この人気のあるジャンルでより確かに、NetHackは古代のコードベースであり、特定の年齢の私たちにとって最も親愛なるものです。

確かに、NetHackは古代のコードベースです。 しかし、それを構築することは、*nixオペレーティングシステムの重要な開発者ツールと機能のかなりの数を行使し、また、端末エミュレーション。 Gcc、gdb、make、bison、flexからより現代的なgitまで、すべてが今日WSLで動作することを見るのは素晴らしいことです。ビルドツアーで行われているように上記のデモを見たい場合は、ビルドツアーカナダからこの基調講演を見てください。 WSLのデモは6時20分頃に始まります。 (そして、はい、それは私がそのビデオで言ったことにもかかわらず、Linux用のWindows Subsystemです。p>

https://channel9.msdn.com/Events/Build/Build-Tour-2016-Toronto/Keynote

私はあなたがNetHackのダンジョンにあなたの遠足を楽しむことを願っています!cとC++は、これらの古典的な開発者ツールと同様に素晴らしいです。 あなたは普通のBashスクリプトで多くのことをすることさえできます。 しかし、多くの開発者のタスクにはPythonのようなスクリプト言語が含まれています。

Python

ウェブ上でpythonスクリプトの例を見つけることができます。 もちろん、これらの例のほとんどは、Linuxを実行していることを前提としています。 これまでは、別のマシン、VM、またはブートオプションのいずれかでLinuxインストールで実行するか、WindowsディストリビューションのPythonを使用して実行するために必要な変更を加えることを意味していました。

これらは、任意のストレッチによって克服できない問題ではありませんが、開発者の日々の生活の中で、このような摩擦の小さなビットが追加され WSLを使用すると、ゾーンからステップアウトすることなく、互換性のあるPython対応のサブシステムとシェルを常に使用できます。

Pythonの最新の開発バージョンとpythonパッケージインストーラ”pip”をインストールするには、Bashシェルプロンプトで以下を実行します。

Python sudo apt install python-pip python-dev
Python sudo pip install–upgrade pip

Pythonがイ 私はActivestate Python recipeサイトに行き、トップのPythonの例を選びました。 わかった、私は嘘をついた。 一番上のものは整数の名前を印刷するためのもので、それは超エキサイティングには聞こえなかったので、私は2番目のものを選びました:テトリス。 私はあなたのすべてが毎日十分な実用的なPythonを見ていると思ったので、私は別のゲームに行くつもりです。私はnanoを開き、Windowsのブラウザのページから275行のPythonコードをコピーし、WSLコンソールウィンドウでnanoに貼り付け、次のように保存しましたtetris.py そして単純に実行します:

python python tetris。py

それはすぐに画面をクリアし、基本的なテトリスアプリケーションを育てました。 NetHackの場合と同様に、同じVI標準の移動キーを使用します。 (戻って移動のためのマウスとWASDキーの前の日に、右手はキーボードのHJKLキーにありました。私が言及したように、あなたはもちろんWSLなしでWindows上でPythonを実行することができます。 しかし、迅速なユーティリティとサンプルのために、既知のソースからいくつかのコードを貼り付けるだけで、変更なしでLinux Pythonの例を実行できることは、開それは本当にポイントです。

それは本当にポイントです。

それは本当です。 Python、PowerShell、C#などの他のWindowsネイティブツールを置き換えることではありません。 これは、最新の開発ワークフローで迅速かつ効率的に作業を行う必要があるときに摩擦を取り除くことです。Bash、Python、およびすべてのネイティブコマンドラインLinux開発ツールの間で、WSLは私のLinuxワークフローのニーズをカバーしています。 Linuxサーバーでも、完全なLinuxクライアントでもありません。 代わりに、それは私がいくつかの日々の摩擦を減らし、Windows上での開発をさらに生産的で楽しいものにするために必要なものです。

WSL環境をリセットする

自由に実験してください。 WSLインストールを損傷した場合は、再インストールするのは簡単です。 重要なもののコピーを必ず保管してください。p>

C:>lxrun.exe/uninstall/full
C:>lxrun.exe/install

BashとWSLをどのように使用していますか?特に、WINDOWS10でWSLとBashを使用することで、もう少し効率的になり、日々の開発タスクから少しの摩擦を取り除くことを願っています。WINDOWS10でWSLをどのように使用していますか? どのようにそれを使用したいですか?

チームは、WSLが開発者にとって優れたコンソールツールであることを確認するために多くの作業を行っています。 フィードバックがある場合、または問題に遭遇した場合は、GitHubの問題ページとUserVoiceフィードバックと投票サイトを確認することをお勧めします。 私たちは本当にあなたから話を聞きたいと思います。

追加の参考文献とさらなる読書

Linuxシェルスクリプトは巨大なトピックであり、web上には素晴らしいチュートリアルがたくさんあります。 あなたはまだそれに精通していないし、より多くを学びたい場合は、ほとんどの任意のBashのチュートリアルはあなたのために動作します。 ここでは、開始するものです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です