次期Windows 10、一般ユーザーでもシンボリックリンクの作成が可能に 73
ストーリー by hylom
やっと 部門より
やっと 部門より
今後Windows 10では一般ユーザーでも特別な権限無しにシンボリックリンクを作成できるようになるという(マイナビニュース、Windows Developerブログ)。
シンボリックリンク機能はUNIXやLinuxでは古くから実装されていた機能だが、WindowsでもWindows VistaやWindows Server 2008でNTFSでシンボリックリンク機能が実装された。しかし、シンボリックリンクを作成するためには特別な権限が必要であり、一般ユーザーは利用できなかった。この制限はセキュリティ対策のためとされていたが、昨今ではマルチプラットフォーム対応の開発ツールやフレームワークなどでシンボリックリンクを利用する機会が増えており、それに対応するための変更だという。
ドライブ文字 (スコア:1)
Re: (スコア:0)
一応Windowsでもボリュームをフォルダにマウント出来ますしストレージの仮想化もOSの機能でできます。
だから面倒な作業を自分でやればUNIX的にすべてのドライブがC:にぶら下がっていてC:でアクセスできるようにすることも可能です。
まあリムーバブルメディアの扱いが面倒ですが。
#C:にぶら下げるのが嫌ならAでもZでも好きなのを使えばよいのだが
Re: (スコア:0)
drive letter を書きたくない気にしたくないという話なので、C:/ 以下にまとめられるといわれても嬉しくないのです。
あえて希望をいうなら、カレントドライブがどこであろうが "/" を "C:\"の別名だとみなしてくれるようなデフォルト設定変更手段が API に追加されるとかですね。
でもってそこまでやりたいなら Windows じゃなくてもいいよねって結論になる。
Re: (スコア:0)
drive letter を書きたくない気にしたくないという話なので、
そこまでいうならWindowsは使ってないんでしょ?
ならいちいちWindowsをdisることないと思うけど?
Re:ドライブ文字 (スコア:1)
君は cd した時に、ドライブが移動してないことに気がついてキレたことがないっていうのかね?
Re: (スコア:0)
cd /d オプションそっと出し
Re: (スコア:0)
PowerShellがデフォルトになったからもう大丈夫さ。
Re: (スコア:0)
ドライブ文字は残るので、べつに嬉しくもなんともない。
あくまでもシンボリックリンクが一般ユーザーでも作成可能になったという話なのですが、
それを理解されていますか?
方言がめんどい (スコア:1)
ln -s [src] [dist]
mklink /d [dist] [src]
ややこしいよね
Re: (スコア:0)
最初にlnコマンド見たときはsrcとdistと順番逆だろうと思った。
Re: (スコア:0)
cpと同じ順番なのですぐ慣れた。
Re: (スコア:0)
私も良く間違った。
第2引数(dist)がないとカレントディレクトリに
同名で作ることを覚えてからは間違えなくなった。
Re: (スコア:0)
distの省略はよくやるから、こっちの並びの方がいいよね。
バッチファイルへのシンボリックリンクでハマらないようにね (スコア:1)
Windowsのファイルへのシンボリックリンクは何か変なんで、バッチファイルなどからファイルpath参照するときは注意が必要。
http://ja.stackoverflow.com/questions/21321/ [stackoverflow.com]
うまい解決策誰か教えて欲しい
Re:バッチファイルへのシンボリックリンクでハマらないようにね (スコア:1)
質問への回答を見る限りエクスプローラの挙動が悪いので、「Windowsの〜」って言ってしまうのは可哀想な気が…
まぁ「エクスプローラ込みでWindowsだろ」って言われたらそうだねとも思うけど。
# mishimaは本田透先生を熱烈に応援しています
Re: (スコア:0)
substでお茶を濁す
アプリがほぼ対応してないからなあ (スコア:1)
実は、ファイルリンク作成に管理者権限を要求するのはmklinkというcmd.exeの内部コマンドの仕様であって、OSレベルでは一般権限で使えた。
(Win32APIへのリンク [microsoft.com]。権限について特に言及がない)
だからリンクを張るサードパーティツールやPowerShellコマンドレットはすでに存在していて、Windows 7でも一般権限で使えていた。
なので、私自身は従来から使っていたのだけど…。
ハードリンクと違い、シンボリックリンクはアプリが存在を意識していないと、ときどき危なっかしい動作をする(特に削除)。
ところがWindowsアプリでシンボリックリンクを意識しているアプリは皆無。
結局、Windowsではハードリンクとジャンクションだけにしておくのが無難、というのが結論だなあ。
とはいえハードリンクやジャンクションが使えるようになるだけで十分便利なので、使ってない人は使うとよろし。
Re:アプリがほぼ対応してないからなあ (スコア:2, 参考になる)
言及がないのはドキュメントが腐っているだけで、実際にSeCreateSymbolicLinkPrivilegeが必要 [microsoft.com]。SeCreateSymbolicLinkは既定では管理者しか持っていない。
# そしてこんなデタラメでも自信満々に堂々と書けばプラスモデされるスラドェ…
Re: (スコア:0)
お前がそう設定しただけでmklinkの仕様じゃねえよ
Re: (スコア:0)
設定ってなんのこと?
Re: (スコア:0)
ハードリンクやジャンクションは同じドライブ内でしか作れないだろ
シンボリックリンクの代わりにはならん
Re: (スコア:0)
へ?ジャンクションは他ドライブに張れるのでは。
つーか現に張って使ってるし…。
検証してみた (スコア:1)
Build 14972以降とか言われても、まだ(PCでは)Insider Preview出てないだろ! と思ったが、窓の杜の情報 [impress.co.jp]によるとBuild 14971ですでにサポートされていたらしいので試してみたところ、たしかに開発者モード有効なら特権不要でシンボリックリンクを作成できた。それどころかBuild 14965ですでにサポートされていたようだ。Build 14393 (Anniversary Update)ではまだ特権が必要だったことも確認。
なおSYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATEフラグはBuild 14971でもまだ実装されていないらしく、フラグなしで普通に作成できた一方、フラグを指定するとERROR_INVALID_PARAMETERになった。Build 14972でわざわざフラグを追加したということは、互換性に問題が出たのだろうか(ERROR_PRIVILEGE_NOT_HELDになることを期待するアプリか何かがあったとか)。
あと「Windows 7では特権不要だった」「Windows 8/8.1では特権不要だった」「mklinkが自主規制していただけ」等々の怪情報が飛びかっているので念のため確認しておいたが、やはりWindows 7でもWindows 8.1でもCreateSymbolicLink関数を直接使っても特権は必要だった(Windows 8は環境がないので未確認)。
Re:検証してみた (スコア:1)
Build 14986が来たので、動作を確認してみた。
CreateSymbolicLinkはblog記事通り、SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATEフラグの指定が必要になった。開発者モードが無効だとフラグを指定してもERROR_PRIVILEGE_NOT_HELDになる。
なおCreateSymbolicLinkを使わずFSCTL_SET_REPARSE_POINTで直接シンボリックリンクのデータを書き込んで作成することは従来通り可能で、開発者モードが有効なら特権も不要になっていた。こちらの方法で作成する場合、特権は持っているだけではダメで自分でAdjustTokenPrivilegesで有効にする必要があったから、SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATEフラグは内部的に特権の有効化をスキップしているのだろう。
要開発者モードへ切り替え (スコア:0)
までちゃんと書け
Re: (スコア:0)
まあBash on Ubuntu on Windowsエミュレーションと同じ路線で、UNIXプログラマへのご機嫌取りだよなあ。
アプリがほぼ対応していないWindowsでは実用性はあまりないだろ。
UNIXプログラマの自尊心をくすぐれれば大成功じゃないかな(実際コメントを見てると、狙い通りっぽいし)。
Re: (スコア:0)
FILE *fp = fopen("C:\foo\bar.txt", "r");
て書いたときbar.txtが本物のファイルかハードリンクかシンボリックリンクかなんてプログラマは気にしないだろ。 ショートカットだとbar.lnkを開いてもこうは行かないわけで。
もしかしてWindowsではプログラマが気にしないとこれ正しく動作しないのか?…だったらそんなシンボリックリンクのようでシンボリックリンクでない機能なんか誰も使わないだろうから、いずれ次のシンボリックリンクもどきが開発されるんだろうな…今からもう気が滅入るわ
Re:要開発者モードへ切り替え (スコア:1)
アプリが対応していないと、シンボリックリンクを消そうとしたらリンク先のディレクトリが丸々消滅したとかいうことになる。Windows XPのエクスプローラはジャンクションに対応していなかったので実際にそうなった。Vista以降、OSが標準で作っているジャンクションやディレクトリへのシンボリックリンクが、フォルダーの一覧取得をEveryoneに対して拒否しているのはおそらく非対応アプリ対策のため。UNIXではそういうことはありえないの?
Re:要開発者モードへ切り替え (スコア:1)
仕事を家に持ち帰るために、文書ファイルのショートカットをフロッピーにコピーして帰る人のことですね。
昔だと笑い話だけど、クラウドな時代たと普通に参照できてしまったりするのかな。
Windowsのシンボリックリンクって (スコア:0)
Windowsのシンボリックリンクって↓の記事に書かれているmoreみたいなのがあるから要注意なんだよね
http://www.atmarkit.co.jp/fwin2k/win2ktips/988symlink/symlink.html [atmarkit.co.jp]
ショートカットをシンボリックリンク扱いにしたらマズイのだろうか? (スコア:0)
意味なく似たような機能が増えすぎてヤな感じ
Re:ショートカットをシンボリックリンク扱いにしたらマズイのだろうか? (スコア:1)
意味はある。
あれはWinodwsのGUIシェルにおいて、コマンドに対して引数、ワーキングディレクトリ、
起動時のウィンドウ設定(最大化とか)などの種々の設定を指示するためのものであって、シンポリックリンクでは代替にならない。
ショートカットがないと、GUIシェルでは引数を渡すことすらできないことを考えれば、必要性がわかるだろう。
Re: (スコア:0)
使用者側へ別名提供するより
プログラム側で別名に対応してくれた方が良かった
"notepad (txt|rtf)"でnotepad.exe/wordpad.exeの選択してくれるとか
dll地獄回避にfoo.dll.lnkを用意してfoo.dll fooV2.dll foo.V2-fix.dllを呼び出し元プログラムで判別するとか
GUIもファイル種毎のフィルター表示を基本機能で提供、ディレクトリ階層も sbinと binだけに。
Re: (スコア:0)
常に.lnkが付くなんて代用できねえよ
Re: (スコア:0)
つまりショートカットがクソだったと
Re:ショートカットをシンボリックリンク扱いにしたらマズイのだろうか? (スコア:5, おもしろおかしい)
なにを!
ショートカットだと元気っ娘ぽくていいじゃないか!
Re: (スコア:0)
むしろ.lnkが付くとポニテっぽいと思います
Re: (スコア:0)
おい、なんの参考にしてんだよデモレーター
Bash on Windows10やCygwinのシンボリックリンクも (スコア:0)
統合されないかなー
Re:Bash on Windows10やCygwinのシンボリックリンクも (スコア:1)
SET CYGWIN=winsymlinks:nativestrict
一般ユーザーでも特別な権限無しに (スコア:0)
少なくとも2000の頃からできていたんじゃなかったっけ。
ツールのインストールやポリシー変更といった下準備は必要だったかもしれない。
Re: (スコア:0)
Link Shell Extension [schinagl.priv.at] 愛用してるんだけど
Win8や8.1の時は確かに特別な権限いらなかったんよなあ。
Win10になったら管理者権限要求され出して、なんだかなあと思ってた。
Re: (スコア:0)
そのソフトは自分もWin7で愛用してる。
Win7だと「シンボリック」作成時はUAC出るよ。
#「ジャンクション」「ハードリンク」作成時はUAC出ない
Re: (スコア:0)
2000からあったジャンクションは特別な権限は必要なかった(おそらく互換性のため)。
Vistaから追加されたシンボリックリンクは、SeCreateSymbolicLinkPrivilegeが必要だった(ここが今回緩和されるところ)。
Windows 10 バージョン 1607から追加されたWSLのsymlinkは権限不要だけど、NTFSのファイルシステムドライバレベルではリンクとして認識されない。あくまでもWSLの世界だけで認識される。
Re:シンボリックリンクが(ようやく)実装された如きのことでニュースになるWindows (スコア:1)
何も知らない自分がバカです
と言いたいわけですね。
Re: (スコア:0)
Why doesn’t Explorer have an interface for creating hard links? [microsoft.com]
Re: (スコア:0)
Windowsの仕様が場当たり過ぎるんだよな
Re: (スコア:0)
メーカーもユーザーも汎用のコンピュータであることを目指していたUNIX系とは違いますから。
最も求められたのは表計算ソフトだったりゲームだったりWebブラウザだったりで、無知なユーザーと必要最低限のハードウェアを使って求められたものを動かすための仕掛けがMS-DOSだったりWindowsだったりするのです。例えばNASに組み込まれたOSをどうしてお前はそんなに制限があるんだ不自由なんだと責めるようなもんです。
Re:シンボリックリンクが(ようやく)実装された如きのことでニュースになるWindows (スコア:1)
Re: (スコア:0)
スパコン?ミニコンでなくて?