GNU/Linux >> Belajar Linux >  >> Linux

Terlalu banyak level tautan simbolik

Seperti yang ditunjukkan Dubu dalam komentar, masalahnya terletak pada jalur relatif Anda. Saya memiliki masalah serupa saat menghubungkan konfigurasi nginx saya dari /usr/local/etc/nginx ke /etc/nginx . Jika Anda membuat symlink seperti ini:

cd /usr/local/etc
ln -s nginx/ /etc/nginx

Anda sebenarnya akan membuat tautan /etc/nginx -> /etc/nginx, karena jalur sumber relatif terhadap jalur tautan. Solusinya sesederhana menggunakan jalur absolut:

ln -s /usr/local/etc/nginx /etc/nginx

Jika Anda ingin menggunakan jalur relatif dan membuatnya berperilaku seperti yang Anda harapkan, Anda dapat menggunakan pwd untuk memasukkan jalur direktori kerja saat ini, seperti:

cd /usr/local/etc
ln -s "$(pwd)/nginx/" /etc/nginx

Anda ingin memiliki tanda kutip di sekitar jalur, untuk memastikan hal-hal seperti spasi di jalur Anda saat ini lolos. Perhatikan bahwa Anda harus menggunakan tanda kutip ganda saat melakukan ini, seperti $(pwd) tidak akan diganti jika Anda menggunakan tanda kutip tunggal.


Di permukaan, apa yang Anda sarankan telah Anda coba berhasil untuk saya.

Contoh

$ mkdir -p test/src test/firefox

$ tree --noreport -fp
.
`-- [drwxrwxr-x]  ./test
    |-- [drwxrwxr-x]  ./test/firefox
    `-- [drwxrwxr-x]  ./test/src

Buat tautan simbolis:

$ ln -s test/src test/firefox

$ tree --noreport -fp
.
`-- [drwxrwxr-x]  ./test
    |-- [drwxrwxr-x]  ./test/firefox
    |   `-- [lrwxrwxrwx]  ./test/firefox/src -> test/src
    `-- [drwxrwxr-x]  ./test/src

Menjalankannya untuk kedua kalinya biasanya akan menghasilkan ini:

$ ln -s test/src test/firefox
ln: failed to create symbolic link ‘test/firefox/src’: File exists

Jadi Anda mungkin memiliki sesuatu yang lain terjadi di sini. Saya menduga Anda memiliki referensi melingkar di mana tautan mengarah kembali ke dirinya sendiri.

Anda dapat menggunakan find untuk menyelidiki ini sedikit:

$ cd /suspected/directory
$ find -L ./ -mindepth 15

Symlink relatif terhadap direktori induk tautan, bukan direktori saat ini dari ln proses.

Saat Anda melakukannya:

cd /top/dir
ln -s test/src test/firefox

(di mana test/firefox adalah direktori), Anda membuat test/firefox/src symlink yang targetnya adalah test/src .

test/src itu relatif terhadap test/firefox direktori, jadi itu adalah symlink ke /top/dir/test/firefox/test/src .

Jika Anda ingin symlink itu menjadi tautan ke /top/dir/test/src , Anda harus menulis:

ln -s ../src test/firefox/

Atau

ln -s /top/dir/test/src test/firefox/

meskipun biasanya merupakan ide yang buruk untuk membuat symlink ke jalur absolut karena mudah rusak saat direktori diganti namanya atau sistem file dipasang di tempat lain.

Dengan GNU ln , Anda dapat menggunakan -r opsi untuk membiarkannya menghitung sendiri:

$ ln -rs test/src test/firefox/
$ ls -ld test/firefox/src
lrwxrwxrwx 1 chazelas chazelas 6 Nov 29 15:59 test/firefox/src -> ../src

Linux
  1. Menyelesaikan kesalahan Mysql:Terlalu banyak file yang terbuka

  2. Terlalu banyak kesalahan koneksi di MySQL

  3. Variabel lingkungan dalam tautan simbolik

  1. Perilaku cd/bash pada tautan simbolik

  2. Batch Perbarui Tautan Simbolik Secara Rekursif

  3. Terlalu banyak file yang terbuka di Debian

  1. Perintah Ln:Cara Membuat Tautan Simbolik di Linux

  2. Bagaimana cara menyalin tautan simbolik?

  3. s3cmd gagal berkali-kali