Provided by: manpages-ru_4.27.0-1_all 

НАИМЕНОВАНИЕ
/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)