.\" -*- coding: UTF-8 -*- .\" Copyright (C) 1994, 1995, Daniel Quinlan .\" Copyright (C) 2002-2008, 2017, Michael Kerrisk .\" Copyright (C) 2023, Alejandro Colomar .\" .\" 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 , kogamatranslator49 , Darima Kogan , Max Is , Yuri Kozlov и Иван Павлов . .PP Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, .UR https://www.gnu.org/licenses/gpl-3.0.html .UE версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ. .PP Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу .MT списка рассылки русских переводчиков .ME .