Provided by: manpages-ru_4.26.0-1_all bug

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

       /proc/pid/fd/ - file descriptors

ОПИСАНИЕ

       /proc/pid/fd/
              Этот подкаталог содержит одну запись для каждого файла, открытого процессом, именем является номер
              его  файлового  дескриптора, и которая является символьной ссылкой на настоящий файл. Так, 0 — это
              стандартный поток ввода, 1 — стандартный поток вывода, 2 — стандартный поток ошибок и т.п.

              Для файловых дескрипторов каналов и сокетов записи будут символьными ссылками, содержимое  которых
              — тип файла и inode. Вызов readlink(2) для такого файла вернёт строку в формате:

                  type:[inode]

              Например,  socket:[2248868] — для сокета с inode 2248868. Для сокетов эту inode можно использовать
              для поиска дополнительной информации в одном из файлов в /proc/net/.

              Для файловых дескриптор без соответствующей иноды  (например,  файловые  дескрипторы,  создаваемые
              bpf(2),    epoll_create(2),    eventfd(2),   inotify_init(2),   perf_event_open(2),   signalfd(2),
              timerfd_create(2) и userfaultfd(2)), запись будет символьной ссылкой с содержимым в виде

                  anon_inode:тип-файла

              Во многих случаях (но не всех) тип-файла заключается в квадратные скобки.

              Например, файловый дескриптор epoll будет иметь символьную  ссылку  с  содержимым  в  виде  строки
              anon_inode:[eventpoll].

              В  многонитевых  процессах,  содержимое этого каталога недоступно, если главная нить уже завершила
              работу (обычно при помощи вызова pthread_exit(3)).

              Программы, принимающие в аргументе командной строки имя файлы, не читают  данные  из  стандартного
              ввода, если аргумент не указан, а программы, которые выполняют запись в файл с именем, указанным в
              аргументе  командной строки, не пишут данные в стандартный вывод, если аргумент не указан, но, тем
              не менее, могут использовать стандартный ввод или вывод  через  файлы  /proc/pid/fd,  указанные  в
              аргументе  командной  строки.  Например, подразумевая что -i является флагом, обозначающим входной
              файл, и -o является флагом, обозначающим выходной файл, вы можете указать:

                  $ foobar -i /proc/self/fd/0 -o /proc/self/fd/1 

              и вы получите работающий фильтр.

              /proc/self/fd/N — это примерно то же, что и /dev/fd/N на некоторых системах UNIX  и  подобных  им.
              Фактически,  большинство  сценариев  MAKEDEV в Linux создают символьную ссылку с именем /dev/fd на
              файл /proc/self/fd.

              Большинство систем предоставляют символьные ссылки /dev/stdin, /dev/stdout и /dev/stderr,  которые
              соответствуют  ссылкам на файлы 0, 1 и 2 в /proc/self/fd. Так, пример указанной выше команды может
              быть переписан в следующем виде:

                  $ foobar -i /dev/stdin -o /dev/stdout ...

              Право разыменовывать или читать (readlink(2)) символические ссылки в  этом  каталоге  определяется
              проверкой режима доступа ptrace PTRACE_MODE_READ_FSCREDS; смотрите ptrace(2).

              Заметим, что для файловых дескрипторов, указывающих на иноды (каналы и сокеты, смотрите выше), эти
              иноды  по-прежнему имеют биты прав и информация о владельце отличается от имеющейся у /proc/pid/fd
              и  этот  владелец  может  отличаться   от   идентификатора   пользователя   и   группы   процесса.
              Непривилегированный процесс может не иметь прав на их открытие, как в этом примере:

                  $ echo test | sudo -u nobody cat
                  test
                  $ echo test | sudo -u nobody cat /proc/self/fd/0
                  cat: /proc/self/fd/0: Permission denied

              Файловый  дескриптор 0 указывает на канал, созданный оболочкой и принадлежащий владельцу оболочки,
              не nobody, поэтому у программы cat нет прав на создание нового файлового дескриптора для чтения из
              этой иноды, хотя при этом она всё-таки может читать из существующего файлового дескриптора 0.

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

       proc(5)

ПЕРЕВОД

       Русский    перевод    этой    страницы    руководства    разработал(и)    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>

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

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

Справочные страницы Linux 6.9.1                   2 мая 2024 г.                                   proc_pid_fd(5)