Saya perlu symlink yang menyelesaikan relatif terhadap direktori itu ditempatkan. Perintah apa yang digunakan untuk membuat hal seperti itu?
Saya perlu symlink yang menyelesaikan relatif terhadap direktori itu ditempatkan. Perintah apa yang digunakan untuk membuat hal seperti itu?
Jawaban:
ln -s ../some/other/file linkname
Jalur yang Anda berikan disimpan dengan file. Saat Anda mengakses file, jalur yang disimpan terlihat dan diperluas relatif ke file. Tidak tahu direktori tempat Anda berada saat membuat tautan.
ln -s ../some/other/file /some/dir/linkname
ln -s ./file linkname
karena .
merujuk ke direktori saat ini.
ln -s somedir/original-dir link-name
tidak bekerja. Itu membuat direktori dengan nama link-name
yang berisi tautan yang tidak valid. Perintah yang berfungsi adalahln -sr somedir/original-dir link-name
Versi terbaru dari GNU coreutils ln (> = 8.16) mendukung opsi --relative
(atau -r
) yang berarti Anda dapat memanggil ln -s
dengan jalur 2 absolut atau relatif (terkait dengan direktori kerja Anda) dan akan mengetahui jalur relatif yang benar yang harus ditulis ke symlink.
-r
pilihan adalah membantu ketika Anda cross-compiling dan perlu path absolut pada membangun host tetapi path relatif pada target.
ln -r -s targetfile myalias
dapat membantu Anda memperbaikinya
Yang perlu Anda pahami pada dasarnya adalah bahwa symlink lebih seperti file teks daripada seperti entri direktori yang berisi file. Jadi jika kamu
echo ../poo >/file/name
maka itu sangat mirip dengan
ln -s ../poo /file/name
Sistem tidak peduli jika /file/../poo
ada sama sekali, itu hanya sepotong teks yang dimasukkan ke dalam symlink. Ketika sesuatu mencoba membuka symlink, saat itulah sistem mencoba untuk menyelesaikannya.
Jika Anda menggunakan shell dengan penyelesaian nama file, fitur ini dapat membingungkan hal-hal dengan memungkinkan Anda untuk melengkapi nama file relatif ke direktori kerja Anda saat ini, bahkan jika Anda kemudian menggunakannya sebagai target symlink di sepenuhnya direktori lain.
<
mengubah bagaimana sistem dialokasikan memori. Tentu saja tidak ada file yang disebutkan <
dalam direktori itu, itu hanya cara murah untuk membuat hal seperti file yang sangat kecil yang memiliki beberapa properti menarik di atas file teks biasa pada platform tertentu.
Tautan relatif sulit bagi saya di OS X, yaitu
~/Dropbox/git/dave-bot $ ln -s ../codyhess/bin ~/bin
~/Dropbox/git/dave-bot $ ln -s ../codyhess/bin/ ~/bin
keduanya tidak berfungsi (ada sesuatu yang dibuat tetapi itu bukan direktori). Saya membuat tautan yang diinginkan dengan menggunakan jalur absolut .
~/Dropbox/git/dave-bot $ ln -s ~/Dropbox/git/codyhess/bin/ ~/bin
ln -s Dropbox/git/codyhess/bin ~/bin
Saya hanya ingin menjelaskan lebih lanjut cara membuat symlink menggunakan jalur relatif (dengan contoh terperinci).
Seperti yang disebutkan Ignacio Vazquez-Abrams dalam komentar, Anda harus menentukan lokasi file / folder relatif ke tempat symlink akan dibuat, bukan relatif terhadap direktori Anda saat ini.
CONTOH
Anda berada di /usr/share/nginx/html/_src/learn
Anda akan membuat symlink coding
di/usr/share/nginx/html
Buat symlink relatif (teori):
sudo ln -s /path/to/source/file-or-folder/relative/from/symlink /path/to/symlink/relative/to/current/location
Buat symlink relatif aktual:
sudo ln -s ./_src/learn/coding ../../coding
Informasi lebih lanjut (contoh yang sama)
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