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

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

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

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

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Q&A

解決済

2回答

4084閲覧

linux上で作ったシンボリックリンクとWindowsのファイルエクスプローラから作ったショートカットの違いとは?

ruei

総合スコア284

Linux

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

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

0グッド

1クリップ

投稿2018/09/22 19:43

編集2018/09/23 07:14

WSL上にubuntuを動かし、sshで外部の計算用のサーバーに接続しています。

ubuntuから作ったシンボリックリンクは、Windowsのファイルエクスプローラーからアクセスできません。
<file-name>に対するアクセス許可がありません。ネットワーク管理者にアクセス許可を要求してくださいと言われます)。アクセスレベルはchmod 777にしています。
ところが、windowsのファイルエクスプローラーからショートカットを作ると、
windowsのファイルエクスプローラー・ubuntu両方からアクセスできます。

この両者の違いは何が原因なのでしょうか?
ファイルエクスプローラーからアクセスできるショートカットを、ubuntuから作ることは不可能なのでしょうか?

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/09/22 21:57

ソフトリンク? シンボリックリンクのことかな?
ruei

2018/09/23 07:13

シンボリックリンクの間違いでした・・・。
guest

回答2

0

ベストアンサー

Windowsのリビジョンによって、WSLのCドライブマウントの動作が多少異なるため、Windows 10 1803、Ubuntu 18.04 LTSである前提で話をします。また、WindowsとUbuntu両方から共通して扱えるのはWindows上のドライブ、Cドライブであれば"/mnt/c"配下であるという前提で話をします。Ubuntu上の"/home"配下も実体のフォルダーを開くことでWindowsから直接アクセスすることが可能ですが、その動作はWSLでサポートされていませんので、対象には含めません。

次に、まず知っておいて欲しいこととして、WSLがCドライブなどのWindowsをマウントする仕組みです。以下のMicrosoftの公式なブログが参考になります。

WSL File System Support – Windows Subsystem for Linux
File System Improvements to the Windows Subsystem for Linux – Windows Subsystem for Linux

WindowsのファイルシステムはNTFSというもので、Linuxで一般的なext4等とは異なる属性や概念をもちます。そのため、そのままLinuxに見せても色々と不具合が出てしまいます。そこで、DrvFsというファイルシステムとして特殊な変換を行っています。それでも完全な一致は不可能なため、Windowsだけで有効、Linuxだけで有効、と言うことが発生します。

Linuxであるファイルやディレクトリに対して別のパスでアクセスするようにするできるのは下記の二つです。

  • ハードリンク(ファイルのみ)
    ln ターゲット リンク
  • シンボリックリンク
    ln -s ターゲット リンク

対して、WindowsのNTFSでは複数の手段が用意されています。

  • ハードリンク(ファイルのみ)
    mklink /h リンク ターゲット
  • ショートカット(コマンド無し)
    エクスプローラー上で作成
    WshShellのCreateShortcut
    ※ コマンドは用意されていない
  • シンボリックリンク(作成には管理者権限が必要)
    mklink /d リンク ターゲット(ディレクトリの場合)
    mklink リンク ターゲット(ファイルの場合)
    ※ ファイル用シンボリックリンクとディレクトリ用シンボリックリンクがそれぞれ存在し、エクスプローラー上での扱いなどが異なる。この動作はターゲットに依存しない。
  • ジャンクション(ディレクトリのみ※)
    mklink /j リンク ターゲット
    ※ ファイルに対しても設定できるがエクスプローラー上はディレクトリ扱いになるため、アプリなどのアクセスは正常に動作しない場合がある。

ハードリンクはWindowsでもLinuxでも扱いが同じであるため、問題になりません。

ショートカットはファイルシステム上の仕組みではなく、拡張子".lnk"のただのファイルです。ファイル内にショートカットの内容、ターゲットであるリンクやアイコンの情報が入っています。エクスプローラーではこれらを認識できますが、Linuxでは".lnk"というただのファイルにしか見えないため、ファイルやディレクトリへの別名として扱う事は出来ません。

LinuxからはWindowsのシンボリックリンクもジャンクションも同じように使用可能です(隠し属性のある特殊なジャンクションを除く)。つまり、Windowsで作成した場合は問題ありません。デフォルトではWSL上でもWindowsのコマンドが使えますので、mklinkコマンドで作れば問題ないように思えます。しかし、WSLはユーザーのアクセス権で操作されるため作成できるのはジャンクションのみです(sudoでrootになってもそれは変わりません)。そして、Windowsでのジャンクションはディレクトリしか扱えない絶対パスしか設定できないという欠点があります。

では、Linuxのシンボリックリンクはどうしているのかというと実はジャンクションを作成しています。しかし、このジャンクションはWindowsと互換性がないジャンクションです。なぜなら、Linuxのシンボリックリンクは、Windowsのジャンクションと違って、ディレクトリを扱う必要がありますし、相対パスも扱う必要があるからです。そのようなジャンクションをWindowsで読み取ることができず、アクセス拒否という形で現れます。パーミッションが足りないとかではなく、Windowsでサポートしていない形式のジャンクションなので、そもそも不可能であると言うことです。

ということで、もし、WindowsとLinux両方からアクセス可能なシンボリックリンクを作成したい場合は、管理者権限でコマンプロンプト等を実行し、mklinkを用いるぐらいしか、今のところありません。

上記問題は以下のIssueとしてあがっており、1803で解決されたとありますが、依然として問題は残ったままです。
Symlinks on the mounted Windows directories are not compatible with native. · Issue #353 · Microsoft/WSL · GitHub

投稿2018/09/23 11:06

raccy

総合スコア21735

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

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

ruei

2018/09/23 14:05

うへー。めっちゃ細かい回答ありがとうございます。WSLはバグが多いですね。どうも有難うございました。
guest

0

投稿2018/09/23 01:39

cateye

総合スコア6851

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

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

ruei

2018/09/23 07:24

linuxからジャンクションはどう作るのですか?(ln --helpしてもぽいのが出てこない・・・)
cateye

2018/09/23 08:44

私の場合は、残念ながらWindows環境がないのですが・・・上記ページ“シンボリックリンクでも使える場合”や下の方にある“Windows のフォルダ共有して Linux でマウントする 3 大問題点”を読まれてはどうでしょう? また、lnではなくmountだと思います。 余談:linuxとfreebsdを使っていますが2つの機械はnfs(Network File System)を使ってmountしています。
ruei

2018/09/23 09:03 編集

mountを使うと、rootだけがそれを行えますとエラーが出ます (mout <目的のディレクトリ> <リンクの名前>)
ruei

2018/09/23 09:05

自分はlinuxで作ったショートカットをwindowsでも使えるようにしたいのですが、 リンク先はwindowsで作ったショートカットをlinuxで使える方法ではないですか?
cateye

2018/09/23 09:29

suでrootになれないのでしょうか? あと、“linuxで作ったショートカットをwindowsでも使えるようにしたい”と“windowsで作ったショートカットをlinuxで使える方法”どちらでしょう? で、ショートカットと言うのはxwindow上のアイコン(ランチャー)の事でしょうか? であれば、全然違うので難しいかと・・・以下、ランチャーの中身です。 [Desktop Entry] Name=IDLE 3 Comment=Integrated DeveLopment Environment for Python3 Exec=/usr/bin/idle3 %U TryExec=/usr/bin/idle3 Icon=/usr/share/pixmaps/idle3.xpm Terminal=false Type=Application Categories=Application;Development; StartupNotify=true MimeType=text/x-python;
ruei

2018/09/23 09:40

難しいんですね・・・
asm

2018/09/23 11:02

wslからwindowsのmklinkを呼び出せるんじゃない? win10持ってないから知らんけど
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問