| inode(7) | Miscellaneous Information Manual | inode(7) |
inode - informacja o i-węźle pliku
Każdy plik posiada i-węzeł z metadanymi o pliku. Aplikacja może pobrać te metadane za pomocą stat(2) (lub powiązanych wywołań), które zwraca strukturę stat albo za pomocą statx(2), które zwraca strukturę statx.
Poniższa lista zawiera informacje zwykle dostępne w i-węźle pliku lub z nim powiązane, wraz z nazwami pól struktur zwracanych przez stat(2) i statx(2):
Pola znaczników czasu zgłaszają czas mierzony od Epoki tj. 1970-01-01 00:00:00 +0000, UTC (zob. time(7)).
Nanosekundowe znaczniki czasowe są obsługiwane w systemach plików XFS, JFS, Btrfs i ext4 (od Linuksa 2.6.23). Znaczniki nanosekundowe nie są obsługiwane w ext2, ext3 i Reiserfs. Aby zwrócić znaczniki czasu z nanosekundową precyzją, pola znacznika czasu w strukturach stat i statx są zdefiniowane jako struktury zawierające cząstkę nanosekund. Więcej szczegółów w podręcznikach stat(2) i statx(2). W systemach plików nieobsługujących znaczników czasowych dokładniejszych niż sekunda, pola nanosekund w strukturach stat i statx są zwracane z wartością 0.
Pole stat.st_mode (w przypadku statx(2): pole statx.stx_mode) zawiera typ i tryb pliku.
POSIX odnosi się do bitów stat.st_mode związanych z maską S_IFMT (zob. niżej) jako typu pliku, 12 bitów odnoszących się do maski 07777 jako bitów trybu pliku, a najmniej znaczących 9 bitów (0777) jako bitów uprawnień pliku.
Zdefiniowano następujące wartości maski dla
typu pliku
| S_IFMT | 0170000 | maska bitowa dla pola bitów typu pliku |
| S_IFSOCK | 0140000 | gniazdo |
| S_IFLNK | 0120000 | dowiązanie symboliczne |
| S_IFREG | 0100000 | zwykły plik |
| S_IFBLK | 0060000 | urządzenie blokowe |
| S_IFDIR | 0040000 | katalog |
| S_IFCHR | 0020000 | urządzenie znakowe |
| S_IFIFO | 0010000 | FIFO |
Zatem aby sprawdzić, czy plik jest np. zwykłym plikiem, można użyć:
stat(pathname, &sb);
if ((sb.st_mode & S_IFMT) == S_IFREG) {
/* Obsługa zwykłego pliku */
}
Ze względu na powszechność testów w powyższej postaci, POSIX zdefiniował dodatkowe makra, aby umożliwić spójniejsze zapisywanie testów typu pliku st_mode:
Wcześniejszy wycinek kodu można zatem przepisać jako:
stat(pathname, &sb);
if (S_ISREG(sb.st_mode)) {
/* Obsługa zwykłego pliku */
}
Definicje większości z powyższych makr testujących typ pliku są udostępniane, jeśli włączono dowolny z następujących testowych makr funkcji: _BSD_SOURCE (w glibc 2.19 i wcześniejszych), _SVID_SOURCE (w glibc 2.19 i wcześniejszych) lub _DEFAULT_SOURCE (w glibc 2.20 i późniejszych). Dodatkowo, definicje wszystkich powyższych makr poza S_IFSOCK i S_ISSOCK() są udostępniane, jeśli zdefiniowano _XOPEN_SOURCE.
Definicja S_IFSOCK może być również ujawniona przez zdefiniowanie _XOPEN_SOURCE z wartością 500 lub większą albo (od glibc 2.24) przez zdefiniowanie zarówno _XOPEN_SOURCE jak i _XOPEN_SOURCE_EXTENDED.
Definicja S_ISSOCK() jest ujawniana, gdy zdefiniowane dowolne z następujących testowych makr funkcji: _BSD_SOURCE (w glibc 2.19 i wcześniejszych), _DEFAULT_SOURCE (w glibc 2.20 i późniejszych), _XOPEN_SOURCE z wartością 500 lub większą, _POSIX_C_SOURCE z wartością 200112L lub większą albo (od glibc 2.24) przez zdefiniowanie zarówno _XOPEN_SOURCE jak i _XOPEN_SOURCE_EXTENDED.
W komponencie trybu pliku pola st_mode zdefiniowano
następujące wartości masek:
| S_ISUID | 04000 | bit set-user-ID (zob. execve(2)) |
| S_ISGID | 02000 | bit set-group-ID (zob. niżej) |
| S_ISVTX | 01000 | bit lepkości (zob. niżej) |
| S_IRWXU | 00700 | właściciel ma uprawnienia odczytu, zapisu i wykonania |
| S_IRUSR | 00400 | właściciel ma uprawnienie odczytu |
| S_IWUSR | 00200 | właściciel ma uprawnienie zapisu |
| S_IXUSR | 00100 | właściciel ma uprawnienie wykonania |
| S_IRWXG | 00070 | grupa ma uprawnienia odczytu, zapisu i wykonania |
| S_IRGRP | 00040 | grupa ma uprawnienie odczytu |
| S_IWGRP | 00020 | grupa ma uprawnienie zapisu |
| S_IXGRP | 00010 | grupa ma uprawnienie wykonania |
| S_IRWXO | 00007 | inni (poza grupą) mają uprawnienia odczytu, zapisu i wykonania |
| S_IROTH | 00004 | inni mają uprawnienie odczytu |
| S_IWOTH | 00002 | inni mają uprawnienie zapisu |
| S_IXOTH | 00001 | inni mają uprawnienie wykonania |
Bit set-group-ID (S_ISGID) ma kilka specjalnych zastosowań. W przypadku katalogu wskazuje, że dla danego katalogu ma być używana semantyka BSD: tworzone w nim pliki dziedziczą identyfikator tworzącego procesu, a tworzone w nim katalogi dziedziczą również ustawienie bitu S_ISGID. W przypadku pliku wykonywalnego, bit set-group-ID powoduje zmianę efektywnego identyfikatora grupy procesu, który wykonuje plik, zgodnie z opisem w podręczniku execve(2). W przypadku pliku, który nie posiada ustawionego bitu wykonania dla grupy (S_IXGRP), bit set-group-ID wskazuje obowiązkowe blokowanie pliku/rekordu.
Bit lepkości (S_ISVTX) w przypadku katalogu oznacza, że wobec pliku w tym katalogu, jedynie: właściciel pliku, właściciel katalogu lub proces uprzywilejowany może zmienić nazwę pliku lub go usunąć.
POSIX.1-2008.
POSIX.1-2001.
POSIX.1-1990 nie opisuje stałych S_IFMT, S_IFSOCK, S_IFLNK, S_IFREG, S_IFBLK, S_IFDIR, S_IFCHR, S_IFIFO i S_ISVTX, lecz określa użycie makr S_ISDIR() itd.
Makra S_ISLNK() i S_ISSOCK() nie występowały w POSIX.1-1996; pierwsze pochodzi z SVID 4, drugie z SUSv2.
UNIX V7 (i późniejsze systemy) posiadały S_IREAD, S_IWRITE, S_IEXEC w miejscu określonych przez POSIX synonimów S_IRUSR, S_IWUSR i S_IXUSR.
Zgłaszany przez jądro rozmiar pliku (stat.st_size; statx.stx_size) nie jest prawidłowy, w przypadku pseudoplików generowanych automatycznie przez jądro. Przykładowo zwracana jest wartość 0 wobec wielu plików w katalogu /proc, natomiast wiele plików w katalogu /sys zgłasza rozmiar 4096 bajtów nawet, gdy zawartość pliku jest mniejsza. W przypadku ww. plików powinno się próbować odczytać tak wiele bajtów, jak to możliwe (i dodać „\0” do zwracanego bufora, jeśli ma być interpretowany jako łańcuch tekstowy).
Tłumaczenie niniejszej strony podręcznika: 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.
| 15 czerwca 2024 r. | Linux man-pages 6.9.1 |