unlink

Что делает команда unlink

unlink – это системная утилита, которая напрямую обращается к файловой системе для удаления указанного объекта (файла). В отличие от rm, она не работает рекурсивно и не перемещает файлы в корзину; удаление происходит мгновенно и без возможности восстановления через стандартные средства.

Пример простого использования

Bash
unlink /home/user/oldfile.txt

После выполнения файл исчезнет полностью. Если указать несуществующий путь, будет выведено сообщение об ошибке:

Bash
unlink: cannot unlink '/home/user/missing.txt': No such file or directory

Различия между unlink и rm

Характеристикаunlinkrm
РекурсивностьНетДа (с -r)
Перемещение в корзинуНетДа при наличии конфигурации
Опция подтвержденияНетМожно использовать -i

Технические нюансы и варианты использования

Удаление файлов с правами root

При работе от имени суперпользователя команда может удалить любой файл, включая системные. Например:

Bash
sudo unlink /etc/ssh/sshd_config.bak
Совет: всегда проверяйте путь до удаления, особенно если работаете под root, чтобы не потерять важные файлы.

Удаление файлов по маске с помощью скрипта

unlink сам по себе не поддерживает globbing (маски). Для массового удаления нужно обернуть его в цикл:

Bash
for f in /var/log/*.log; do
    unlink "$f"
done

Эти строки удалят все файлы логов, но оставят директорию.

Работа с символическими ссылками

unlink удаляет саму ссылку, а не целевой объект. Если файл /tmp/link – символьная ссылка на /var/data/file.txt, то:

Bash
unlink /tmp/link

Удалит только ссылку link. Целевой файл останется.

Удаление файлов из безопасного режима

В некоторых защищённых системах можно установить атрибуты, препятствующие удалению. Команда unlink обходит атрибуты immutable, если пользователь имеет права на изменение:

Bash
chattr +i /protected/file.txt   # делает файл неизменяемым
sudo unlink /protected/file.txt # не сработает без снятия атрибута

Для удаления нужно сначала снять атрибут:

Bash
sudo chattr -i /protected/file.txt
unlink /protected/file.txt

Параметры безопасности при удалении

unlink всегда пытается удалить файл, если у процесса есть права write на директорию. Если файл открыт в другом процессе, удаление может быть отклонено:

Bash
# Открываем файл
cat /var/log/syslog &
# Попытка unlink
unlink /var/log/syslog   # Ошибка: Device or resource busy

Чтобы гарантировать удаление, можно использовать fuser или lsof, чтобы убедиться, что файл не занят.

Практические сценарии использования

  1. Очистка временных файлов
    В скриптах создания бэкапов удобно быстро удалить старые временные файлы:find /tmp -type f -mtime +7 -exec unlink {} \;
  2. Удаление мусора в каталоге сборки
    При работе с компиляцией часто появляются объектные файлы (*.o). Их можно удалить без рекурсии:for obj in build/*.o; do unlink "$obj"; done
  3. Автоматическое удаление файлов после обработки
    В системах логирования, где каждый файл обрабатывается и сразу удаляется, unlink обеспечивает быстрый откат без лишних вызовов.

Советы по использованию команды unlink

Совет 1: Используйте unlink в сочетании с find -delete, чтобы избежать лишнего копирования файлов.
Совет 2: Перед массовым удалением всегда делайте резервную копию, особенно если работаете от имени root.

    Как проверить результат удаления

    После выполнения команды можно убедиться в отсутствии файла командой ls:

    Bash
    ls -l /home/user/oldfile.txt
    # ls: cannot access '/home/user/oldfile.txt': No such file or directory

    Если файл всё ещё виден, проверьте права доступа и наличие открытых дескрипторов.