【Bash】Windows Subsystem for Linux【WSL】6
■ このスレッドは過去ログ倉庫に格納されています
WSL2アーキテクチャ https://www.atmarkit.co.jp/ait/articles/1906/14/news019.html WSL 2では、仮想マシン環境が起動し、bashがコマンドを受け付けるまで2秒程度という速度で起動できる。 このため、コマンドプロンプトなどからwsl.exeなどを使ってbashコマンドを処理する時間は、 現在のWSL 1とほとんど変わらない。また、本物のLinux実行環境であるため、 これまで正しく動作できなかったアプリケーション、例えばコンテナシステム(Dockerなど)や ユーザーファイルシステム(FUSEなど)も動作させることができる。その上で、現在のWSL 1と同等の機能と使い勝手を実現するという。 WSL 2はWSL 1を置き換えずに併存する WSL 2が登場したからといって、WSL 1は廃止になるわけではなく、引き続き利用可能である。 ファイル共有プロトコル「9P」でWSL 1との互換性を確保 このように、WSL 2とWin32環境の間のファイル共有は、どちらも9Pを使うことになる。 また、WSLからWin32プログラムを起動する「Win32相互運用性」では、最初にWSL側で、 実行ファイルを判別する必要がある。具体的には、実行ファイル先頭のマジックナンバー (Win32ではMZ)を見て、LinuxのELF64か、Win32の実行ファイルなのかを判断する。 【Bash】Windows Subsystem for Linux【WSL】5 https://mao.5ch.net/test/read.cgi/linux/1553100855/
ネットカフェのPCはWindowsなんだし、Windows使うのに慣れてないと仕事もできない。 俺の自宅はMacしかないけど、VMのWindowsでWSLをいじってるわ。 windowsしか使えなくてLinuxちんぷんかんぷんだと恥ずかしいけど Linux知っててwindows使えないのはもっとはずかしい ネットカフェじゃなきゃ仕事出来ないって相当怪しい仕事だ なんでそうなるんだ、そんなところで仕事しねえよw ネットカフェのPCでLinuxのところなんてないだろ。 あったら逆に行ってみたい。 gradleがあれば十分。mavenでも良いけど。 WSLのLinuxからとある危険なコマンドを実行してしまった人の末路… https://togetter.com/li/1412984 /mnc/c でCドライブが見えてるからごっそり消されたのか? わざわざ--no-preserve-rootオプション付けないと実行できないようにしてあるし、 /mnt/c/以下から削除されるから、他のドライブ削除する前にCtrl+Cで止められただろうし なにしたかったんだか betaの頃からの古いネタ https://www.youtube.com/watch?v=zG_2OeJDCYU sudo rm -rf /は後藤大地もやらかしたっぽいなw じゃないと記事にしないだろ。 rm -rf / の問題点は意図して実行したとき以外に rm -rf /hogehoge みたいな実行するつもりが hogehoge に値が入っていなかったときが問題ってのが大きい バグで大変なことになるから普通は / を書かない習慣にする それでも問題が無いってことはない rm -rf /*だと警告なしなんだよなぁ ./*のつもりでミスった奴はいたな。 dd if=/dev/zero of=/mnt/ の次に記述する 単語を記載しなさい 回答時間 5秒 >>412 なんでわざわざ./付けようとしたんだそいつ >>415 /以外にいる時にカレント以下を消したかったのを誤爆したんやろ Ruby の、FileUtils モジュールなら、DryRun オプションで、 実際には実行せずに、どうなるのか分かるので安全! わりとどうでもいいけど * と ./* は意味が違うと習ったことがある 理由は忘れた >>424 例だと、*が展開されて、rm -iになるからか 詳しい解説サンクス! やり方今から調べるけどcドライブのマウント外しとこ... そしてデータ入ってるドライブを飛ばすと rm を同名コマンドに置き換えているといつもと違うユーザーで作業するとき Enter 押した後で素の rm を実行したことに気付くのはよくある話 そういう時に root になってたりするのもマーフィーの 一度経験すると危険なコマンドを同名の別物に置き換えるのはやらなくなるが >>427 $ alias rm=echo $ rm --version --version $ sudo rm --version rm (GNU coreutils) 8.28 Copyright (C) 2017 Free Software Foundation, Inc. ライセンス GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> ;. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. 作者 Paul Rubin、 David MacKenzie、 Richard M. Stallman、 および Jim Meyering。 Windows Subsystem for Linux 2のNTFSソフトリンク対応 https://ascii.jp/elem/000/001/951/1951574/ >>431 >Windows Insider ProgramのPreview Build 18980より前では、WSL2は、NTFSのソフトリンクを解釈することができなかった。 最初の三単語しか理解できなかったのか? https://docs.microsoft.com/en-us/windows/wsl/release-notes#build-18980 >Fix reading symlinks that deny FILE_READ_DATA. This includes all the symlinks Windows creates for backwards compatibility such as "C:\Document and Settings" and a bunch of symlinks in the user profile directory https://imgur.com/ZWr0hf1 >なお、WSL2側からNTFS上でのシンボリックリンクの作成はまだ未完成で、なぜかジャンクションを作ってしまう。WSL1では、正しくNTFSシンボリックリンクを作っていたので、今後のアップデートで対応すると思われる。 NTFSシンボリックリンクの作成条件忘れてんじゃないのか? https://docs.microsoft.com/en-us/windows/wsl/release-notes#build-17046 >DrvFs creates NT symlinks when certain conditions are met. [GH 353, 1475, 2602] >The link target must be relative, must not cross any mount points or symlinks, and must exist. >The user must have SE_CREATE_SYMBOLIC_LINK_PRIVILEGE (this normally requires you to launch wsl.exe elevated), unless Developer Mode is turned on. >In all other situations, DrvFs still creates WSL symlinks. https://imgur.com/ngcY0Is >>432 何が言いたいのか全くわからん。 それはそれとして、WSL使うぐらいなら仮想マシンでいいと言っていたやつがいたが、 シンボリックリンクの事とかも考えると、WSL1と同等のものを仮想マシンで作ろうとすれば それはそれで大変だっていうのがわかるね。 仮想マシン自体は作れるがWindowsとの統合作業は細かい所がたくさんある WSL2正式版いつ頃だろうか。 > NTFSシンボリックリンクの作成条件忘れてんじゃないのか? あのさ、Linuxでシンボリックリンクを作成するときに使うコマンドはlnだってわかってる? Linuxからcmdもmklinkもwslも使わないから。 >>436 その機能だけでも、ストアアプリになってよかったと思うわ >>436 自分も最近これやったばかり。 なんでみんなWSLなのに rm -rf / の話なんかしてるんだろう?と思ってました。 あ、WSL2だとまだストアアプリになってないから? >>439 あら、そうでしたか。WSL2触ったことないんで知りませんでした。 やっぱり適当なこと書いちゃいかんな…。 若干スレチだがX410が更新されてる 画像とHTMLがコピペできるようになったらしい >>438 rm -rf / の話は、Cドライブは/mnt/c以下にデフォルトでマウントされていて rmはマウント先も削除する。ってことに気づかなかったのが原因 rmにはマウント先を消さないように--one-file-systemというオプションが存在する。 隔離された環境だろ?なら消してもOKだなと勘違いしたのが愚か 仮想マシンを使っていても、Cドライブをマウントしていれば同じことになる。 ログインしないと結論が見えないので、結論だけ書いておくよ。 > WSL2のNTFSリンク対応をテストする > ・Windowsで作成したNTFS上の3種類のリンクを正しく扱える > ・NTFS上にハードリンクを正しく作成できる(Win32側から正しくアクセスできる) > ・NTFS上にLinuxシンボリックリンクを作成できるが、Win32側からはアクセスできない > これから考えると、現時点では、NTFS上のリンクに関しては、 > Win32側で作成し、Ext4に関してはWSL 2側でそれぞれ作成したほうがよいと考えられる。 > 最終的にWSL 1と同じ実装になるとすれば、NTFS上のリンクに関してはどちらで行っても構わないだろう。 XP上でCygwin使ってたときのことを思い出したわ Cygwinからln使ったリンクはWin32からは認識できないので、 Win32側からジャンクション張って、改めてCygwinでマウントしたりしてたな たしか、senable.exeを使ったシンボリック・リンクの方はダメだった そんなことするくらいだったら普通にLinux使えよ ネタにマジレスすんなって・・・ 台風も過ぎ去り、貴重な休日を何だと思ってる? >>446 DD for Windows でいいじゃん >>451 Cygwinなら昔から問題なくできますよ・・・ cygwin dd などで検索してみてください・・・ >>453 これな WSLからwindows上のファイル作れるんだから windowsからdd出来れば他に何もいらない >>453 よくねーよ ddって名前付いてるけど全く別物だろ dd for windowsならシリコンリナックスの黄緑のGUIのソフトよく使ってたな ubuntu に sudo のアップデート来たね。早いね。 だいたいこういうのは公開前にdistroのセキュリティ担当に連絡がいってる 足並みが揃ったところで公開とアップデート配信 そういうのはメールでくるよ今回のはしらないけど、セキュリティは期限決まってるからオープンになるでしょ。 WSL2を使ってみてる人に聞きたいんだけど、 WSL2の環境からnotepad.exeを起動して、 WSL2の中のファイルを編集保存とかできるの? >>464 出来る ただ、書き込み権のないファイルは名前を付けて保存のダイアログになる Win10.19008.1 へー、すごいな。ファイルは9pプロトコルを使って お互いにアクセスしてるんだろうってのはわかった。 WSLの仮想マシンの中をネットワークフォルダみたいに \\wsl$(サーバー)\Ubuntu\\etc\なんたら としてnotepad.exeは読み書きするんだろう。 これは良いとして、プログラムの実行が謎やな。 WSL側でnotepad.exeを実行すると、カスタマイズされたLinuxカーネルがそれを検知して WSLではなくWindows側のnotepad.exeを起動するということか CLIだと標準入出力も転送してるってことかな bash単体で正規表現で検索だの置換もできるようになってずいぶん速くなったと喜んでたんだが、 同じようなファイルとかディレクトリの名前をいじくるプログラムをC#で書いてみた ・・・・・ あまりの実行速度の速さに目が点になった ネイティブUnixでもbashじゃこんな速度でないわ。 コマンドちまちまパイプでつないでいかなくても、 .netライブラリてOS操作に必要なものすべてそろってるんだね・・・ その比較は変だと思うがPowerShellがもうちょっとUnixよりなら良いのになとは思うね >>468 変というかシェルスクリプト相当のことがC#+VSならささっと手軽に書けるんだわ。 PowerShellにはまっていたこともあるが、 こいつはちょっと複雑になると結局.netのライブラリをコールする羽目になるんだよ。 .netをコールするなら複素数だって扱える じゃ、結局はじめからC#で書いてしまえってことになる。というかなった。 Win7時代あたりのPSは括弧"[]"の扱いがバグってて、 PSからコマンドプロンプト側で処理させるというお笑いバグ回避で乗り切る羽目になったり、 PSいじるぐらいならC#をVS上でコーディングしたほうが よほどすっきり、手軽に強力なソフトが書けるというのがPSに対する俺の結論 結局bashに回帰した UnixよりのPSというより、unixコマンドをあらかじめパイプでつないどいてくれたような、 やりたいことが一発処理できる.netライブラリ相当がいいんじゃないの? .net ・・・君の求めるすべてがそこにある >>467 実行速度に大きな違いがあるのは事実だが、 それに驚いてる程度なら、あんたの書き方が悪いだけだよ ちゃんと理解してる人は、どこがどういう理由でどれくら 遅くなるかわかってるから、驚かんのよ。 驚いてる → 書き方が悪い → 遅いのは書き方が悪いだけ というよくある結論にたどり着くだろう > やりたいことが一発処理できる.netライブラリ相当がいいんじゃないの? Unixのコマンド = 関数だから、 .netの関数を組み合わせてなにかやってるなら、 それは「一発処理」ではないよw >>470 そいつのプログラマキャリア開始時からC#が存在して、bashと比較できる状態ならわかるんだろうよ。 残念ながらこっちはC#が登場するはるか以前からbashスクリプト書いてるんだわwww そいつをあらためてC#書いてみようって気になったわけさ。 いいなぁ、プログラム開始時からC#がそろっててww >>471 単なるへりくつだなwww .namespace mknamedir { class Program { static void Main( string[] args ) { Yaritaikoto } あ途中で送信しちゃったが .namespace mknamedir { class Program { static void Main( string[] args ) { System.Yaritaikoto(); } じゃないと一発処理ではないてことだろ? まともに会話にならんなお前とはwww >>470 あんま会話しても実りもなさそうだが >ちゃんと理解してる人は、どこがどういう理由でどれくら >遅くなるかわかってるから、驚かんのよ。 じゃさ、 どういうプログラムならならbashがよくて、 どれならC#がいいのか 明確な基準示せるよな。当然www C#以前から活躍してきたperlとの境界も示してもらおうか、 理解してるってことは明確な基準を持ってるんだろうからなwww 屁理屈でもなくても、お前の言う bashでは一発勝負ではなく、 C#では一発勝負っていうのは どんなコードなんだって話なんだが? 何を文句言ってるのか知らんが、 まずはお前が、bashで遅くなったってコードでも晒せば? 見れば問題点ぐらいわかるだろ。 お前のコードの問題点は、お前のコードを見ないとわからん Ruby が良い bash が遅いのは、for ループ内に、多くのコマンド(プロセス)を書いている場合、 そのプロセスの起動が遅い 例えば、10万プロセスを起動して遅くなるとか ループはパイプじゃないから、並列処理できない。 それに、forループよりも、while の方が速い 一方、Ruby・C# などは、プログラム内でコマンドを起動しなかったら、1プロセスだから 最初から実行速度に大きな違いがあるって書いてあるように まともなコード同士を比べた場合C#のほうが速いんだよ。 起動時間はC#は遅いけど。 ただね。そんな実行しなくてもわかるようなことに 驚いてるレベルだと、素人くせーなとしか思えんわけ .NETがライブラリ提供の仕組みとして割と良いもんだというのはあるね。 ただ、あの抽象化は問題発生時に手が届きにくいところがあって開発者としては微妙な気持ちにはなるね。 あとPowerShellはDLL呼べて便利だね。 でも単に速く計算がしたいならbashやらzshとpythonの組み合わせがどこでも使えていいと思うよ。使える共有ライブラリが段違いだよ。 >>478 かみあってないよな わざと外して絡むのを楽しんでるとしか思えない 争いは同じレベルのもの同士でしか成立しない ここは、単純に速いなーと感じたことも書けないインターネッツですか? そんなに速いのが好きなら全部アセンブラで書いてろよ などと極端な話を投入してみる bashが遅いという感じることは多々あるが、.NETが特別速いと思ったことはない 最近はボトルネックを感じたらRustでかいてるわ。クロスコンパイル最強。 log解析したいときとか、サービス書くときや実行スクリプト書く時にbash使うだけで、まともな処理を書くときには環境揃えて書く。 OS依存処理になるのが目に見えて分かってるのに無駄なコードなんか書く気も起きない。 お前らは.net言語でどんなのを開発しているんだ? \\wsl$\Ubuntu-18.04\etc 以下のファイルって書き込みできないのかな? 理由は権限がないって何となく分かるけど、sudoみたいなことできないの? >>490 確かWindowsの管理者権限でも無理だったよね >>491 仕組み上、9pプロトコル経由のネットワーク共有扱いだからなぁ 権限的にファイルを編集することはできるのにプロトコル経由だと拒否されちゃう つーかそもそもWindowsでは誰の権限でアクセスしようとしてるんだろう? 最初に作ったユーザーなのかな?9pプロトコルが特定のユーザで アクセスすることとなっていれば、まあ無理だよね wsl$のアクセスはどっかにユーザのマッピングを持ってて、それ固定になってるみたいだね ・インストールの時にデフォルトユーザ作るけどCtrl+Cで落とすとrootになる、その環境だとwsl$はroot ・デフォルトユーザを削除するとwsl$もアクセス出来なくなる どこに持ってるんだろ? あー ubuntuコマンドでデフォルトユーザ変えりゃいいのか …これ、Ubuntu幾つも入れてたらどう指定するんだ? 漏れは、WSL, Ubuntu 16.04 で、 Ruby で、すべてのパッケージの更新を書いている ただし、apt を呼ぶなと言われる。 WARNING: apt does not have a stable CLI interface. Use with caution in scripts. #!/usr/bin/ruby # sudo のパスワードを自動入力する puts `echo パスワード | sudo -S apt-get update` # アップグレードできるパッケージを、一覧表示する puts `apt list --upgradable` puts `sudo apt-get upgrade -y` >>495 sudoでNOPASSWORD設定しろよ >>493 確かに ubuntu config --default-user root ってやったら ubuntu の /etc 以下に書き込めたよ ただし wslconfig /t ubuntu で一旦ディストリを停止しなければいけなかったけど sudoぐらい気軽には使えないね。 > …これ、Ubuntu幾つも入れてたらどう指定するんだ? wslconfig /l で入れてるディストリが全て表示される。 複数入れていた場合名前が違ってると思う。俺はUbuntuを二つ入れてるから Ubuntu-18.04 (既定) Ubuntu と表示された。 この場合、下の方がubuntuコマンドで、上の方はubuntu1804 コマンド >>487 Rust良いよね ワイクソザコナメクジやからコンパイラさんに「テメーここ安全じゃねぇかもしんねーぞ!!!」って切れてもらえるのは非常にありがたい ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる