Extended Attributes (xattrs) - это расширенные атрибуты файлов, позволяющие хранить дополнительные метаданные в виде пар "ключ = значение" прямо в файловой системе.
В отличие от стандартных атрибутов (права, владелец, размер, время изменения), xattrs позволяют:
автор=Алиса, проект=веб)Проще говоря:
xattrs- это "стикеры", которые можно наклеить на файл, чтобы хранить любую полезную информацию.
Дополнительно смотрите материал "Управление расширенными атрибутами из Python, модуль os"
xattrs используются для:
system.posix_acl_accesssecurity.selinuxsecurity.capabilityuser.backup=yes, user.owner=dev-teamchattr +i - косвенно связан)| Ограничение | Подробности |
|---|---|
| Размер значения | Обычно до 64 КБ на один атрибут |
| Общее количество | Ограничено размером inode и ФС |
| Имена атрибутов | Только ASCII, без пробелов, с префиксом пространства |
| Файловые системы | Работают на ext4, XFS, Btrfs, но не на FAT/NTFS/NFS без настройки |
| NFS | По умолчанию не передаёт xattrs - нужно mount -o user_xattr,acl |
| Резервное копирование | tar не сохраняет xattrs без флага --xattrs |
df -T /home
Убедись, что тип - ext4, xfs, btrfs и т.п.
mount | grep " $(df / | tail -1 | awk '{print $1}') "
Ищи в выводе:
acl - включена поддержка ACLuser_xattr - включены пользовательские xattrs (для ext*)На XFS и Btrfs
user_xattrвключён по умолчанию.
На ext4 -aclиuser_xattrнужно указать явно.
/etc/fstab:sudo nano /etc/fstab
/dev/sda1 / ext4 defaults 0 1
acl,user_xattr:/dev/sda1 / ext4 defaults,acl,user_xattr 0 1
Для XFS/Btrfs:
aclдостаточно.
sudo mount -o remount,acl,user_xattr /
(Замени / на нужную точку монтирования, например /home)
sudo apt update && sudo apt install acl attr -y
sudo yum install acl attr -y # или sudo dnf install acl attr -y
acl- предоставляетgetfacl,setfaclattr- предоставляетgetfattr,setfattr
touch /tmp/test.txt setfacl -m u:nobody:r /tmp/test.txt getfacl /tmp/test.txt
Должно появиться: user:nobody:r--
setfattr -n user.description -v "Тестовый файл" /tmp/test.txt getfattr -d /tmp/test.txt
Должно быть:
user.description="Тестовый файл"
Если ошибка Operation not supported - xattrs или ACL не включены.
Xattrs разделены на пространства имён - они определяют, кто может читать/писать:
| Пространство | Назначение | Доступ |
|---|---|---|
user. | Пользовательские данные | Любой пользователь (с правами на файл) |
security. | Безопасность (SELinux, EVM) | Только ядро или root |
system. | Системные атрибуты (ACL) | Только ядро |
trusted. | Доверенные данные | Только root |
Примеры:
user.comment="Скрипт деплоя" security.selinux="unconfined_u:object_r:admin_home_t:s0" system.posix_acl_access=... # ← ACL! trusted.backup_hash="a1b2c3d4"
setfattr -n user.author -v "Alice" script.sh
setfattr -n user.priority -v "high" /etc/config.json
setfattr -x user.author script.sh
getfattr -d script.sh
sudo getfattr -d -m - script.sh
Допустим, ты хочешь помечать файлы, которые обязательно нужно бэкапить.
# Помечаем файл setfattr -n user.backup -v "yes" /home/alice/work/report.docx # Позже - находим все такие файлы find /home -type f -exec getfattr -n user.backup {} \; 2>/dev/null | grep -B1 "user.backup"
Можно интегрировать в скрипт бэкапа:
#!/bin/bash find /home -type f -exec getfattr -n user.backup {} \; 2>/dev/null | grep -q "user.backup" && \ tar --xattrs -czf backup_$(date +%F).tar.gz $(find /home -type f -exec getfattr -n user.backup {} \; 2>/dev/null | grep -B1 "user.backup" | grep file: | cut -d: -f2)
| Задача | Команда |
|---|---|
| Установить xattr | setfattr -n user.ключ -v "значение" файл |
| Удалить xattr | setfattr -x user.ключ файл |
| Просмотр xattrs | getfattr файл |
| Все xattrs | getfattr -d файл |
| Все, включая системные | sudo getfattr -d -m - файл |
| Только user.* | getfattr -n user. файл |
| Сохранить все xattrs | getfattr -d -R /dir > xattrs_backup.txt |
| Восстановить | setfattr --restore=xattrs_backup.txt |
С tar (с xattrs) | tar --xattrs -cf backup.tar /dir |
С tar (восстановить) | tar --xattrs -xf backup.tar |
user.*- для своих меток - безопасно и понятно.security.* и system.* без понимания.--xattrs в tar, если нужно сохранить ACL или метки.user.status, user.owner).xattrs, но работают через удобные команды getfacl/setfacl.acl и user_xattr в /etc/fstab.getfattr, setfattr, getfacl, setfacl.