web-dev-qa-db-ja.com

Linuxで相対シンボリックリンクを作成するにはどうすればよいですか?

relativeを、それが置かれているディレクトリに解決するシンボリックリンクが必要です。そのようなものを作成するために使用されるコマンドは何ですか?

66
Jeremiah Rose
  1. リンクを配置するディレクトリに移動します
  2. コマンドln -s ../some/other/file linknameを実行します

指定したパスはファイルとともに保存されます。ファイルにアクセスすると、保存されているパスが検索され、ファイルに対して相対的に展開されます。リンクを作成したときのディレクトリはわかりません。

79
Jeremiah Rose

GNU coreutils 'ln(> = 8.16)の最近のバージョンは、_--relative_(または_-r_)オプションをサポートしています。つまり、2つの絶対値で_ln -s_を呼び出すことができますまたは(作業ディレクトリに対する)相対パスと、シンボリックリンクに書き込む必要がある正しい相対パスがわかります。

32
Bluewind

基本的に、シンボリックリンクは、ファイルを含むディレクトリエントリよりもテキストファイルに近いということを理解する必要があります。だからあなたなら

echo ../poo >/file/name

それはに非常に似ています

ln -s ../poo /file/name

システムは/file/../pooはまったく存在します。これは、シンボリックリンクに挿入されるテキストの一部です。何かがopenシンボリックリンクを試みたとき、それはシステムがそれを解決しようとしたときです。

ファイル名補完機能を備えたシェルを使用している場合、この機能を使用すると、完全に別のディレクトリのシンボリックリンクのターゲットとして使用した場合でも、現在の作業ディレクトリを基準にファイル名を補完できるため、混乱を招く可能性があります。

2
tripleee

相対リンクは、OS Xで私にとって扱いにくいものでした。

~/Dropbox/git/dave-bot $ ln -s ../codyhess/bin ~/bin
~/Dropbox/git/dave-bot $ ln -s ../codyhess/bin/ ~/bin

どちらも機能しませんでした(何かが作成されましたが、それはディレクトリではありませんでした)。 絶対パスを使用して目的のリンクを作成しました。

~/Dropbox/git/dave-bot $ ln -s ~/Dropbox/git/codyhess/bin/ ~/bin
0
Cody Hess

相対パスを使用してシンボリックリンクを作成する方法をさらに詳しく説明したかっただけです(詳細な例を示します)。

Ignacio Vazquez-Abramsがコメントで述べたように、シンボリックリンクが作成される場所に相対的なファイル/フォルダーの場所を指定する必要があります。現在のディレクトリではありません。

/usr/share/nginx/html/_src/learnにいます/usr/share/nginx/htmlにシンボリックリンクcodingを作成します

相対シンボリックリンクを作成(理論):

Sudo ln -s /path/to/source/file-or-folder/relative/from/symlink /path/to/symlink/relative/to/current/location

実際の相対シンボリックリンクを作成:

Sudo ln -s ./_src/learn/coding ../../coding

詳細(同じ例)

current path:                                  /usr/share/nginx/html/_src/learn
symlink(to be) relative to current path:       ../../coding                 
symlink location (absolute):                   /usr/share/nginx/html/coding
folder/file relative to symlink location:      ./_src/learn/coding
folder/file absolute path:                     /usr/share/nginx/html/_src/learn/coding  
0
TryHarder