proc_pid_fd(5) | File Formats Manual | proc_pid_fd(5) |
NAZWA
/proc/pid/fd/ - deskryptory pliku
OPIS
- /proc/pid/fd/
- Jest to podkatalog zawierający po jednym wpisie dla każdego otwartego przez proces pliku; nazwą tego wpisu jest deskryptor pliku i jest on dowiązaniem symbolicznym do rzeczywistego pliku. Dlatego 0 jest standardowym wejściem, 1 jest standardowym wyjściem, 2 jest standardową diagnostyką, itd.
- W przypadku deskryptorów plików potoków i gniazd, wpisy będą dowiązaniami symbolicznymi, których zawartością jest typ pliku z i-węzłem. Wywołanie readlink(2) na takim pliku zwróci ciąg w postaci:
-
typ:[i-węzeł]
- Przykładowo socket:[2248868] będzie gniazdem z i-węzłem 2248868. W przypadku gniazd, i-węzeł można wykorzystać do pozyskania większej liczby informacji z jednego z plików z katalogu /proc/net/.
- W przypadku deskryptorów plików, które nie mają odpowiadającego i-węzła (np. deskryptorów plików tworzonych za pomocą bpf(2), epoll_create(2), eventfd(2), inotify_init(2), perf_event_open(2), signalfd(2), timerfd_create(2) i userfaultfd(2)), wpis będzie dowiązaniem symbolicznym z zawartością w postaci
-
anon_inode:typ-pliku
- W wielu przypadkach (lecz nie wszystkich) typ-pliku jest otoczony nawiasami kwadratowymi.
- Przykładowo dowiązanie symboliczne deskryptora pliku epoll będzie dowiązaniem symbolicznym, którego zawartością jest łańcuch anon_inode:[eventpoll].
- W procesie wielowątkowym zawartość tego katalogu nie jest dostępna, jeżeli wątek główny już się zakończył (zazwyczaj przez wywołanie pthread_exit(3)).
- Programy, które przyjmują nazwę pliku jako argument wiersza polecenia, lecz nie czytają standardowego wejścia, jeśli nie podano argumentu oraz programy które zapisują do pliku nazwanego argumentem wiersza polecenia, lecz nie wysyłają danych wyjściowych na standardowe wyjście, można zmusić do używania standardowego wejścia lub wyjścia wykorzystując pliki /proc/pid/fd jako argumenty wiersza poleceń. Na przykład, zakładając, że opcja -i określa plik wejściowy, a opcja -o określa plik wyjściowy:
-
$ foobar -i /proc/self/fd/0 -o /proc/self/fd/1 ...
- co daje działający filtr.
- /proc/self/fd/N jest w przybliżeniu tym samym co /dev/fd/N na niektórych systemach uniksowych i uniksopodobnych. Większość linuksowych skryptów MAKEDEV tworzy dowiązania symboliczne /dev/fd do /proc/self/fd.
- Większość systemów udostępnia dowiązania symboliczne /dev/stdin, /dev/stdout i dev/stderr, które linkują odpowiednio do plików 0, 1 i 2 w /proc/self/fd. Powyższe, przykładowe polecenie może być więc zapisane również tak:
-
$ foobar -i /dev/stdin -o /dev/stdout ...
- Uprawnienie do rozwiązania lub odczytu (readlink(2)) dowiązań symbolicznych w tym katalogu, zależy od sprawdzenia trybu dostępu ptrace: PTRACE_MODE_READ_FSCREDS; zob. ptrace(2).
- Proszę zauważyć, że w przypadku deskryptorów pliku odnoszących się do i-węzłów (potoków i gniazd, zob. wyżej), ich i-węzły mają bity uprawnień i informacje o własności odmienne od tych, z wpisu /proc/pid/fd, a własność może się różnić od identyfikatorów użytkownika i grupy procesu. Proces nieuprzywilejowany może nie mieć odpowiednich uprawnień do ich otwarcia, jak w tym przykładzie:
-
$ echo test | sudo -u nobody cat test $ echo test | sudo -u nobody cat /proc/self/fd/0 cat: /proc/self/fd/0: Brak dostępu
- Deskryptor pliku 0 odnosi się do potoku utworzonego przez powłokę i będącego własnością tego użytkownika powłoki, którym nie jest nobody, zatem cat nie ma uprawnień do utworzenia nowego deskryptora pliku do odczytu z tego i-węzła, nawet gdy może wciąż czytać z jego istniejącego deskryptora pliku 0.
ZOBACZ TAKŻE
TŁUMACZENIE
Autorami polskiego tłumaczenia niniejszej strony podręcznika są: Przemek Borys <pborys@dione.ids.pl>, Robert Luberda <robert@debian.org> i Michał Kułach <michal.kulach@gmail.com>
Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.
Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej manpages-pl-list@lists.sourceforge.net.
2 maja 2024 r. | Linux man-pages 6.9.1 |