【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/ WSLのbash上で「ping /?」と入力するとなぜか文字化けしない日本語ヘルプが表示されるんだが、
「ping /? | less」や「ping /? > aaa.txt」などのように|や>で出力をパイプでつなぐと英語表示になる。 >>359
「どうぞ、この哀れなわたくしにfuse_mountのおめぐみぉぉ…」
「なにを言う!おまえは職業乞食だろ!だんなぁ、fuse_mountは本当に憐れなこっちにめぐんでくだせぇ」 (⌒⌒)
ii!i!i ドッカーン!
ノ~~~\
,,,,,,,/`・ω・´ \,,,,,,,,,, insider build 18980でOS起動不可になっちゃったわ sudo codeした時に、codeコマンドがないって言われるのはどうしたらいいんだろ
そもそもWSL内でcodeコマンドとか打った時って、どういう仕組みでWindows側のVSCodeが起動するんだぜ? >>366
パスが通ってない
そもそもインストールできていない
wsl側からでもwindowsアプリは普通に実行できる code.exeなんじゃない?
WSLからWinアプリが動くのはパスが通ってるのとbinfmtの会わせ技だったかと せめてLinuxの起動の仕組みぐらいは理解してほしいね すまん、sudo "$PATH"とか無駄なことして、パスが通ってるつもりになってたわ >>209
× Windows では、fork が無い
○ Windows の Ruby では、fork が無い どううまくいかないのか書かないのかな?
インストールできても初回の起動に失敗するとか
仮想NICが認識されないとか 動かない、動かない、とにかく動かない!
俺様が間違ってるわけないんだからM$が糞に決まってる!
M$M$M$!!!! WSLって、forkとファイルアクセスが遅いだけで実行速度自体が遅いわけでもないんだな
遅かったシェルスクリプトをbash互換からzshビルトイン使ってfork減らすようにして、ディスクアクセスもキャッシュするようにしたらそこそこ速くなった
そこまでするなら適当なLL使った方が良い気がするけどw
>>378,379
Linuxと同じ程度には仮想化環境にも対応してるから、妹と違って設定適当でも美味しく頂けるw scoop使ってruby入れたら上手くいかなかったけどWSLでrbenv使ってruby入れたら上手くいった
WSLはいいものだと思う >>380
具体的にどんな変更をしましたか?
zshで遅くて困っています。 >>382
具体的にって言ってもやってる事が違うから、どれ位、参考になるか分からんぞ。長文
ビルトイン使う例として、
dir=$(dirname $path);
file=$(basename $path)
ext=$(echo $path | sed -E 's/^.*\.([^\.]+)$/\1/g')
みたいにしてたのを
dir=${path:h}
file=${path:t}
ext=${path:e}
にするとか
sedやtr使ってた所で正規表現なしでもいけるのは${%%}${:#}${//}とかで置き換えたり
大文字小文字変換とかも変数の展開フラグでできる
正規表現が必要な所は、1箇所にまとめた上で、パイプじゃなくて、;でつなぐとか
ret=$(echo $base | sed -E 's/aaa/bbb/g;s/ccc/ddd/g;y/abc/ABC/')
パーツパーツでコピペで使いまわしにくくなるけど、forkは減らせる
文字列検索とかもgrepなしで変数展開フラグでいける
文字列のjoinでj:使うとか
before=(a b c d)
after="'"${(j:', ':)before}"'"
echo $after # 'a', 'b', 'c', 'd'
他にも配列も検索とか、和差積とかも出来る
find使ってる所も結構ビルトインで行ける
for zip in $(find . -name '*.zip');do 〜 ;done
↓
for zip in **/*.zip;do 〜 ;done
GLOBSTARSHORTつけてたら**.zipでOK
続く 続き
変数名の局所化の為にサブシェル使う所も、zshなら無名関数でいける(forkしない)
local ret;
(){
local tmp=$1 tmp2=$2
〜なんか変数使って処理
ret=$tmp3
} $base1 $base2
ビルトインとか配列検索や文字列置換とかはmanの14,15章に載ってる。これ流し読みして、ビルトインで行ける所を洗い出す。日本語は多分ない。
ttp://zsh.sourceforge.net/Doc/Release/index.html
情報量はドキュメントに比べると少ないけど参考になった日本語サイト
変数とかフラグとか:ttps://gist.github.com/sho-t/d9cdf8271b3de7c4238739e523490542
findを使わないファイル検索:ttps://qiita.com/mollifier/items/1c4a4930a89aa75e5ced
配列操作:ttps://qiita.com/mollifier/items/f897b3fddd2d10369333
コンパイルが有効な場合もある。これをファイルの頭に入れとくと更新時だけ自動でコンパイルする(勿論手動でやっても良い)
(){
local srcFile
for srcFile in ${1:h}/*.sh; do
local zwc="$srcFile"'.zwc'
if [ ! -e $zwc -o "$srcFile" -nt "$srcFile"'.zwc' ]; then
zcompile "$srcFile"
fi
done
} $0
この場合ファイルを分割してsourceしてるから、for文で回してるけど、スクリプトが1つのファイルなら、forはいらない。単純に$0に.zwcつけたのだけやれば良い
ファイルのキャッシュは特殊な処理だから参考にはならんと思うから省略。一般的に使えるのは、>>で何度も書き込むんじゃなくて、変数に入れて一気に書き込むとか(データ量と搭載メモリによっては逆効果)
ファイルアクセスを細かくやるとウイルスチェックが異常に重いから、実行時はリアルタイム保護切った方が良い
結論。面倒。過去の資産を使いまわすのでなければLLでやった方が良い 結論の一行だけでよかった説
shell使わずにLLで書き直せばいい。それでもI/Oまわりで遅いんだけど。 そこまでやるともう別物だし
メンテも面倒になりそうだし
嬉しみが無い 100万プロセスとか起動するなら、Ruby でも使えば?
外部コマンドを呼ばなければ、1プロセスで済む >>383
Ruby なら、こういう感じ
file_path = "tmp/a/b.tar.gz"
p File.dirname( file_path ) #=> "tmp/a"
p File.basename( file_path ) #=> "b.tar.gz"
p File.extname( file_path ) #=> ".gz" 単純な計算。
100万プロセスが本当なら、1プロセス256kbとして
1000000×256kb=256000000kb=250000MB
=244GBの主記憶が必要。
という事は、NUMA機がいるなぁw
設定を妹並には煮詰めないと >>391
ならruby使う必要無いな
布教活動止めれ /\___/\
/ / ヽ ::: \
| (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ,,ノ(、_, )ヽ、,, | < まーたはじまった
| ,;‐=‐ヽ .:::::| \_______
\ `ニニ´ .:::/
/`ー‐--‐‐―´´\ WindowsPCを渡された・・・orz
WSLが入ってたのでXサバ入れてアプリだけでもと思った・・・
WSLから立ち上げたEclipseで日本語が入力できねぇ・・・
(-_-);
トイレで独り乾いた涙を流すおっさんが出来上がった。
ググる先生、トイレで大活躍w Windows版Eclipseを使えばいいだろ
GUIアプリに関してはほぼ全てWindows版があると思っていい ネットカフェの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って名前付いてるけど全く別物だろ ■ このスレッドは過去ログ倉庫に格納されています