質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Q&A

解決済

3回答

9818閲覧

WSL(Windows Subsystem for Linux)におけるパーミッションの問題

minwinmin

総合スコア16

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

0グッド

0クリップ

投稿2018/05/17 14:50

編集2018/05/18 11:23

環境

OS:Windows 10
PC: HP HP Spectre x360
WSL(Windows Subsystem for Linux), Ubuntu
エディター: VScode

発生した問題

Windows上でUbuntuを用いてweb開発を行っています
その時に発生した問題についてなのですが,要約すると
「htmlファイルをエディタで編集すると,勝手にパーミッションが変更されてしまう(権限なし)」
です.
そのため,ファイルを編集後「npm run dev」すると以下のようにパーミッションが拒否されていしまいます.
イメージ説明

そのため,いちいち,そのファイルをchmod 644 [ファイル名]する必要があります.
またdistフォルダを削除すると上手く実行することができます.
この解決方法が検討がつかず困っているのですが,どうすれば解決できるでしょうか?

質問に対する回答

エディタはlinux側からではなくwindows側から起動させて,ファイルを開き編集しています.
編集したファイルはfooter.vueです
パーミッションは画像のようになります.
permission

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

WSL上のファイルやディレクトリをWindows(つまりWindows上のアプリ)から直接操作することはサポートされていません。Windows上のエディタを使用したい場合は、Windows上の通常の領域でファイルの作成や編集を行い、"/mnt/c"経由でアクセスしてください。

WSL File System Support – Windows Subsystem for Linux

なぜ、そうなるのかは、上のブログに書いています。適当にななめ読みしただけですが、ざっくりに解説します。

VolFsはWindowsから触るべからず。

まず、WindowsとLinuxではファイルシステムの考え方が全く異なります。Cygwinなどは無理矢理Windows上でLinuxっぽく動作させていましたが、かなり制限がある方法でした。WSLの目的は、通常のLinuxをWindows上で動かすことですので、無理矢理解釈する程度ではうまくいきません。そこで、WSL側でシステムコールをするときに使われるVFSに対して、通常のLinuxファイルシステムを提供するVolFsを用意しました(他に、DrvFs(後述)やTmpFs、ProcFs等があるようです)。

VolFsは通常のLinux用ファイルシステム、いってみればext4やBtrfsで見られるようなファイルシステムを提供します。これらはNTFSにはない機能、モード(NTFSのACLと異なる形式)、inode、所有グループ、POSXIなシンボリックリンク、POSIXな名前付きパイプ、":"や"?"等が含まれるファイル名、大文字小文字の完全な区別等々が含まれます。こうすることで、通常のLinuxと同じように処理をすることができます。

といっても、VolFs用にディスクのパーティションを区切ってフォーマットするとか、仮想ディスクのような物を用意するとかはしませんでした。そのようにした場合、容量が固定化されたり、無駄な空き領域が出来たり、二段階アクセスにより遅くなったりと問題が出るからです。そこで、VolFsはNTFS上にある領域をそのままバックエンドとして使うことにしました。ファイルデータ自体はそのまま置くことができますし、使えない文字はエスケープして別名にするなどで対応します。そして、モードや所有グループなどはNTFSの拡張ファイル属性(EA、Extended file attribute, xattr)に書き込むようにしたのです。

通常のファイルのように置くようにしたため、Windows上からも通常のファイルとして扱えるように見えるかも知れません。しかし、(特殊なファイル操作をしない限り)これらの拡張ファイル属性は見えませんし、編集もしません。そのため、Windows上からファイルを操作すると、モードなどの情報が書かれた拡張ファイル属性の情報が吹き飛び、Linuxからはモードなどが不明なファイルとなってしまうと言うことです。

このように、VolFsはNTFSをバックエンドとして使っているだけであり、ファイルとして見えるからと言って、操作しても良いというわけではありません。

Windowsとのやり取りはDrvFsを使え!

これではあまりにも不便と言うことで、MicrosoftはDrvFsという別のファイルシステムを用意しました。これは、通常のNTFS領域、つまりはCドライブをマウントするという物です。こちらは拡張ファイル属性を使わず、NTFSのACLからモード等を決定づけてるという手段をとっています(Windows 10 1803以降、参考: Chmod/Chown WSL Improvements – Windows Command Line Tools For Developers)。

言ってしまえば、CygwinやMSYSなどが取っていた方法に近いです。所有者やモードなどの情報はPOSIXに準拠する動作ではありません。他にもLinuxファイルシステムとしては色々と制限があるのですが、データのやり取りをするという点では、十分とも言えます。この領域のファイルはLinuxとWindowsのどちらからアクセスして変更等を行っても、その動作がサポートされています。

投稿2018/05/19 01:32

編集2018/05/26 03:37
raccy

総合スコア21735

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

minwinmin

2018/05/26 03:35

raccyさん,非常に丁寧な説明ありがとうございます! やっと理解することができ,問題が解決しました! 本当にありがとうございます!
guest

0

https://int128.hatenablog.com/entry/2018/03/26/235159

http://www.mattgreer.org/articles/wsl-chicken-and-egg-problem/

VSCodeをlinux側って実行していますか?
それとも、windows 側で実行していますか?

また変更されたファイルの実行権限はどうなっていますか?
ls -lの出力があると幸いです。

投稿2018/05/17 22:35

mkgrei

総合スコア8560

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

minwinmin

2018/05/18 11:24

質問を更新しました.
guest

0

格納されているフォルダのパーミッションを777にしてみる。

投稿2018/05/18 11:47

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問