はじめに
「git hooksについて知りたかったのにいつの間にかシンボリックリンクを調べていた!」
なんてことよくありますよね。
時間食っちゃうなぁ…とか思いつつ知識欲には抗えない…
シンボリックリンクとは
シンボリックリンクとは、オペレーティングシステム(OS)のファイルシステムの機能の一つで、特定のファイルやディレクトリを指し示す別のファイルを作成し、それを通じて本体を参照できるようにする仕組み。
参照:e-Words シンボリックリンクとは
何かのファイル、ディレクトリを参照できるファイルだよってことですね。
Windowsでいうショートカットにあたる。
利点
ディレクトリ構造が違っても容易にアクセスできる
毎回相対パスとか打つの面倒☞シンボリックリンクだと短い記述で住む
欠点
根本のファイルが消えたらアクセスできない
Windowsで遊んでみた
参考記事:https://sologaku.com/pc/windows-how-to-create-symbolic-link/
環境:Windows10
はじめに、で述べたようにWindowsでのショートカットにあたる機能ですからGUIの操作で簡単に似たようなことはできるのですが逆張り大好きな我々にとってはCUIで回りくどくやるのが醍醐味というところです。
リンク先(参照したいファイル)をC:Users/user/test/test.txtとしました
☝にリンクしたファイルを保存するフォルダをC:Users/user/tempとしました
C/
│
└ Users
│ └ uer
│ └ test
│ │ └ test.txt
│ └ temp
次に管理者権限でコマンドラインを開きます
コマンドは以下の通り
mklink [オプション] [リンクしたファイル] [リンク先]
今回の場合☟(tempフォルダの下の階層に入力した文字がファイル名になります)
mklink C:\User\user\temp\new_link C:\User\users\test\test.txt
実行結果
C:\Users\user\temp\newlink <<===>> C:\Users\user\test\test のシンボリック リンクが作成されました
確認してみると、、
C:\WINDOWS\system32>dir C:\Users\user\temp
C:\Users\user\temp のディレクトリ
2023/08/15 18:36 <DIR> .
2023/08/15 18:36 <DIR> ..
2023/08/15 18:34 <SYMLINK> newlink2 [C:\Users\user\test\test.txt]
.symlink拡張子のtest.txtへのリンクがあるnewlinkファイルが作成されていることがわかります。
フォルダのシンボリックリンクを作りたい時
mklink /D C:\User\user\temp\new_link C:\User\users\test\new_foldar
mklinkの後ろに/Dをつけます。
リモート上のファイルのシンボリックリンクをローカルに作りたい時
参照:https://atmarkit.itmedia.co.jp/ait/articles/1306/28/news106.html
セキュリティの面で、デフォルトの状態ではリモートからローカルへのシンボリックリンクの作成はできないので設定を変更します。
fsutil behavior query symlinkevaluation
と入力すると以下のように出ます。
C:\WINDOWS\system32>fsutil behavior query symlinkevaluation
ローカルからローカルへのシンボリック リンクは有効です。
ローカルからリモートへのシンボリック リンクは有効です。
リモートからローカルへのシンボリック リンクは有効です。
リモートからリモートへのシンボリック リンクは有効です。
fsutil behavior set symlinkevaluation r2r:1 r2l:1
と入力すると、リモートからローカルでのシンボリックリンクの作成ができるようになります。
変更後☟
C:\WINDOWS\system32>fsutil behavior query symlinkevaluation
ローカルからローカルへのシンボリック リンクは有効です。
ローカルからリモートへのシンボリック リンクは有効です。
リモートからローカルへのシンボリック リンクは有効です。
リモートからリモートへのシンボリック リンクは有効です。
意味
remote to remote
を有効(1)にします。
remote to local
を有効(1)にします。
あとはローカル上で行ったようにコマンドを書けば動作します。
以上!
初めてQiitaでちゃんとした記事を書きました。
正確な情報を記述するよう心がけましたが、なにかおかしな点があればコメントお願いします。
拙い文章でしたが最後まで読んでくださりありがとうございました!