Saya memiliki symlink dengan izin ini:
lrwxrwxrwx 1 myuser myuser 38 Aug 18 00:36 npm -> ../lib/node_modules/npm/bin/npm-cli.js*
Symlink terletak di arsip .tar.gz. Sekarang ketika saya membongkar arsip tar.gz menggunakan maven symlink tidak lagi valid. Karena itu saya mencoba merekonstruksi symlink. Pertama saya membuat symlink menggunakan ln tetapi bagaimana cara mengatur izin yang sama dengan symlink asli?
Saat Anda mencoba menggunakan
chmod
untuk mengatur izin tautan, yang sebenarnya Anda lakukan adalah mengatur izin target tautan. Izin tautan tidak ada artinya.sumber
test
dengan-rw-rw-r-- root root
, untukrm test
saya menerima konfirmasirm: remove write-protected regular empty file 'test'?
. Solusinya adalah menempatkan file sensitif dalam direktori di mana pengguna memiliki akses hanya baca.Ketika Anda memiliki tautan seperti:
dan ingin mengubahnya menjadi:
Ada dua hal yang perlu dipertimbangkan:
foo/bar
bukan direktori atau tidak ada atau Anda tidak memiliki akses pencarianfoo
. Kemudianakan gagal karena
link
sudah ada, tetapi Anda dapat mengatasinya dengan menggunakan standar:foo/bar
adalah direktori (dan Anda memiliki izin pencarianfoo
untuk dapat menentukan itufoo/bar
adalah direktori). Dalam hal itu, ketika Anda melakukannya:atau
Itu dipahami sebagai membuat
target
symlink baru di dalamlink
direktori (link
adalah direktori karena itu adalah symlink kefoo/bar
direktori). Jadi, Anda akan benar-benar membuat:Untuk mengatasinya, GNU
ln
memiliki-T
opsi agar nama tautan selalu dianggap sebagai nama tautan, dan bukan sebagai direktori untuk membuat tautan. Jadi, dengan GNUln
:akan bekerja. Seperti sebelumnya, itu akan menghapus
link
symlink asli dan membuatnya lagi dengannew/target
sebagai target (dan proses 'euid dan egid sebagai pemilik).GNU
ln
juga memiliki-n
opsi. Ini berfungsi seperti-T
kecuali ketikalink
sebenarnya merupakan direktori nyata dalam hal ini masih akan membuat symlink di dalam direktori itu (bukannya gagal dengan kesalahan).Mudah-mudahan, opsi terbaik Anda adalah menghapus tautan terlebih dahulu dan kemudian membuatnya kembali:
Pada sebagian besar sistem, izin pada symlink diabaikan dan umumnya diperbaiki
rwxrwxrwx
.Pada sistem di mana perizinan symlink penting (seperti OS / X di mana Anda memerlukan izin baca untuk symlink untuk dapat menyelesaikan targetnya), umumnya ada cara untuk mengubahnya (
chmod -h
pada OS / X).Kepemilikan, sementara seperti di atas tidak relevan untuk akses ke file yang ditunjuk oleh symlink pada kebanyakan sistem, dapat memiliki beberapa relevansi lain dengan
t
sedikit direktori induk atau kuota ... ) dan ada perintah standar untuk mengubahnya:sumber
Jika Anda benar-benar perlu mengubah izin symlink (biasanya tidak berarti, seperti yang ditulis dalam jawaban lain), saya berhasil menggunakan
-R
opsichown
:Jika
-R
tidak digunakan, izin tidak diubah.sumber
chown
karena-R
tersirat di-P
sana, namun itu tidak dijamin dan tidak akan bekerja di beberapa implementasi chown lainnya. Cara standar untuk mengubah kepemilikan symlink adalah dengan-h
opsi. Saya baru saja memperbarui jawaban yang diterima yang tidak benar.