Saya punya struktur file berikut:
build/
client/
–> index.js
Dan ketika saya mencoba membuat tautan simbolis bernama "klien" di dalam direktori build yang merujuk ke direktori klien di cwd seperti itu
// Fails
$ pwd
/home/user/
$ ln -s client build/client
$ stat build/client/index.js
stat: build/client/index.js: stat: Too many levels of symbolic links
Saya mendapatkan kesalahan ELOOP yang ditampilkan di atas. Ketika saya mengubah jalur target menjadi relatif ke jalur tujuan, semuanya baik:
// Works
$ pwd
/home/user/
$ ln -s ../client build/client
$ stat build/client/index.js
stat: <outputs file stats>
Apakah ini perilaku yang dimaksudkan dan tolong jelaskan mengapa ...
Jawaban:
Untuk yang tidak berfungsi, jika kita melihat
ls -l
hasilnya, kita mendapatkan yang berikut:Sekarang untuk mengerti apa yang sedang terjadi di sini. Mari kita lihat perintah yang Anda panggil:
Menurut Man Page, ada dua kemungkinan kecocokan untuk format ini
Ini akan cocok pada formulir pertama (sejak yang pertama). Sekarang, "nama target" atau
client
dalam kasus Anda, dapat (menurutln
manual lengkap ) string acak. Mereka tidak harus memutuskan untuk apa pun sekarang, tetapi dapat menyelesaikan sesuatu di masa depan. Apa yang Anda buat dengan permintaan Anda adalah "tautan terjuntai" dan sistem tidak membuat Anda tidak membuatnya.Sekarang doa kedua Anda
ln -s ../client build/client
adalah apa yang disebut "symlink relatif" (seperti yang Anda catat dalam posting Anda sendiri). Ada tipe kedua dan itu adalah "symlink absolut" yang akan dipanggil dengan melakukanln -s /home/user/client build/client
.Ini bukan bug. Menurut manual itu menyatakan:
Karena itu, Anda HARUS menggunakan jalur relatif atau absolut ke target.
sumber
Ini memang perilaku yang dimaksud. Dari
ln(1)
halaman manual:Mengenai alasannya, bayangkan jika symlink bukannya ditafsirkan relatif terhadap sumbernya daripada tujuannya. Ketika nanti menyelesaikannya, Anda harus tahu apa CWD Anda saat Anda membuatnya, yang tidak masuk akal, apalagi mustahil.
Selain itu, dengan cara ini Anda mendapatkan metode yang rapi dan kompak untuk membuat struktur direktori kerangka yang bisa Anda jatuhkan di mana saja di pohon direktori tanpa memutus symlink.
Untuk memberi Anda contoh tentang apa yang saya maksud, katakanlah Anda sedang mengerjakan sebuah proyek dan Anda memiliki seluruh struktur direktori yang diatur untuk itu seperti:
Sekarang anggaplah Anda ingin membuat symlink ke
widgets/
dalamwizardry/
. Anda memiliki dua opsi:atau
Jika Anda kemudian mencoba pindah ke
/home/you/project
tempat lain, symlink yang dibuat dengan bentuk pertama akan rusak karena sedang dicari/home/you/project/widgets
. Bentuk kedua akan menjaga symlink berfungsi karena mencari../widgets
relatif ke tempat di mana, di mana pun tempat itu berada di pohon direktori.sumber