FYI: ln -n /path/to/fileсоздает файл с именем fileв текущем каталоге и является сокращением для ln --no-dereference /path/to/file. Это означает, что, если /path/to/fileэто символическая ссылка, вновь созданная жесткая ссылка будет указывать на эту символическую ссылку вместо цели символической ссылки.
Лекенштейн
Ответы:
37
Вы можете удалить его с rmкак обычно: rm NameOfFile. Обратите внимание, что в случае жестких ссылок нет различий между «исходным файлом» и «ссылкой на файл»: у вас просто два имени для одного и того же файла, и удаление только одного из них не приведет к удалению другого.
Также отметьте, что вам нужно будет ввести его как root (использовать sudo), если вы создали его с помощью предоставленной вами команды (как суперпользователь).
Rafał Cieślak
3
@ RafałCieślak: Неправильно. Все жесткие ссылки на индексные узлы имеют те же права доступа, что и индексные. Чтобы удалить, т. Е. «Отсоединить», запись каталога в файле, для которого вам нужны разрешения на запись в индекс этого файла и в каталог, содержащий запись, которую вы хотите удалить. Поэтому не имеет значения, какие привилегии были использованы для создания жесткой ссылки. Они могут просто случиться (все еще) так же, как во время создания.
Дэвид Фёрстер
2
У меня есть этот скрипт для удаления избыточных жестких ссылок. Но будьте осторожны - это довольно опасно.
#!/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
Ты уверен, что твоя была жесткой ссылкой? Жесткие ссылки похожи на файлы iirc.
Сет
@ Сидит, на самом деле я не помню, что это было, но это не хочет удалять, как вы могли видеть. Кто-то сказал мне использовать unlink, и это сработало. :)
Bunyk
Вероятно, это потому, что AZP был файлом, а не каталогом, но я не мог быть уверен без дополнительной информации. Unlink всегда должен работать, поэтому никаких проблем нет.
Сет
1
AZP/выглядит как каталог, rm не работает с каталогами без рекурсивного флага. Также в соответствии с документами Coreutills. >>> Большинство систем запрещают делать жесткую ссылку на каталог; на тех, где это разрешено, только суперпользователь может сделать это (и с осторожностью, поскольку создание цикла вызовет проблемы для многих других утилит).
ThorSummoner
2
Жесткие ссылки на каталоги запрещены. Если AZPэто символическая ссылка на каталог (или что-то еще) rm AZP/не будет работать, потому что rmсчитает его каталогом (из- /за конца). Однако rm AZPбудет работать просто отлично. -1
Дэвид Фёрстер
0
Если вы хотите удалить только ссылку и, таким образом, сохранить оригинальный файл, вы должны использовать unlink.
Вы читали, что unlink(1)делает? Это мелкая оболочка для unlink(2)системного вызова, тот же системный вызов, который rm(1)используется для всех файлов, которые не являются каталогами.
Дэвид Фёрстер
1
Этот ответ вводит в заблуждение. В жестко связанных файлах нет различия между «ссылкой» и «исходным файлом»; все жесткие ссылки относятся к одному и тому же файлу / содержимому / индоду, представленному разными записями каталога. unlink, несмотря на его имя, не будет разделять жесткую ссылку на два отдельных файла, но удалит «несвязанную» запись каталога (но не файл / content / inode, если количество ссылок> 1).
ln -n /path/to/file
создает файл с именемfile
в текущем каталоге и является сокращением дляln --no-dereference /path/to/file
. Это означает, что, если/path/to/file
это символическая ссылка, вновь созданная жесткая ссылка будет указывать на эту символическую ссылку вместо цели символической ссылки.Ответы:
Вы можете удалить его с
rm
как обычно:rm NameOfFile
. Обратите внимание, что в случае жестких ссылок нет различий между «исходным файлом» и «ссылкой на файл»: у вас просто два имени для одного и того же файла, и удаление только одного из них не приведет к удалению другого.источник
sudo
), если вы создали его с помощью предоставленной вами команды (как суперпользователь).У меня есть этот скрипт для удаления избыточных жестких ссылок. Но будьте осторожны - это довольно опасно.
источник
На самом деле
rm
не работает:То , что работает это
unlink AZP
.источник
AZP/
выглядит как каталог, rm не работает с каталогами без рекурсивного флага. Также в соответствии с документами Coreutills. >>> Большинство систем запрещают делать жесткую ссылку на каталог; на тех, где это разрешено, только суперпользователь может сделать это (и с осторожностью, поскольку создание цикла вызовет проблемы для многих других утилит).AZP
это символическая ссылка на каталог (или что-то еще)rm AZP/
не будет работать, потому чтоrm
считает его каталогом (из-/
за конца). Однакоrm AZP
будет работать просто отлично. -1Если вы хотите удалить только ссылку и, таким образом, сохранить оригинальный файл, вы должны использовать unlink.
источник
unlink(1)
делает? Это мелкая оболочка дляunlink(2)
системного вызова, тот же системный вызов, которыйrm(1)
используется для всех файлов, которые не являются каталогами.unlink
, несмотря на его имя, не будет разделять жесткую ссылку на два отдельных файла, но удалит «несвязанную» запись каталога (но не файл / content / inode, если количество ссылок> 1).