Scroll to navigation

proc_pid_fd(5) File Formats Manual proc_pid_fd(5)

BEZEICHNUNG

/proc/pid/fd/ - Dateideskriptoren

BESCHREIBUNG

/proc/PID/fd/
In diesem Unterverzeichnis stehen die Dateideskriptoren der von diesem Prozess geöffneten Dateien. Diese Einträge sind symbolische Links zu den eigentlichen Dateien. Also ist 0 die Standardeingabe, 1 ist die Standardausgabe, 2 ist der Standardfehlerkanal usw.
Für Dateideskriptoren für Pipes und Sockets werden die Einträge symbolische Links sein, deren Inhalt der Dateityp mit dem Inode ist. Ein Aufruf von readlink(2) mit dieser Datei liefert eine Zeichenkette im folgenden Format zurück:

Typ:[Inode]
    

Beispielsweise wird socket:[2248868] ein Socket sein, dessen Inode 2248868 ist. Für Sockets kann dieser Inode dazu verwandt werden, weitere Informationen in einem der Dateien unter /proc/net/ zu finden.
Für Dateideskriptoren, die keinen korrespondierenden Inode haben (d.h. durch bpf(2), epoll_create(2), eventfd(2), inotify_init(2), perf_event_open(2), signalfd(2), timerfd_create(2) und userfaultfd(2) erstellte Dateideskriptoren), wird der Eintrag ein symbolischer Link sein mit Inhalten der Form

anon_inode:Dateityp
    

In vielen (aber nicht allen) Fällen wird Dateityp durch eckige Klammern eingeschlossen.
Beispielsweise wird ein Epoll-Dateideskriptor einen symbolischen Link, dessen Inhalt die Zeichenkette anon_inode:[eventpoll] ist, haben.
In einem Multithread-Prozess ist der Inhalt dieses Verzeichnisses nicht mehr verfügbar, wenn der Haupt-Thread schon beendet ist (typischerweise durch einen Aufruf von pthread_exit(3)).
Programme, die einen Dateinamen als Befehlszeilen-Argument verarbeiten, aber ohne Argument keine Eingaben aus der Standardeingabe annehmen oder die in eine Datei schreiben, deren Name als Befehlszeilen-Argument übergeben wird, aber bei fehlendem Argument nicht in die Standardausgabe ausgeben, können dennoch mittels Dateien /proc/PID/fd als Befehlszeilenargument dazu gebracht werden, die Standardeingabe oder die Standardausgabe zu verwenden. Angenommen, der Schalter -i bezeichnet die Eingabedatei und -o die Ausgabedatei:

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

und Sie haben einen funktionierenden Filter.
/proc/self/fd/N ist in etwa dasselbe wie /dev/fd/N in einigen UNIX- und UNIX-ähnlichen Systemen. Die meisten MAKEDEV-Skripte legen tatsächlich symbolische Links von /proc/self/fd zu /dev/fd an.
Die meisten Systeme stellen die symbolischen Links /dev/stdin, /dev/stdout und /dev/stderr bereit, die entsprechend auf die Dateien 0, 1 und 2 in /proc/self/fd weisen. Das letzte Beispiel könnte also auch alternativ geschrieben werden als:

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

Die Rechte, die symbolischen Links in diesem Verzeichnis zu dereferenzieren oder zu lesen (readlink(2)), werden von einer Ptrace-Zugriffsmodusprüfung PTRACE_MODE_READ_FSCREDS gesteuert; siehe ptrace(2).
Beachten Sie, dass für Dateideskriptoren, die sich auf Inodes beziehen (Pipes und Sockets, siehe oben), diese Inodes immer noch die von den Einträgen /proc/PID/fd verschiedenen Berechtigungsbits und Eigentümerinformationen haben und dass sich der Eigentümer von den Benutzer- und Gruppenkennungen des Prozesses unterscheiden kann. Einem nicht privilegierten Prozess könnten die Rechte zum Öffnen fehlen, wie in diesem Beispiel:

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

Dateideskriptor 0 bezieht sich auf die durch die Shell erzeugte und von diesem Shell-Benutzer (dies ist nobody) besessene Pipe, so dass cat nicht über die Berechtigungen verfügt, um einen neuen Dateideskriptor zu erstellen, um von dieser Inode zu lesen, obwohl es immer noch vom existierenden Dateideskriptor 0 lesen kann.

SIEHE AUCH

proc(5)

ÜBERSETZUNG

Die deutsche Übersetzung dieser Handbuchseite wurde von Martin Eberhard Schauer <Martin.E.Schauer@gmx.de>, Dr. Tobias Quathamer <toddy@debian.org>, Chris Leick <c.leick@vollbio.de>, Erik Pfannenstein <debianignatz@gmx.de> und Helge Kreutzmann <debian@helgefjell.de> erstellt.

Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.

Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Übersetzer.

2. Mai 2024 Linux man-pages (unveröffentlicht)