FYI: ln -n /path/to/filemembuat file bernama filedi direktori saat ini dan singkatan untuk ln --no-dereference /path/to/file. Ini berarti bahwa jika /path/to/fileini adalah tautan simbolik, hardlink yang baru dibuat akan menunjuk ke symlink itu dan bukan target symlink.
Lekensteyn
Jawaban:
37
Anda dapat menghapusnya dengan rmseperti biasa: rm NameOfFile. Perhatikan bahwa dengan tautan keras tidak ada perbedaan antara "file asli" dan "tautan ke file": Anda hanya memiliki dua nama untuk file yang sama, dan menghapus hanya satu nama tidak akan menghapus yang lain.
Juga ote Anda perlu rm sebagai root (gunakan sudo), jika Anda membuatnya dengan perintah yang Anda berikan (sebagai super-user).
Rafał Cieślak
3
@ RafałCieślak: Salah. Semua tautan keras ke inode berbagi izin akses yang sama, yaitu inode. Untuk menghapus, yaitu "batalkan tautan", entri direktori dari file yang Anda butuhkan izin tulis pada inode file itu dan pada direktori yang berisi entri yang ingin Anda hapus. Oleh karena itu tidak relevan hak istimewa apa yang digunakan untuk membuat tautan keras. Mereka mungkin kebetulan (masih) sama dengan pada saat penciptaan.
David Foerster
2
Saya memiliki skrip ini untuk menghapus tautan keras yang berlebihan. Tapi hati-hati - ini cukup berbahaya.
#!/bin/bash
clear
echo Reduce redundant hardlinks in the current folder
echo ------------------------------------------------
echo
echo " $(basename $0) [-R]"
echo " -R means recursive"
echo
read -p "You can break by pressing Ctrl+C"
echo
ask=1if[ a$1 =="a-R"];then recursive=" -R ";fifor i in $(ls -i $recursive | awk '{print $1}'| uniq --repeated | sort);do
echo "Inode with multiple hardlinked files: $i"
first=1for foundfile in $(find .-xdev -inum $i);doif[ $first ==1];then
echo " preserving the first file: $foundfile"
first=0else
echo " deleting the redundant file: $foundfile"#rm $foundfile fidoneif[ $ask ==1];then
read -p "Delete all the rest of redundant hardlinks without asking? y/N "if[ a${REPLY,,}=="ay"];then ask=0;fifi# read -p "pause for sure"
echo
done
echo "All redundant hardlins are removed."
echo
Apakah Anda yakin tautan Anda keras? Hard link sama seperti file iirc.
Seth
@Seth, sebenarnya saya tidak ingat apa itu, tetapi tidak ingin menghapus seperti yang Anda lihat. Seseorang mengatakan kepada saya untuk menggunakan pembatalan tautan dan itu berhasil. :)
Bunyk
Itu mungkin karena AZP adalah file, bukan direktori, tetapi saya tidak bisa memastikan tanpa informasi lebih lanjut. Putuskan tautan harus selalu berfungsi, jadi tidak ada masalah di sana.
Seth
1
AZP/terlihat seperti direktori, rm tidak beroperasi pada direktori tanpa tanda rekursif. Juga menurut dokumentasi coreutills. >>> Sebagian besar sistem melarang membuat tautan keras ke direktori; pada yang diizinkan, hanya pengguna super yang dapat melakukannya (dan dengan hati-hati, karena membuat siklus akan menyebabkan masalah bagi banyak utilitas lain).
ThorSummoner
2
Tautan keras ke direktori dilarang. Jika AZPtautan simbolis ke direktori (atau apa pun) rm AZP/tidak akan berfungsi karena rmmenganggap itu direktori (karena /pada akhirnya). Namun rm AZPakan bekerja dengan baik. -1
David Foerster
0
Jika Anda hanya ingin menghapus tautan dan menyimpan file aslinya, Anda harus menggunakan pembatalan tautan.
Sudahkah Anda membaca apa unlink(1)? Ini adalah pembungkus dangkal di sekitar unlink(2)panggilan sistem, panggilan sistem yang sama yang rm(1)digunakan untuk semua file yang bukan direktori.
David Foerster
1
Jawaban ini menyesatkan. Dengan file yang di-link, tidak ada perbedaan antara "tautan" dan "file asli"; semua hardlink merujuk ke file / konten / inode yang sama, diwakili oleh entri direktori yang berbeda. unlink, terlepas dari namanya, tidak akan memisahkan hardlink menjadi dua file terpisah, tetapi menghapus entri direktori "tidak terhubung" (tetapi bukan file / konten / inode, selama jumlah tautannya> 1).
ln -n /path/to/file
membuat file bernamafile
di direktori saat ini dan singkatan untukln --no-dereference /path/to/file
. Ini berarti bahwa jika/path/to/file
ini adalah tautan simbolik, hardlink yang baru dibuat akan menunjuk ke symlink itu dan bukan target symlink.Jawaban:
Anda dapat menghapusnya dengan
rm
seperti biasa:rm NameOfFile
. Perhatikan bahwa dengan tautan keras tidak ada perbedaan antara "file asli" dan "tautan ke file": Anda hanya memiliki dua nama untuk file yang sama, dan menghapus hanya satu nama tidak akan menghapus yang lain.sumber
sudo
), jika Anda membuatnya dengan perintah yang Anda berikan (sebagai super-user).Saya memiliki skrip ini untuk menghapus tautan keras yang berlebihan. Tapi hati-hati - ini cukup berbahaya.
sumber
Sebenarnya
rm
tidak berfungsi:Apa yang berhasil
unlink AZP
.sumber
AZP/
terlihat seperti direktori, rm tidak beroperasi pada direktori tanpa tanda rekursif. Juga menurut dokumentasi coreutills. >>> Sebagian besar sistem melarang membuat tautan keras ke direktori; pada yang diizinkan, hanya pengguna super yang dapat melakukannya (dan dengan hati-hati, karena membuat siklus akan menyebabkan masalah bagi banyak utilitas lain).AZP
tautan simbolis ke direktori (atau apa pun)rm AZP/
tidak akan berfungsi karenarm
menganggap itu direktori (karena/
pada akhirnya). Namunrm AZP
akan bekerja dengan baik. -1Jika Anda hanya ingin menghapus tautan dan menyimpan file aslinya, Anda harus menggunakan pembatalan tautan.
sumber
unlink(1)
? Ini adalah pembungkus dangkal di sekitarunlink(2)
panggilan sistem, panggilan sistem yang sama yangrm(1)
digunakan untuk semua file yang bukan direktori.unlink
, terlepas dari namanya, tidak akan memisahkan hardlink menjadi dua file terpisah, tetapi menghapus entri direktori "tidak terhubung" (tetapi bukan file / konten / inode, selama jumlah tautannya> 1).