.\" -*- coding: UTF-8 -*-
.\" Copyright (C) 1994, 1995, Daniel Quinlan <quinlan@yggdrasil.com>
.\" Copyright (C) 2002-2008, 2017, Michael Kerrisk <mtk.manpages@gmail.com>
.\" Copyright (C) 2023, Alejandro Colomar <alx@kernel.org>
.\"
.\" SPDX-License-Identifier: GPL-3.0-or-later
.\"
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.TH proc_pid_fd 5 "2 мая 2024 г." "Справочные страницы Linux 6.9.1" 
.SH НАИМЕНОВАНИЕ
/proc/pid/fd/ \- file descriptors
.SH ОПИСАНИЕ
.TP 
\fI/proc/\fPpid\fI/fd/\fP
Этот подкаталог содержит одну запись для каждого файла, открытого процессом,
именем является номер его файлового дескриптора, и которая является
символьной ссылкой на настоящий файл. Так, 0 — это стандартный поток ввода,
1 — стандартный поток вывода, 2 — стандартный поток ошибок и т.п.
.IP
Для файловых дескрипторов каналов и сокетов записи будут символьными
ссылками, содержимое которых — тип файла и inode. Вызов \fBreadlink\fP(2) для
такого файла вернёт строку в формате:
.IP
.in +4n
.EX
type:[inode]
.EE
.in
.IP
Например, \fIsocket:[2248868]\fP — для сокета с inode 2248868. Для сокетов эту
inode можно использовать для поиска дополнительной информации в одном из
файлов в \fI/proc/net/\fP.
.IP
Для файловых дескриптор без соответствующей иноды (например, файловые
дескрипторы, создаваемые \fBbpf\fP(2), \fBepoll_create\fP(2), \fBeventfd\fP(2),
\fBinotify_init\fP(2), \fBperf_event_open\fP(2), \fBsignalfd\fP(2),
\fBtimerfd_create\fP(2) и \fBuserfaultfd\fP(2)), запись будет символьной ссылкой с
содержимым в виде
.IP
.in +4n
.EX
anon_inode:\fIтип\-файла\fP
.EE
.in
.IP
Во многих случаях (но не всех) \fIтип\-файла\fP заключается в квадратные скобки.
.IP
Например, файловый дескриптор epoll будет иметь символьную ссылку с
содержимым в виде строки \fIanon_inode:[eventpoll]\fP.
.IP
.\"The following was still true as at kernel 2.6.13
В многонитевых процессах, содержимое этого каталога недоступно, если главная
нить уже завершила работу (обычно при помощи вызова \fBpthread_exit\fP(3)).
.IP
Программы, принимающие в аргументе командной строки имя файлы, не читают
данные из стандартного ввода, если аргумент не указан, а программы, которые
выполняют запись в файл с именем, указанным в аргументе командной строки, не
пишут данные в стандартный вывод, если аргумент не указан, но, тем не менее,
могут использовать стандартный ввод или вывод через файлы
\fI/proc/\fPpid\fI/fd\fP, указанные в аргументе командной строки. Например,
подразумевая что \fI\-i\fP является флагом, обозначающим входной файл, и \fI\-o\fP
является флагом, обозначающим выходной файл, вы можете указать:
.IP
.in +4n
.EX
$\fB foobar \-i /proc/self/fd/0 \-o /proc/self/fd/1 …\fP
.EE
.in
.IP
.\" The following is not true in my tests (MTK):
.\" Note that this will not work for
.\" programs that seek on their files, as the files in the fd directory
.\" are not seekable.
и вы получите работающий фильтр.
.IP
\fI/proc/self/fd/N\fP \(em это примерно то же, что и \fI/dev/fd/N\fP на некоторых
системах UNIX и подобных им. Фактически, большинство сценариев MAKEDEV в
Linux создают символьную ссылку с именем \fI/dev/fd\fP на файл
\fI/proc/self/fd\fP.
.IP
Большинство систем предоставляют символьные ссылки \fI/dev/stdin\fP,
\fI/dev/stdout\fP и \fI/dev/stderr\fP, которые соответствуют ссылкам на файлы
\fI0\fP, \fI1\fP и \fI2\fP в \fI/proc/self/fd\fP. Так, пример указанной выше команды
может быть переписан в следующем виде:
.IP
.in +4n
.EX
$\fB foobar \-i /dev/stdin \-o /dev/stdout ...\fP
.EE
.in
.IP
Право разыменовывать или читать (\fBreadlink\fP(2)) символические ссылки в этом
каталоге определяется проверкой режима доступа ptrace
\fBPTRACE_MODE_READ_FSCREDS\fP; смотрите \fBptrace\fP(2).
.IP
Заметим, что для файловых дескрипторов, указывающих на иноды (каналы и
сокеты, смотрите выше), эти иноды по\-прежнему имеют биты прав и информация о
владельце отличается от имеющейся у \fI/proc/\fPpid\fI/fd\fP и этот владелец может
отличаться от идентификатора пользователя и группы
процесса. Непривилегированный процесс может не иметь прав на их открытие,
как в этом примере:
.IP
.in +4n
.EX
$\fB echo test | sudo \-u nobody cat\fP
test
$\fB echo test | sudo \-u nobody cat /proc/self/fd/0\fP
cat: /proc/self/fd/0: Permission denied
.EE
.in
.IP
Файловый дескриптор 0 указывает на канал, созданный оболочкой и
принадлежащий владельцу оболочки, не \fInobody\fP, поэтому у программы \fBcat\fP
нет прав на создание нового файлового дескриптора для чтения из этой иноды,
хотя при этом она всё\-таки может читать из существующего файлового
дескриптора 0.
.SH "СМОТРИТЕ ТАКЖЕ"
\fBproc\fP(5)
.PP
.SH ПЕРЕВОД
Русский перевод этой страницы руководства разработал(и)
Alexey,
Azamat Hackimov <azamat.hackimov@gmail.com>,
kogamatranslator49 <r.podarov@yandex.ru>,
Darima Kogan <silverdk99@gmail.com>,
Max Is <ismax799@gmail.com>,
Yuri Kozlov <yuray@komyakino.ru>,
Иван Павлов <pavia00@gmail.com>
и
Kirill Rekhov <krekhov.dev@gmail.com>
.
.PP
Этот перевод является свободной программной документацией; он распространяется
на условиях общедоступной лицензии GNU (GNU General Public License - GPL,
.UR https://www.gnu.org/licenses/gpl-3.0.html
.UE
версии 3 или более поздней) в отношении
авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.
.PP
Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста,
сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу
.MT <debian-l10n-russian@lists.debian.org>
списка рассылки русских переводчиков
.ME .