Флаги и атрибуты файлов в macOS и Unix: chflags, chattr и ls

Флаги используются в macOS для ограничения изменений файла. Они задаются отдельно от классических прав доступа и работают параллельно с командами вроде chown и chmod. Для изменения флагов используется команда chflags, а для просмотра — ls. В Unix-подобных системах есть похожая система, где такие параметры обычно называются атрибутами и управляются через chattr и lsattr.
Как просмотреть установленные флаги на macOS
В Terminal можно использовать ключи ls для отображения флагов. На macOS флаг отображается в отдельной колонке, если вы используете формат списка с опцией O:
ls -lO ~
# Пример вывода: (объяснён для наглядности)
drwx------@ 88 alexander staff hidden 2992 Jan 25 14:01 LibraryЕсли для файла или папки флаги не установлены, вместо имени флага выводится дефис:
ls -lO ~/Library/Caches
# Пример вывода:
drwx------+ 234 alexander staff - 7956 Jan 25 13:03 CachesКолонка с флагами покажет либо конкретные флаги, либо дефис, если их нет.
Установка и снятие флагов на macOS

Флаги часто становятся причиной проблем: они действуют как «надправа», поэтому их легко пропустить. Если файл «неудаляем», даже с привилегиями администратора, вероятно, установлен флаг, мешающий удалению.
Ниже — полный набор флагов, доступных в macOS, и краткое объяснение. Большинство флагов может устанавливать только владелец файла или суперпользователь; sappnd и schg — системные флаги и могут выставляться только суперпользователем. Только флаг hidden можно установить без повышения привилегий.
Команды установки
Для установки флага используйте chflags. Для директорий доступна рекурсивная опция -R:
sudo chflags -R [flag] /usr/bin/local
sudo chflags [flag] /usr/bin/local/mnt.sh
chflags -R hidden ~/DesktopПример установки nodump:
sudo chflags nodump /usr/bin/local/tty.shВажно: в одной команде chflags обычно задают один флаг.
Список флагов и объяснения:
- opaque — делает папку «непрозрачной» при просмотре через union mount; полезно при объединении нескольких директорий.
- nodump — помечает файл/папку, чтобы команда dump (резервное копирование) их пропускала.
- sappnd, sappend — системный флаг «только добавление»: файл можно дописывать, но нельзя изменить или удалить. Снятие — только из single-user режима (режима одного пользователя).
- schg, schange, simmutable — системный флаг «immutable»: запрещает любые изменения файла даже суперпользователю. Снятие — только в single-user режиме.
- uappnd, uappend — пользовательский флаг «только добавление». Может быть установлен и снят владельцем без повышения прав.
- uchg, uchange, uimmutable — пользовательский флаг «immutable», аналогичен системному, но доступен владельцу.
- hidden — скрывает элемент в Finder и делает его невидимым в обычном выводе ls (если не использовать соответствующие ключи).
Снятие флагов
Чтобы снять флаг, задайте противоположный ему параметр. В большинстве случаев это делается путём добавления префикса no к названию флага. Для nodump используется dump:
sudo chflags dump /usr/bin/local/oty.shИли стандартно:
sudo chflags nosappnd /usr/bin/local/oty.shРекурсивная операция:
chflags -R nohidden ~/DesktopПосле того как флаги сняты, можно менять владельца и права доступа как обычно (chown, chmod).
Атрибуты в Unix/Linux: chattr и lsattr

В большинстве Linux-дистрибутивов аналог флагов macOS называется атрибутами и управляется утилитами chattr и lsattr. Формат и набор опций отличаются, но концепция близка: атрибуты меняют поведение файловой системы относительно файла.
Просмотр атрибутов:
lsattr /path/to/file.txtОписание буквенных кодов атрибутов (сокращённо, см. man chattr для деталей):
«Буквы ‘acdeijstuADST’ выбирают новые атрибуты для файлов: a — только добавление, c — сжатие, d — no dump, e — extent format, i — immutable, j — data journalling, s — secure deletion, t — no tail-merging, u — undeletable, A — no atime updates, D — synchronous directory updates, S — synchronous updates, T — top of directory hierarchy.»
Пример установки атрибута secure deletion (s):
chattr +s /file/name.txtИли установка immutable в Linux:
chattr +i /etc/important.confЧтобы снять, используйте минус:
chattr -i /etc/important.confОбратите внимание, что действия chattr обычно требуют прав root.
Практическое руководство: что делать, если файл нельзя удалить
Шаблон действий при проблеме «файл не удаляется»: простая пошаговая методика для скорости и безопасности.
- Просмотрите флаги/атрибуты:
- macOS: ls -lO /path/to/file
- Linux: lsattr /path/to/file
- Если виден флаг/атрибут, попытайтесь снять его:
- macOS: sudo chflags [no]flag /path/to/file
- Linux: sudo chattr -i /path/to/file
- Проверьте владельца и права: ls -l /path/to/file и chown/chmod при необходимости.
- Если флаг системный (sappnd, schg) и нельзя снять как root, перезагрузитесь в single-user режим и снимите там (macOS).
- После снятия флагов удалите/измените файл и верните файлам любые необходимые ограничения.
Когда флаги и атрибуты не помогут
- Файловая система смонтирована только для чтения. В этом случае ни chflags, ни chattr не помогут: нужно перемонтировать с правами записи или исправить ошибки монтирования.
- Файл защищён железом (например, устаревшая флешка с аппаратной защитой) — флаги не решают проблему.
- Проблемы на уровне драйвера или коррумпированный индекс файловой системы — сначала выполните fsck или соответствующую проверку диска.
Альтернативные подходы
- Access Control Lists (ACL) — гибче для управления правами доступа пользователей и групп; используются через команды chmod/ls или getfacl/setfacl в Linux.
- Контейнеризация и sandboxing — изолировать изменяемые данные в контейнере, где права и атрибуты контролируются на уровне образа.
- Шифрование данных — для защиты содержимого вместо блокировки изменений.
Ментальные модели и эвристики
- Флаги = «ширмы» поверх прав доступа: они ограничивают действия даже при наличии прав на запись.
- Системные флаги = «крайняя мера»: предполагают вмешательство администратора на низком уровне (single-user mode).
- Пользовательские флаги = «локальные замки»: могут ставиться и сниматься владельцем без перегрузки системы.
Быстрые примеры команд и шпаргалка
- Просмотр (macOS): ls -lO /path/to
- Просмотр (Linux): lsattr /path/to
- Установка флага: sudo chflags nodump /path/to/file
- Снятие флага: sudo chflags nohidden /path/to/dir
- Установка атрибута immutable (Linux): sudo chattr +i /path/to/file
- Снятие атрибута immutable (Linux): sudo chattr -i /path/to/file
Рольовые чек-листы
Администратор:
- Проверить, замонтирована ли ФС в режиме чтения
- Просмотреть флаги/атрибуты
- Снять системные флаги в single-user режиме при необходимости
- Проверить целостность файловой системы (fsck)
Обычный пользователь:
- Посмотреть флаги через ls -lO
- Снять пользовательские флаги (uchg/uappnd) если вы — владелец
- Обратиться к администратору при системных флагах
Критерии приёмки
- Файл можно удалить или изменить после снятия флагов/атрибутов
- Проверка: ls -lO или lsattr не показывает блокирующих флагов
- Права и владелец установлены корректно и безопасно
Простая схема принятия решения
flowchart TD
A[Файл нельзя удалить] --> B{ФС смонтирована как read-only?}
B -- Да --> C[Перемонтировать с правами записи]
B -- Нет --> D[Проверить флаги / атрибуты]
D --> E{Найден флаг/атрибут?}
E -- Нет --> F[Проверить права и владельца]
E -- Да --> G{Системный флаг?}
G -- Да --> H[Перезагрузиться в single-user, снять флаг]
G -- Нет --> I[Снять флаг как владелец/root]
I --> J[Удалить/изменить файл]
H --> J
F --> JКороткое объявление для команды (100–200 слов)
Флаги (macOS) и атрибуты (Linux) — это дополнительные механизмы защиты файловой системы, которые блокируют изменение или удаление файлов. Если при работе вы обнаружили, что файл «неудаляем», сначала проверьте флаги через ls -lO (macOS) или lsattr (Linux). Для снятия используйте chflags (macOS) или chattr (Linux); системные флаги нужно снимать в single-user режиме. Если файловая система смонтирована только для чтения, сначала перемонтируйте её с правами записи. Вопросы и необычные случаи — направлять администраторам с описанием проблемы и выводом команд ls/lsattr.
Краткая глоссарий за одну строку
- flаg / флаг — метка macOS, изменяющая поведение файла сверх прав доступа; - attribute / атрибут — аналогична метка в Linux.
Подводя итог
Флаги и атрибуты полезны для предотвращения случайных изменений и улучшения защиты файлов на уровне ФС. Для решения проблем сначала просмотрите флаги/атрибуты, затем снимите их корректным инструментом (chflags или chattr). Если же причина в монтировании или повреждении ФС, сначала устраните эти причины.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента