Provided by: manpages-ru-dev_4.27.0-1_all bug

НАИМЕНОВАНИЕ

       unlink, unlinkat - удаляет имя и, возможно, файл, на который оно ссылается

БИБЛИОТЕКА

       Стандартная библиотека языка C (libc, -lc)

ОБЗОР

       #include <unistd.h>

       int unlink(const char *pathname);

       #include <fcntl.h>           /* определения констант AT_* */
       #include <unistd.h>

       int unlinkat(int dirfd, const char *pathname, int flags);

   Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):

       unlinkat():
           Начиная с glibc 2.10:
               _POSIX_C_SOURCE >= 200809L
           До glibc 2.10:
               _ATFILE_SOURCE

ОПИСАНИЕ

       unlink()  удаляет  имя  из  файловой  системы.  Если  это имя было последней ссылкой на файл и больше нет
       процессов, которые держат этот файл открытым,  данный  файл  удаляется  и  место,  которое  он  занимает,
       освобождается для дальнейшего использования.

       Если  имя  было последней ссылкой на файл, но какие-либо процессы всё ещё держат этот файл открытым, файл
       будет оставлен, пока последний файловый дескриптор, указывающий на него, не будет закрыт.

       Если имя указывает на символьную ссылку, то будет удалена ссылка.

       Если имя указывает на сокет, FIFO или устройство, то имя будет  удалено,  но  процессы,  которые  открыли
       любой из этих объектов могут продолжать его использовать.

   unlinkat()
       Системный  вызов unlinkat() работает также как unlink() или rmdir(2) (в зависимости от того, есть ли флаг
       AT_REMOVEDIR во flags), за исключением случаев, описанных здесь.

       Если в pathname задан относительный путь, то он считается относительно  каталога,  на  который  ссылается
       файловый  дескриптор  dirfd  (а  не относительно текущего рабочего каталога вызывающего процесса, как это
       делается в unlink() и rmdir(2)).

       Если в pathname задан относительный путь и  dirfd  равно  специальному  значению  AT_FDCWD,  то  pathname
       рассматривается относительно текущего рабочего каталога вызывающего процесса (как unlink() и rmdir(2)).

       Если в pathname задан абсолютный путь, то dirfd игнорируется.

       Аргумент  flags  представляет  собой  битовую  маску,  значение  которой  может  быть 0, или объединённым
       значением флагов с помощью OR, определяющих операцию unlinkat(). В настоящее время определён только  один
       флаг:

       AT_REMOVEDIR
              By  default,  unlinkat()   performs  the equivalent of unlink()  on pathname.  If the AT_REMOVEDIR
              flag is specified, it performs the equivalent of rmdir(2)  on pathname.

       Смотрите в openat(2) объяснение необходимости unlinkat().

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

       При успешном выполнении возвращается 0. При ошибке возвращается -1, а в errno содержится код ошибки.

ОШИБКИ

       EACCES Для эффективного UID процесса нет прав на запись в каталог, содержащийся в pathname, или  в  одном
              из каталогов в pathname не разрешён поиск (смотрите также path_resolution(7)).

       EBUSY  Файл  pathname  не  может  быть удалён, так как он ещё используется системой или другим процессом;
              например, это точка монтирования или его создал клиент NFS для  представления  активной,  но  пока
              безымянной inode («NFS silly renamed»).

       EFAULT Аргумент pathname указывает за пределы доступного адресного пространства.

       EIO    Произошла ошибка ввода-вывода.

       EISDIR pathname refers to a directory.  (This is the non-POSIX value returned since Linux 2.1.132.)

       ELOOP  Во время определения pathname встретилось слишком много символьных ссылок.

       ENAMETOOLONG
              pathname слишком длинен.

       ENOENT Компонент pathname не существует, является повисшей ссылкой или pathname пуст.

       ENOMEM Недостаточное количество памяти ядра.

       ENOTDIR
              Компонент пути, использованный как каталог в pathname, в действительности таковым не является.

       EPERM  Система  не  разрешает  удаление каталогов или для удаления каталогов требуются права, которыми не
              обладает вызвавший процесс. (Этот код ошибки предусмотрен в POSIX; как описано  выше,  в  Linux  в
              этом случае возвращается EISDIR.)

       EPERM (только в Linux)
              Файловая система не позволяет удаление файлов.

       EPERM или EACCES
              На  каталоге,  содержащемся  в  pathname,  установлен закрепляющий бит (S_ISVTX) и эффективный UID
              процесса не совпадает ни с UID удаляемого файла, ни с каталогом, в  котором  он  содержится,  и  у
              процесса нет прав (Linux: нет мандата CAP_FOWNER).

       EPERM  The file to be unlinked is marked immutable or append-only.  (See FS_IOC_SETFLAGS(2const).)

       EROFS  pathname указывает на файл в файловой системе, доступной только для чтения.

       В  unlinkat()  могут  возникнуть  те  же  ошибки,  что и в unlink() и rmdir(2). Также, в unlinkat() могут
       возникнуть следующие ошибки:

       EBADF  В pathname содержится относительный путь, но значение  dirfd  не  равно  AT_FDCWD  и  не  является
              правильным файловым дескриптором.

       EINVAL В flags указано неверное значение флага.

       EISDIR Значение pathname ссылается на каталог и в flags не указан AT_REMOVEDIR.

       ENOTDIR
              Значение pathname содержит относительный путь и dirfd содержит файловый дескриптор, указывающий на
              файл, а не на каталог.

СТАНДАРТЫ

       POSIX.1-2008.

ИСТОРИЯ

       unlink()
              SVr4, 4.3BSD, POSIX.1-2001.

       unlinkat()
              POSIX.1-2008.  Linux 2.6.16, glibc 2.4.

   glibc
       В  старых  ядрах, где unlinkat() отсутствует, обёрточная функция glibc использует unlink(2) или rmdir(2).
       Если pathname является относительным путём, то glibc собирает путь относительно  символической  ссылки  в
       /proc/self/fd, которая соответствует аргументу dirfd.

ОШИБКИ

       Неточности  в  протоколе  NFS  могут  приводить  к  неожиданному  исчезновению  файлов,  которые  всё ещё
       используются.

СМОТРИТЕ ТАКЖЕ

       rm(1), unlink(1), chmod(2),  link(2),  mknod(2),  open(2),  rename(2),  rmdir(2),  mkfifo(3),  remove(3),
       path_resolution(7), symlink(7)

ПЕРЕВОД

       Русский  перевод  этой  страницы  руководства  разработал(и) Azamat Hackimov <azamat.hackimov@gmail.com>,
       Dmitriy Ovchinnikov <dmitriyxt5@gmail.com>, Dmitry Bolkhovskikh  <d20052005@yandex.ru>,  Katrin  Kutepova
       <blackkatelv@gmail.com>,  Yuri  Kozlov  <yuray@komyakino.ru>,  Иван  Павлов  <pavia00@gmail.com> и Kirill
       Rekhov <krekhov.dev@gmail.com>

       Этот перевод является свободной программной документацией; он распространяется на условиях  общедоступной
       лицензии  GNU  (GNU  General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или
       более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

       Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите  об  этом
       разработчику(ам)   по   его(их)  адресу(ам)  электронной  почты  или  по  адресу  списка рассылки русских
       переводчиков.

Справочные страницы Linux 6.9.1                  13 июня 2024 г.                                       unlink(2)