Saya mencoba untuk lebih memahami tautan simbolik ... dan tidak memiliki banyak keberuntungan. Ini adalah keluaran shell saya yang sebenarnya dengan nama pengguna / host diubah:
username@host:~$ mkdir actual
username@host:~$ mkdir proper
username@host:~$ touch actual/file-1.txt
username@host:~$ echo "file 1" > actual/file-1.txt
username@host:~$ touch actual/file-2.txt
username@host:~$ echo "file 2" > actual/file-2.txt
username@host:~$ ln -s actual/file-1.txt actual/file-2.txt proper
username@host:~$ # Now, try to use the files through their links
username@host:~$ cat proper/file-1.txt
cat: proper/file-1.txt: No such file or directory
username@host:~$ cat proper/file-2.txt
cat: proper/file-2.txt: No such file or directory
username@host:~$ # Check that actual files do in fact exist
username@host:~$ cat actual/file-1.txt
file 1
username@host:~$ cat actual/file-2.txt
file 2
username@host:~$ # Remove the links and go home :(
username@host:~$ rm proper/file-1.txt
username@host:~$ rm proper/file-2.txt
Saya berpikir bahwa tautan simbolik seharusnya beroperasi secara transparan, dalam arti bahwa Anda dapat beroperasi pada file yang menunjuk seolah-olah Anda mengakses file secara langsung (kecuali tentu saja dalam kasus di rm
mana tentu saja tautannya hanya dihapus ).
linux
ubuntu
bash
symbolic-link
orokusaki
sumber
sumber
df -T
) - apakah hasil di atas juga aneh bagi Anda?Jawaban:
Symlink cenderung menyukai jalur penuh atau relatif ke tautan, jika tidak mereka sering dapat mencari
file-1.txt
secara lokal (cukup aneh).Arahkan ke
proper
dan jalankanls -l
dan Anda dapat melihat bahwa symlink sedang mencariactual/file-1.txt
, kapan seharusnya../actual/file-1.txt
.Jadi, Anda memiliki dua opsi:
Berikan jalan penuh
Arahkan ke folder yang Anda inginkan tautannya dan tautkan dari sana
Sunting : Sebuah petunjuk untuk menyimpan pengetikan.
Anda bisa melakukannya
ln -s ~/actual/file-{1,2}.txt ~/proper
Barang-barang di kurung kurawal diganti dan ditempatkan setelah satu sama lain, menciptakan perintah
sumber
rm -rf *
ke folder yang terhubung - Anda dapat menghapus folder yang terhubung dengannya. Lakukan saja symlinkname rm. Hanya beberapa hal yang saya buat salah: DMasalahnya adalah penggunaan jalur relatif. Jika Anda menentukan kreasi tautan Anda dengan jalur eksplisit penuh, ini berfungsi.
Contoh Anda membuat tautan dalam
proper
tampilan itu untuk subdirektori yang bernama aktual di bawah direktori saat ini, alih-alih sebagai induk dari keduanya.sumber
Tautan simbolis bisa rumit. Intinya, tautan simbolik adalah file yang berisi nama file / pathname untuk file lain (dan yang ditandai untuk perlakuan khusus). Jika pathname dalam file tautan dimulai dengan '
/
', maka itu diperlakukan sebagai pathname absolut, dan segalanya cukup mudah. Jika tidak dimulai dengan garis miring, ini diperlakukan sebagai pathname relatif - relatif terhadap direktori tempat tautan berada. (Ini benar apakah namanya mengandung garis miring atau tidak.) Jadi, Anda membuatproper/file–1.txt
tautan ke "actual/file–1.txt
", dan ketika Anda mencoba mengaksesnya, sistem mencoba mengaksesnyaproper/actual/file–1.txt
. Anda seharusnya mengatakannyaNgomong-ngomong, Anda tidak perlu
touch
perintah.echo "file 1" > actual/file–1.txt
cukup untuk membuatactual/file–1.txt
.sumber
Masalah terkait, dan mungkin terlihat jelas bagi banyak orang, tetapi membuat saya bingung selama beberapa menit: jika Anda membuat symlink di dalam direktori yang disinkronkan dengan sendirinya, atau ada symlink di jalur direktori kerja saat ini, Anda mungkin mengalami masalah dengan symlink yang tidak berfungsi.
Gunakan
cd ..
danls -l
berulang kali, untuk melihat apakah direktori orang tua Anda sendiri terhubung.Jika Anda perlu membuat symlink,
cd
ke direktori Target asli, dan membuat symlink baru di sana, sehingga jalur relatifnya akurat.Atau dengan kata lain: jalur relatif adalah dari Asal ke Target. Jika Origin kemudian disinkronkan, tidak apa-apa. Tapi Anda mungkin mengalami masalah dalam menyiapkan Origin nama link baru dalam direktori yang dengan sendirinya entah bagaimana disinkronkan.
sumber
cd ..
danls -l
berulang kali", Anda bisa menggunakannamei -mox $PWD
. Cara lain yang bermanfaat untuk mengetahui apakah ada symlink di sepanjang path adalah dengan menggunakanpwd -P
, yang memberi Anda path ke direktori saat ini yang tidak mengandung symlink (jadi jikapwd
danpwd -P
memberikan output yang berbeda, Anda tahu ada symlink di suatu tempat di sepanjang jalan) ).Ketika Anda mencoba membuat tautan ke file yang tidak ada (atau Anda telah memberikan jalurnya dengan salah) ln -s tidak menimbulkan kesalahan. Itu membuat tautan tetapi ketika Anda mencoba 'cat' pada tautan itu dikatakan tidak ada file yang ditemukan. Bahkan ketika Anda bisa melihatnya menggunakan ls. Dalam kasus seperti itu, selalu periksa ulang jalur file Anda.
Karena file etc / ufw / ufw.conf tidak ada. Jalur yang benar adalah /etc/ufw/ufw.conf
sumber
ln -s
"kadang-kadang" tidak memeriksa keberadaan target itu salah.