inode(7) Miscellaneous Information Manual inode(7) NAZWA inode - informacja o i-wezle pliku OPIS Kazdy plik posiada i-wezel z metadanymi o pliku. Aplikacja moze pobrac te metadane za pomoca stat(2) (lub powiazanych wywolan), ktore zwraca strukture stat albo za pomoca statx(2), ktore zwraca strukture statx. Ponizsza lista zawiera informacje zwykle dostepne w i-wezle pliku lub z nim powiazane, wraz z nazwami pol struktur zwracanych przez stat(2) i statx(2): Urzadzenie, na ktorym wystepuje i-wezel stat.st_dev; statx.stx_dev_minor i statx.stx_dev_major Kazdy i-wezel (oraz powiazany plik) wystepuje w systemie plikow umieszczonym na urzadzeniu. Urzadzenie jest identyfikowane przez zestaw: identyfikatora glownego (opisujacego ogolna klase urzadzenia) oraz identyfikatora pobocznego (opisujacego konkretne wystapienie w klasie ogolnej). Numer i-wezla stat.st_ino; statx.stx_ino Kazdy plik w systemie plikow posiada unikatowy numer i-wezla. Numery i-wezlow sa jednak unikatowe tylko w zakresie danego systemu plikow (tj. ten sam numer i-wezla moze byc uzywany w roznych systemach plikow, co stanowi powod, dla ktorego dowiazania zwykle nie moga wykraczac poza swoj system plikow). To pole zawiera numer i-wezla pliku. Typ i tryb pliku stat.st_mode; statx.stx_mode Zob. opis typu i trybu pliku, ponizej. Liczba dowiazan stat.st_nlink; statx.stx_nlink Pole zawiera liczbe dowiazan zwyklych (twardych) do pliku. Dodatkowe dowiazania do istniejacego pliku tworzy sie za pomoca link(2). Identyfikator uzytkownika stat.st_uid; statx.stx_uid Pole zapisuje identyfikator uzytkownika wlasciciela pliku. W przypadku nowo tworzonych plikow, identyfikatorem uzytkownika w pliku bedzie efektywny identyfikator uzytkownika tworzacego procesu. Identyfikator uzytkownika pliku mozna zmienic za pomoca chown(2). Identyfikator grupy stat.st_gid; statx.stx_gid I-wezel zapisuje identyfikator grupy wlasciciela pliku. W przypadku nowo tworzonych plikow, identyfikator grupy pliku jest albo identyfikatorem grupy katalogu nadrzednego albo efektywnym identyfikatorem grupy procesu tworzacego, w zaleznosci od tego, czy bit ustawienia grupy podczas wykonania (sgid) jest ustawiony na katalogu nadrzednym (zob. nizej). Identyfikator grupy pliku mozna zmienic za pomoca chown(2). Urzadzenie reprezentowane przez ten i-wezel stat.st_rdev; statx.stx_rdev_minor i statx.stx_rdev_major Jesli ten plik (i-wezel) reprezentuje urzadzenie, to i-wezel zapisuje glowny i poboczny identyfikator tego urzadzenia. Rozmiar pliku stat.st_size; statx.stx_size To pole ujawnia rozmiar pliku (jesli jest zwyklym plikiem lub dowiazaniem symbolicznym) w bajtach. Rozmiarem dowiazania symbolicznego jest dlugosc sciezki, ktora zawiera dowiazanie, bez koncowego bajtu null. Preferowany rozmiar bloku do wejscia/wyjscia stat.st_blksize; statx.stx_blksize Pole ujawnia ,,preferowany" rozmiar bloku w celu uzyskania wydajnego wejscia/wyjscia systemu plikow (zapis do pliku w mniejszych fragmentach spowoduje nieefektywna sekwencje odczyt-modyfikacja-nadpis). Liczba blokow przypisanych do pliku stat.st_blocks; statx.stx_blocks Pole wskazuje liczbe blokow przypisanych do pliku, w 512 bajtowych jednostkach (moze byc mniejsze niz st_size/512 gdy plik ma dziury). Standard POSIX.1 zauwaza, ze jednostka st_blocks bedacego skladowa struktury stat, nie jest zdefiniowana standardem. W wielu implementacjach jest to 512 bajtow; na kilku systemach korzysta sie z innej jednostki np. 1024. Co wiecej, jednostka moze sie roznic w zaleznosci od systemu plikow. Znacznik czasowy ostatniego dostepu (atime -- ang. access time) stat.st_atime; statx.stx_atime Znacznik czasowy ostatniego dostepu do pliku. Zmienia sie przy uzyskaniu dostepu do pliku, np. przez execve(2), mknod(2), pipe(2), utime(2) i read(2) (dla wiecej niz zera bajtow). Inne interfejsy, takie jak mmap(2), moga nie aktualizowac znacznika czasu atime. Niektore typy systemu plikow zezwalaja na montowanie w sposob, w ktorym dostep do pliku i/lub katalogu nie powoduje aktualizacji znacznika czasu atime (zob. noatime, nodiratime i relatime w podreczniku mount(8) oraz powiazane informacje w podreczniku mount(2)). Dodatkowo, znacznik atime nie jest aktualizowany, gdy plik otwarto ze znacznikiem O_NOATIME; zob. open(2). Znacznik czasowy utworzenia pliku (btime -- ang. birth time) (nie jest zwracany w strukturze stat); statx.stx_btime Znacznik czasowy utworzenia pliku. Jest ustawiany przy utworzeniu pliku i nie ulega pozniej zmianie. Znacznik czasowy btime nie byl historycznie obecny w systemach UNIX i nie jest obecnie obslugiwany przez wiekszosc linuksowych systemow plikow. Znacznik czasowy ostatniej modyfikacji (mtime) stat.st_mtime; statx.stx_mtime Znacznik czasowy ostatniej modyfikacji pliku. Zmienia sie przy modyfikacji pliku, np. za pomoca mknod(2), truncate(2), utime(2) i write(2) (wiecej niz zera bajtow). Co wiecej znacznik czasowy mtime katalogu jest zmieniany przy tworzeniu i kasowaniu plikow w tym katalogu. Znacznik czasowy mtime nie jest zmieniany przy zmianie wlasciciela, grupy, liczby dowiazan zwyklych lub trybu. Znacznik czasowy ostatniej zmiany statusu (ctime -- ang. change time) stat.st_ctime; statx.stx_ctime Znacznik czasu ostatniej zmiany statusu pliku. Zmienia sie przy zapisywaniu lub ustawianiu informacji i-wezla (tj. wlasciciela, grupy, liczby dowiazan, trybu itd.). Pola znacznikow czasu zglaszaja czas mierzony od Epoki tj. 1970-01-01 00:00:00 +0000, UTC (zob. time(7)). Nanosekundowe znaczniki czasowe sa obslugiwane w systemach plikow XFS, JFS, Btrfs i ext4 (od Linuksa 2.6.23). Znaczniki nanosekundowe nie sa obslugiwane w ext2, ext3 i Reiserfs. Aby zwrocic znaczniki czasu z nanosekundowa precyzja, pola znacznika czasu w strukturach stat i statx sa zdefiniowane jako struktury zawierajace czastke nanosekund. Wiecej szczegolow w podrecznikach stat(2) i statx(2). W systemach plikow nieobslugujacych znacznikow czasowych dokladniejszych niz sekunda, pola nanosekund w strukturach stat i statx sa zwracane z wartoscia 0. Typ i tryb pliku Pole stat.st_mode (w przypadku statx(2): pole statx.stx_mode) zawiera typ i tryb pliku. POSIX odnosi sie do bitow stat.st_mode zwiazanych z maska S_IFMT (zob. nizej) jako typu pliku, 12 bitow odnoszacych sie do maski 07777 jako bitow trybu pliku, a najmniej znaczacych 9 bitow (0777) jako bitow uprawnien pliku. Zdefiniowano nastepujace wartosci maski dla typu pliku S_IFMT 0170000 maska bitowa dla pola bitow typu pliku S_IFSOCK 0140000 gniazdo S_IFLNK 0120000 dowiazanie symboliczne S_IFREG 0100000 zwykly plik S_IFBLK 0060000 urzadzenie blokowe S_IFDIR 0040000 katalog S_IFCHR 0020000 urzadzenie znakowe S_IFIFO 0010000 FIFO Zatem aby sprawdzic, czy plik jest np. zwyklym plikiem, mozna uzyc: stat(pathname, &sb); if ((sb.st_mode & S_IFMT) == S_IFREG) { /* Obsluga zwyklego pliku */ } Ze wzgledu na powszechnosc testow w powyzszej postaci, POSIX zdefiniowal dodatkowe makra, aby umozliwic spojniejsze zapisywanie testow typu pliku st_mode: S_ISREG(m) czy to zwykly plik? S_ISDIR(m) katalog? S_ISCHR(m) urzadzenie znakowe? S_ISBLK(m) urzadzenie blokowe? S_ISFIFO(m) FIFO (potok nazwany)? S_ISLNK(m) dowiazanie symboliczne? (nie wystepuje w POSIX.1-1996) S_ISSOCK(m) gniazdo? (nie wystepuje w POSIX.1-1996) Wczesniejszy wycinek kodu mozna zatem przepisac jako: stat(pathname, &sb); if (S_ISREG(sb.st_mode)) { /* Obsluga zwyklego pliku */ } Definicje wiekszosci z powyzszych makr testujacych typ pliku sa udostepniane, jesli wlaczono dowolny z nastepujacych testowych makr funkcji: _BSD_SOURCE (w glibc 2.19 i wczesniejszych), _SVID_SOURCE (w glibc 2.19 i wczesniejszych) lub _DEFAULT_SOURCE (w glibc 2.20 i pozniejszych). Dodatkowo, definicje wszystkich powyzszych makr poza S_IFSOCK i S_ISSOCK() sa udostepniane, jesli zdefiniowano _XOPEN_SOURCE. Definicja S_IFSOCK moze byc rowniez ujawniona przez zdefiniowanie _XOPEN_SOURCE z wartoscia 500 lub wieksza albo (od glibc 2.24) przez zdefiniowanie zarowno _XOPEN_SOURCE jak i _XOPEN_SOURCE_EXTENDED. Definicja S_ISSOCK() jest ujawniana, gdy zdefiniowane dowolne z nastepujacych testowych makr funkcji: _BSD_SOURCE (w glibc 2.19 i wczesniejszych), _DEFAULT_SOURCE (w glibc 2.20 i pozniejszych), _XOPEN_SOURCE z wartoscia 500 lub wieksza, _POSIX_C_SOURCE z wartoscia 200112L lub wieksza albo (od glibc 2.24) przez zdefiniowanie zarowno _XOPEN_SOURCE jak i _XOPEN_SOURCE_EXTENDED. W komponencie trybu pliku pola st_mode zdefiniowano nastepujace wartosci masek: S_ISUID 04000 bit set-user-ID (zob. execve(2)) S_ISGID 02000 bit set-group-ID (zob. nizej) S_ISVTX 01000 bit lepkosci (zob. nizej) S_IRWXU 00700 wlasciciel ma uprawnienia odczytu, zapisu i wykonania S_IRUSR 00400 wlasciciel ma uprawnienie odczytu S_IWUSR 00200 wlasciciel ma uprawnienie zapisu S_IXUSR 00100 wlasciciel 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 grupa) maja uprawnienia odczytu, zapisu i wykonania S_IROTH 00004 inni maja uprawnienie odczytu S_IWOTH 00002 inni maja uprawnienie zapisu S_IXOTH 00001 inni maja uprawnienie wykonania Bit set-group-ID (S_ISGID) ma kilka specjalnych zastosowan. W przypadku katalogu wskazuje, ze dla danego katalogu ma byc uzywana semantyka BSD: tworzone w nim pliki dziedzicza identyfikator tworzacego procesu, a tworzone w nim katalogi dziedzicza rowniez ustawienie bitu S_ISGID. W przypadku pliku wykonywalnego, bit set-group-ID powoduje zmiane efektywnego identyfikatora grupy procesu, ktory wykonuje plik, zgodnie z opisem w podreczniku execve(2). W przypadku pliku, ktory nie posiada ustawionego bitu wykonania dla grupy (S_IXGRP), bit set-group-ID wskazuje obowiazkowe blokowanie pliku/rekordu. Bit lepkosci (S_ISVTX) w przypadku katalogu oznacza, ze wobec pliku w tym katalogu, jedynie: wlasciciel pliku, wlasciciel katalogu lub proces uprzywilejowany moze zmienic nazwe pliku lub go usunac. STANDARDY POSIX.1-2008. HISTORIA POSIX.1-2001. POSIX.1-1990 nie opisuje stalych S_IFMT, S_IFSOCK, S_IFLNK, S_IFREG, S_IFBLK, S_IFDIR, S_IFCHR, S_IFIFO i S_ISVTX, lecz okresla uzycie makr S_ISDIR() itd. Makra S_ISLNK() i S_ISSOCK() nie wystepowaly w POSIX.1-1996; pierwsze pochodzi z SVID 4, drugie z SUSv2. UNIX V7 (i pozniejsze systemy) posiadaly S_IREAD, S_IWRITE, S_IEXEC w miejscu okreslonych przez POSIX synonimow S_IRUSR, S_IWUSR i S_IXUSR. UWAGI Zglaszany przez jadro rozmiar pliku (stat.st_size; statx.stx_size) nie jest prawidlowy, w przypadku pseudoplikow generowanych automatycznie przez jadro. Przykladowo zwracana jest wartosc 0 wobec wielu plikow w katalogu /proc, natomiast wiele plikow w katalogu /sys zglasza rozmiar 4096 bajtow nawet, gdy zawartosc pliku jest mniejsza. W przypadku ww. plikow powinno sie probowac odczytac tak wiele bajtow, jak to mozliwe (i dodac ,,\0" do zwracanego bufora, jesli ma byc interpretowany jako lancuch tekstowy). ZOBACZ TAKZE stat(1), stat(2), statx(2), symlink(7) TLUMACZENIE Autorami polskiego tlumaczenia niniejszej strony podrecznika sa: Michal Kulach Niniejsze tlumaczenie jest wolna dokumentacja. Blizsze informacje o warunkach licencji mozna uzyskac zapoznajac sie z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje sie ZADNEJ ODPOWIEDZIALNOSCI. Bledy w tlumaczeniu strony podrecznika prosimy zglaszac na adres listy dyskusyjnej . Linux man-pages 6.06 31 pazdziernika 2023 r. inode(7)