Відповіді:
Ви можете видалити його з rm
як зазвичай: rm NameOfFile
. Зауважте, що при жорстких посиланнях немає різниці між "вихідним файлом" та "посиланням на файл": у вас є лише два імені для одного файлу, а видалення лише одного з імен не видалить інше.
sudo
), якщо ви створили його за допомогою вказаної вами команди (як суперкористувача).
У мене є цей скрипт для видалення зайвих жорстких посилань. Але подбайте - це досить небезпечно.
#!/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=1
if [ a$1 == "a-R" ]; then recursive=" -R "; fi
for i in $(ls -i $recursive | awk '{print $1}' | uniq --repeated | sort);
do
echo "Inode with multiple hardlinked files: $i"
first=1
for foundfile in $(find . -xdev -inum $i);
do
if [ $first == 1 ]; then
echo " preserving the first file: $foundfile"
first=0
else
echo " deleting the redundant file: $foundfile"
#rm $foundfile
fi
done
if [ $ask == 1 ]; then
read -p "Delete all the rest of redundant hardlinks without asking? y/N "
if [ a${REPLY,,} == "ay" ]; then ask=0; fi
fi
# read -p "pause for sure"
echo
done
echo "All redundant hardlins are removed."
echo
Насправді rm
не працює:
[user@localhost Products]$ rm AZP/
rm: cannot remove `AZP/': Is a directory
[user@localhost Products]$ rm -r AZP/
rm: cannot remove `AZP': Not a directory
Що працює unlink AZP
.
AZP/
схоже на каталог, rm не працює в каталогах без рекурсивного прапора. Також згідно з документами про Coreutills. >>> Більшість систем забороняє робити жорстке посилання на каталог; на тих, де це дозволено, лише суперкористувач може це зробити (і з обережністю, оскільки створення циклу спричинить проблеми для багатьох інших утиліт).
AZP
символічне посилання на каталог (або що-небудь інше) rm AZP/
не буде працювати, тому що rm
вважає його каталогом (через /
кінець). Однак rm AZP
буде добре працювати. -1
Якщо ви хочете видалити лише посилання і таким чином зберегти початковий файл, вам доведеться скористатися від’єднанням.
unlink(1)
робить? Це неглибока обгортка навколо unlink(2)
системного виклику, той самий системний виклик, який rm(1)
використовується для всіх файлів, які не є каталогами.
unlink
, незважаючи на своє ім'я, не розділить жорстке посилання на два окремі файли, але видалить запис "відключеного" каталогу (але не файл / вміст / індекція, якщо кількість посилань становить> 1).
ln -n /path/to/file
створює файл, названийfile
у поточному каталозі, і це скорочений текстln --no-dereference /path/to/file
. Це означає, що якщо/path/to/file
символічне посилання, щойно створене тверде посилання вкаже на це символьне посилання замість цілі символьного посилання.