GNU/Linux >> Linux の 問題 >  >> Linux

(Windows) デスクトップ上の Linux の年 - WSL のヒントとコツ

私は最近、bash/zsh/fish で大量の作業を行っています - Linuxing。ご存じないかもしれませんが、Windows 10 で Linux を実行できるようになりました。確かに、VM で Linux を実行することはできますが、重いのでまともなマシンが必要です。 Docker でシェルを実行できますが、Hyper-V と Windows 10 Pro が必要です。 https://shell.azure.com にアクセスして、どこでも端末を入手することもできます。私は Chromebook でこれを行っています。

しかし、ほとんどの場合、私は Linux を Windows 10 でネイティブに実行しています。管理者として PowerShell を 1 回開き、次のコマンドを実行して再起動します。

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

次に、Windows ストアにアクセスして、Ubuntu、Debian、Kali などをダウンロードします。

  • Ubuntu
  • OpenSUSE
  • SLES
  • カリ Linux
  • Debian GNU/Linux

何が起こっているかというと、Linux カーネルなしでユーザー モードの Linux を実行しているということです。これらの変更されていない Linux が使用する syscall (システム コール) は、Windows に仲介されます。 Linux プロセスをフォークしますか?これは Windows のピコ プロセスであり、タスク マネージャーに表示されます。

Windows ファイルを編集し、それらを Windows と Linux の両方で編集したいですか?ファイル/コードを /mnt/c/ に保存すると、他の OS で編集できます。 「Linux ファイル システムにアクセスする」ために Windows を使用しないでください。ドラゴンがいます。

Linux を (または、私のように多数) インストールしたら、さまざまな方法でそれらを管理および使用できます。

これはばかげていると思いますか?読むのをやめて Linux を動かし続けてください。より多くの力をあなたに。

もっと知りたい? Windows UI と Linux のコマンド ライン ツールを最大限に活用できる、斬新で創造的な方法を試してみませんか?読んでください、友よ。

wslconfig

WSL は「Linux 用 Windows サブシステム」を意味します。 Windows 10 (バージョン 1709 - 2017-09、Fall Creators Update です。「Winver」を実行して、何を実行しているかを確認してください) 以降、「wslconfig」というコマンドがあります。やってみて。所有しているディストリビューションを一覧表示し、「bash」と入力したときにどのディストリビューションが起動するかを制御します。

「bash」のデフォルトは Ubuntu 16.04 ですが、必要に応じて手動で 18.04 を実行することもできます。 cmd から bash に移動して終了し、シームレスに戻る方法を確認してください。繰り返しますが、VM はありません。

C:\>wslconfig /l /all
Windows Subsystem for Linux Distributions:
Ubuntu (Default)
Ubuntu-18.04
openSUSE-42
Debian
kali-rolling

C:\>wslconfig /l
Windows Subsystem for Linux Distributions:
Ubuntu (Default)
Ubuntu-18.04
openSUSE-42
Debian
kali-rolling

C:\>bash
128 → $ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.4 LTS
Release: 16.04
Codename: xenial
128 → $ exit
logout

C:\>ubuntu1804
scott@SONOFHEXPOWER:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 18.04 LTS
Release: 18.04
Codename: bionic
scott@SONOFHEXPOWER:~$

次のように wsl または bash にパイプすることで、Linux コマンドにパイプすることもできます。

C:\Users\scott\Desktop>dir | wsl grep "poop"
05/18/2018 04:23 PM <DIR> poop

Windows で cmd.exe または powershell.exe を実行している場合は、現在のディレクトリを保持する wsl または bash を実行して Linux に移行することをお勧めします。

C:\Users\scott\Desktop>bash
129 → $ pwd
/mnt/c/Users/scott/Desktop
129 → $ exit
logout

涼しい!プロンプトの前にあるその番号は何ですか?それが私の血糖値です。しかし、それは別のブログ投稿です。

wsl.conf

/etc/wsl.conf には、選択した Linux が Windows ドライブを自動マウントするかどうかなどを制御できるファイルがあります。また、Windows がホスト ファイルを自動生成するか、/etc/fstab を処理するかなど、より高度なことを制御することもできます。それはあなた次第です!

ディストリビューション

半ダースのディストリビューションが利用可能であり、さらに多くのディストリビューションが提供される予定ですが、GitHub でオープン ソース化されているパッケージャー/ディストリビューション ランチャーを使用して、WSL 用の独自の Linux ディストリビューションを作成/パッケージ化することもできます。

Docker と WSL

Docker を WSL で "ネイティブ" に実行できるかどうかは、誰もが知りたがっています。いいえ、それは少し「インセプション」すぎます。前述のように、Linux カーネルは存在しません。 変更されていない elf バイナリは問題なく動作しますが、Windows が動作します。でも!

Windows 用の Docker を実行し、[localhost:2375 でデーモンを公開] をクリックすると、Windows と WSL/Linux は同じポート空間を共有するため、Docker クライアントを WSL 上で問題なく実行できます。

Docker for Windows をバックグラウンドで実行したら、通常の手順に従って Ubuntu にインストールします。次に、.bashrc を更新して、ローカルの Docker クライアントが Docker for Windows と通信するように強制します。

echo "export DOCKER_HOST=tcp://0.0.0.0:2375" >> ~/.bashrc && source ~/.bashrc

より長くて詳細な「Docker on WSL」チュートリアルがたくさんあるので、技術的な詳細が必要な場合は、それらをチェックすることをお勧めします!多くのボリューム マウントを使用している場合、Nick の記事が非常に役立つことがわかりました。

"docker images" などを WSL から実行すると、Docker for Windows と対話します。期待どおりにうまく機能し、両方の世界でイメージとコンテナーを共有しています。

128 → $ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
podcast test 1bd29d0223da 9 days ago 2.07GB
podcast latest e9dd366f0375 9 days ago 271MB
microsoft/dotnet-samples aspnetapp 80a65a6b6f95 11 days ago 258MB
microsoft/dotnet-samples dotnetapp b3d7f438bad3 2 weeks ago 180MB
microsoft/dotnet 2.1-sdk 1f63052e44c2 2 weeks ago 1.72GB
microsoft/dotnet 2.1-aspnetcore-runtime 083ca6a642ea 2 weeks ago 255MB
microsoft/dotnet 2.1-runtime 6d25f57ea9d6 2 weeks ago 180MB
microsoft/powershell latest 708fb186511e 2 weeks ago 318MB
microsoft/azure-cli latest 92bbcaff2f87 3 weeks ago 423MB
debian jessie 4eb8376dc2a3 4 weeks ago 127MB
microsoft/dotnet-samples latest 4070d1d1e7bb 5 weeks ago 219MB
docker4w/nsenter-dockerd latest cae870735e91 7 months ago 187kB
glennc/fancypants latest e1c29c74e891 20 months ago 291MB

すばらしい。

ファイルのコーディングと編集

この点をもう一度打たなければなりません。 Windows のアプリやツールを使用して Linux ファイルを変更しないでください。ただし、Windows ファイルシステムにコードを保持することで、Windows と Linux の両方でファイルを共有して編集することができます。

たとえば、私の作業は c:\github にあるため、/mnt/c/github にもあります。私は Visual Studio コードを使用してそこでコードを編集し (または WSL 内の vim)、Linux からコードを実行します。統合ターミナルを使用して、Visual Studio Code 内から bash/wsl を実行することもできます。 Visual Studio Code で "Ctrl+P" を押して、"Select Default Shell" と入力するだけです。

Windows 10 Insiders エディションでは、Windows に「セット」と呼ばれる UI が追加され、タブ付きのコマンド プロンプトが表示されます。ここでは、他の 2 つのプロンプト (Cmd と PowerShell) の隣にある Ubuntu に Ruby on Rails をインストールしています。これはすべてデフォルトの Windows です。このエクスペリエンスのためのアドオンや追加プログラムはありません。

ここでは例として Rails を使用しています。これは、Windows でネイティブ拡張機能を使用した Ruby/Rails のサポートが歴史的に困難であったためです。 Ruby on Rails を Windows でうまく動作させようと勇敢に (そしてありがたいことに) 努力している人々のグループがありましたが、今日ではその必要はありません。 Windows の下の Linux で問題なく動作します。

拡張子付きのフルネーム (code.exe など) を使用するか、エイリアスを設定する限り、Linux から Windows アプリまたはツールを実行することもできます。

ここでは、現在のディレクトリでコードを実行するエイリアス「コード」を作成し、新しい Rails アプリを編集する VS Code を実行しています。

パイピングするときに、Windows と Linux を組み合わせることもできます。これは、おそらく Windows の人々を喜ばせ、Linux の人々をひどく怒らせるでしょう。または、私のように宗派に関係のない人なら、きっと気に入るはずです!

$ ipconfig.exe | grep IPv4 | cut -d: -f2
172.21.240.1
10.159.21.24

再度の注意:/mnt/<x> 以外にあるファイルの変更 WSL で Windows アプリケーションを使用することはサポートされていません。しかし、/mnt/x にあるものを何でも編集すれば、あなたはクールです。

シェア シェア シェア

Windows 10 ビルド 17064 以降 (Windows から ver を実行するか、Linux から "cmd.exe /c /ver" を実行) を使用している場合は、環境変数を共有することもできます!

131 → $ cmd.exe /c ver

Microsoft Windows [Version 10.0.17672.1000]

Win32 から WSL プロセスを起動するとき、または WSL から Win32 プロセスを起動するときに含める必要がある、コロンで区切られた環境変数のリストである "WSLENV" と呼ばれる特別な環境変数があります。基本的に、ローミング/共有したい変数のリストを与えます。これにより、クロスプラットフォームのデュアル ビルドなどを簡単に行うことができます。 /p フラグを追加することもでき、c:\windows スタイルと /mnt/c/windows スタイルの間でパスが自動的に変換されます。

GOPATH を共有し、Windows で VSCode を使用し、両方の場所で Go を実行する方法については、WSL ブログの例を確認してください。

また、"wslpath" と呼ばれる特別な組み込みコマンド ラインを使用して、Windows と WSL の間でパス名を変換することもできます。これは、bash スクリプトを共有している場合、クロスプラットフォーム スクリプトを実行している場合 (私は両方の場所で実行される PowerShell Core スクリプトを持っています)、または単にパスの種類をプログラムで切り替える必要がある場合に便利です。

131 → $ wslpath "d:\github\hanselminutes-core"
/mnt/d/github/hanselminutes-core
131 → $ wslpath "c:\Users\scott\Desktop"
/mnt/c/Users/scott/Desktop

wslpath のマニュアル ページはまだありませんが、この GitHub の問題からコピーしたものです。要点は次のとおりです:

wslpath usage:
-a force result to absolute path format
-u translate from a Windows path to a WSL path (default)
-w translate from a WSL path to a Windows path
-m translate from a WSL path to a Windows path, with ‘/’ instead of ‘\\’

最後に、Windows ストアから Linux ディストリビューションをインストールしたら、それを最新の状態に保つのはユーザーの責任です。 Windows ストアは、「apt アップグレード」を実行したり、Linux がインストールされた後に触れたりすることはありません。さらに、Ubuntu 1604 と 1804 を並べてインストールしても問題ありません。

関連リンク

  • Windows 10 上の Linux 内に Shiny 開発環境をセットアップする
  • Badass Terminal:WSL、macOS、および Ubuntu ドットファイルの更新!!!ジェシカ・ディーン著

WSL を使用していますか?

スポンサー: クロスプラットフォームの .NET IDE である JetBrains Rider を確認してください。 ASP.NET、.NET Framework、.NET Core、Xamarin、または Unity アプリケーションを編集、リファクタリング、テスト、およびデバッグします。詳細を確認し、30 日間の試用版をダウンロードしてください!


Linux
  1. Linuxでの印刷にCUPSを使用するためのヒントとコツ

  2. Windows10およびWSL2でLinuxファイルシステムにアクセスする方法

  3. Linux.htaccessのヒントとコツ

  1. Linux環境変数のヒントとコツ

  2. Windows App Store の Kali Linux

  3. Powershell から OS バージョン、Linux および Windows を判別する

  1. Linuxでの5つの興味深いコマンドラインのヒントとコツ–パート1

  2. 2014年のLinuxの良い点、悪い点、醜い点

  3. wgetLinuxコマンドを使用するためのヒントとコツ