Buat tautan simbolik direktori di Ubuntu [ditutup]

247

Di bawah ini adalah kode saya untuk membuat symlink direktori:

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

Saya sudah membuat direktori /etc/nginx. Saya hanya ingin isi direktori sumber ( /usr/local/nginx/conf/) berada di isi direktori target ( /etc/nginx). Tetapi ketika saya menjalankan kode, /etc/nginxberisi direktori yang disebut conf, bukan isiconf . Direktori itu berisi konten yang saya inginkan, tetapi di lokasi yang salah.

Mengapa ia meletakkan direktori di folder target, alih-alih hanya meletakkan konten direktori di folder target?

nbro
sumber
Anda juga dapat menggunakan File (browser file default). Klik kanan pada folder yang ingin Anda tautkan> opsi "Buat Tautan". Ini akan membuat folder tertaut yang dapat Anda pindahkan dan ganti namanya sesuai kebutuhan.
John Linhart
4
Gunakan bind mountfitur linux . contoh
gkiko

Jawaban:

254

Ini adalah perilaku lnjika argumen kedua adalah direktori. Ini menempatkan tautan ke arg pertama di dalamnya . Jika Anda ingin /etc/nginxmenjadi symlink, Anda harus menghapus direktori itu terlebih dahulu dan menjalankan perintah yang sama.

Kesalahan fatal
sumber
10
Tautan Unix.SE dipecahkan kembali di sini. Sepertinya kita punya ketergantungan melingkar.
kaiser
30

Itulah yang lndidokumentasikan untuk dilakukan ketika target sudah ada dan merupakan direktori. Jika Anda ingin /etc/nginxuntuk menjadi symlink daripada mengandung symlink, Anda sebaiknya tidak membuat sebagai direktori pertama!

Celada
sumber
51
Jawaban Anda hanya masuk akal dalam konteks pembaca yang sudah mengetahui jawabannya. Tidak ada gunanya bagi siapa pun yang mengajukan pertanyaan
Ricardo Saporta
1
Dapatkah saya benar-benar membuat symlink ke root perangkat USB yang terpasang (sehingga saya tidak dapat menghapus folder ini terlebih dahulu)?
Grigory Kornilov
1
@GrigoryKornilov Anda dapat membuat symlink ke apa pun yang Anda inginkan, termasuk sesuatu yang tidak ada. Pertanyaan ini bukan tentang tempat symlink dibuat (bukan ke mana ia menunjuk ke). Pathname tertentu dalam sistem file adalah file biasa atau direktori atau symlink (atau soket atau pipa atau perangkat). Tidak boleh lebih dari satu hal pada saat yang bersamaan (yaitu Anda tidak dapat memiliki lebih dari satu file berbeda dengan nama yang persis sama).
Celada
10

Dalam skrip berguna sesuatu seperti ini:

if [ ! -d /etc/nginx ]; then ln -s /usr/local/nginx/conf/ /etc/nginx > /dev/null 2>&1; fi

itu mencegah sebelum membuat kembali symlink loop "buruk" setelah menjalankan kembali skrip

kayn
sumber
1
Luar biasa! Ini solusi tepat. tidak perlu membuat direktori jika sudah ada. Ini adalah tweak yang sangat bagus untuk tautan keras dan menenggelamkannya di lubang hitam (/ dev / null)
Cosmo Arun