unlink
Что делает команда unlink
unlink – это системная утилита, которая напрямую обращается к файловой системе для удаления указанного объекта (файла). В отличие от rm, она не работает рекурсивно и не перемещает файлы в корзину; удаление происходит мгновенно и без возможности восстановления через стандартные средства.
Пример простого использования
unlink /home/user/oldfile.txtПосле выполнения файл исчезнет полностью. Если указать несуществующий путь, будет выведено сообщение об ошибке:
unlink: cannot unlink '/home/user/missing.txt': No such file or directoryРазличия между unlink и rm
| Характеристика | unlink | rm |
|---|---|---|
| Рекурсивность | Нет | Да (с -r) |
| Перемещение в корзину | Нет | Да при наличии конфигурации |
| Опция подтверждения | Нет | Можно использовать -i |
Технические нюансы и варианты использования
Удаление файлов с правами root
При работе от имени суперпользователя команда может удалить любой файл, включая системные. Например:
sudo unlink /etc/ssh/sshd_config.bakroot, чтобы не потерять важные файлы.Удаление файлов по маске с помощью скрипта
unlink сам по себе не поддерживает globbing (маски). Для массового удаления нужно обернуть его в цикл:
for f in /var/log/*.log; do
unlink "$f"
doneЭти строки удалят все файлы логов, но оставят директорию.
Работа с символическими ссылками
unlink удаляет саму ссылку, а не целевой объект. Если файл /tmp/link – символьная ссылка на /var/data/file.txt, то:
unlink /tmp/linkУдалит только ссылку link. Целевой файл останется.
Удаление файлов из безопасного режима
В некоторых защищённых системах можно установить атрибуты, препятствующие удалению. Команда unlink обходит атрибуты immutable, если пользователь имеет права на изменение:
chattr +i /protected/file.txt # делает файл неизменяемым
sudo unlink /protected/file.txt # не сработает без снятия атрибутаДля удаления нужно сначала снять атрибут:
sudo chattr -i /protected/file.txt
unlink /protected/file.txtПараметры безопасности при удалении
unlink всегда пытается удалить файл, если у процесса есть права write на директорию. Если файл открыт в другом процессе, удаление может быть отклонено:
# Открываем файл
cat /var/log/syslog &
# Попытка unlink
unlink /var/log/syslog # Ошибка: Device or resource busyЧтобы гарантировать удаление, можно использовать fuser или lsof, чтобы убедиться, что файл не занят.
Практические сценарии использования
- Очистка временных файлов
В скриптах создания бэкапов удобно быстро удалить старые временные файлы:find /tmp -type f -mtime +7 -exec unlink {} \; - Удаление мусора в каталоге сборки
При работе с компиляцией часто появляются объектные файлы (*.o). Их можно удалить без рекурсии:for obj in build/*.o; do unlink "$obj"; done - Автоматическое удаление файлов после обработки
В системах логирования, где каждый файл обрабатывается и сразу удаляется,unlinkобеспечивает быстрый откат без лишних вызовов.
Советы по использованию команды unlink
unlink в сочетании с find -delete, чтобы избежать лишнего копирования файлов.Как проверить результат удаления
После выполнения команды можно убедиться в отсутствии файла командой ls:
ls -l /home/user/oldfile.txt
# ls: cannot access '/home/user/oldfile.txt': No such file or directoryЕсли файл всё ещё виден, проверьте права доступа и наличие открытых дескрипторов.