@@ -1008,3 +1008,78 @@ def preallocate_file(fd, size):
10081008- Včasné zjištění nedostatku místa (před zahájením přenosu dat)
10091009
10101010** Poznámka:** Toto bude implementováno jako součást --recursive.
1011+
1012+ ### File Attributes (chattr/lsattr)
1013+
1014+ Linux filesystémy (ext2/3/4, XFS, btrfs) podporují speciální atributy souborů nastavované pomocí ` chattr ` .
1015+
1016+ ** Běžné atributy:**
1017+
1018+ | Flag | Název | Popis |
1019+ | ------| -------| -------|
1020+ | ` i ` | Immutable | Soubor nelze měnit, mazat, přejmenovávat ani linkovat |
1021+ | ` a ` | Append-only | Do souboru lze pouze přidávat data (užitečné pro logy) |
1022+ | ` d ` | No-dump | Soubor se přeskočí při ` dump ` zálohování |
1023+ | ` A ` | No-atime | Neaktualizovat atime při čtení |
1024+ | ` S ` | Synchronous | Změny se zapisují synchronně na disk |
1025+ | ` D ` | Synchronous directory | Synchronní zápis pro adresář |
1026+ | ` e ` | Extents | Soubor používá extenty (ext4, automaticky) |
1027+ | ` j ` | Journaled | Data se zapisují do žurnálu před zápisem na disk |
1028+
1029+ ** Ukázka práce s atributy:**
1030+ ``` bash
1031+ # Zobrazení atributů
1032+ lsattr soubor.txt
1033+ # ----i--------e---- soubor.txt
1034+
1035+ # Nastavení immutable
1036+ sudo chattr +i soubor.txt
1037+
1038+ # Odebrání immutable
1039+ sudo chattr -i soubor.txt
1040+
1041+ # Nastavení append-only (užitečné pro logy)
1042+ sudo chattr +a /var/log/app.log
1043+
1044+ # Rekurzivní nastavení
1045+ sudo chattr -R +i /etc/important/
1046+ ```
1047+
1048+ ** Python API:**
1049+ ``` python
1050+ import fcntl
1051+ import struct
1052+
1053+ # Konstanty pro ioctl
1054+ FS_IOC_GETFLAGS = 0x 80086601
1055+ FS_IOC_SETFLAGS = 0x 40086602
1056+
1057+ # Flags
1058+ FS_IMMUTABLE_FL = 0x 00000010
1059+ FS_APPEND_FL = 0x 00000020
1060+ FS_NODUMP_FL = 0x 00000040
1061+
1062+ def get_file_attrs (path ):
1063+ """ Přečte file attributes."""
1064+ with open (path, ' r' ) as f:
1065+ buf = struct.pack(' i' , 0 )
1066+ result = fcntl.ioctl(f.fileno(), FS_IOC_GETFLAGS , buf)
1067+ return struct.unpack(' i' , result)[0 ]
1068+
1069+ def set_file_attrs (path , flags ):
1070+ """ Nastaví file attributes."""
1071+ with open (path, ' r' ) as f:
1072+ buf = struct.pack(' i' , flags)
1073+ fcntl.ioctl(f.fileno(), FS_IOC_SETFLAGS , buf)
1074+ ```
1075+
1076+ ** Use cases:**
1077+ - Ochrana konfiguračních souborů před náhodnou změnou (` +i ` )
1078+ - Append-only logy pro audit trail (` +a ` )
1079+ - Optimalizace výkonu vypnutím atime (` +A ` )
1080+
1081+ ** Proč neimplementujeme:**
1082+ - Immutable soubory vyžadují root pro změnu - komplikuje přenos
1083+ - Atributy jsou často specifické pro konkrétní deployment
1084+ - rsync také standardně nepřenáší tyto atributy
1085+ - Lze přidat jako budoucí rozšíření s volbou ` --file-attrs `
0 commit comments