Skip to content

Commit 5b17bb6

Browse files
committed
docs: add file attributes (chattr/lsattr) documentation
- Document common file attributes (immutable, append-only, no-dump, etc.) - Add chattr/lsattr examples - Add Python API using ioctl - Explain why we won't implement (root required, deployment-specific)
1 parent 8c6155d commit 5b17bb6

1 file changed

Lines changed: 75 additions & 0 deletions

File tree

add_recursive_plan_v2.md

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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 = 0x80086601
1055+
FS_IOC_SETFLAGS = 0x40086602
1056+
1057+
# Flags
1058+
FS_IMMUTABLE_FL = 0x00000010
1059+
FS_APPEND_FL = 0x00000020
1060+
FS_NODUMP_FL = 0x00000040
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

Comments
 (0)