著者:関 勝寿
公開日:2026年7月14日
キーワード: mac

macOS の ls コマンドには、Linux の ls(GNU coreutils)にはない BSD 系独自のオプションがいくつか存在する。その中でも、「名前を変更できない」「chmod が失敗する」といったようなトラブルの時に役立つのが -O-@ オプションである。

実行例

ls -lO@

と実行して、

-r--------@ 1 seki staff uchg 140425 report.pdf

という表示であれば、

  • @ が付いているため拡張属性が存在する。
  • uchg が付いているため変更禁止フラグが設定されている。

ことが分かる。

-O オプション

-O オプションは、ファイルのフラグ(file flags)を表示する。例えば、

$ ls -lO
-r--------  1 seki  staff  uchg  140425 Jul 14 10:32 report.pdf

ここで表示されている uchguser immutable flag を意味し、このフラグが付いているファイルは所有者であっても内容の変更、名前の変更、削除、パーミッション変更などが禁止される。主なフラグには次のようなものがある。詳しくは BSD File Flags を参照。

フラグ 意味
uchg ユーザーによる変更禁止(user immutable)
uappnd ユーザーによる追記のみ許可(user append-only)
hidden Finder で非表示にする
schg システム変更禁止(system immutable)
sappnd システム追記のみ許可(system append-only)

フラグは chflags コマンドで変更できる。uchg フラグについては、

chflags uchg filename

で設定し、

chflags nouchg filename

で解除する。uchg が設定されたファイルは、所有者であっても chmodmvrm などが失敗し、Operation not permittedPermission denied が表示される場合がある。

-@ オプション

-@ オプションは、ファイルに設定されている拡張属性(Extended Attributes, xattr)の存在を表示する。例えば、

$ ls -l@
-rw-r--r--@ 1 seki staff 140425 Jul 14 10:32 report.pdf
        com.apple.lastuseddate#PS      16
        com.google.drivefs.item-id     33

この例では、次の二つの拡張属性が設定されている。

  • com.apple.lastuseddate#PS : ファイルの最終利用日時に関する情報
  • com.google.drivefs.item-id : Google Drive for Desktop が管理するファイル識別子

拡張属性の内容を詳しく確認するには、

xattr -l filename

を実行する。不要な属性は

xattr -d 属性名 filename

で削除できる。

ファイルフラグと拡張属性は混同されやすいが、目的が異なる。

  • ファイルフラグは、ファイルシステムが管理する特殊な属性であり、変更禁止や追記専用など、ファイルの動作そのものに影響を与える。
  • 拡張属性は、ファイルに付加される追加情報であり、アプリケーションや Finder が利用するメタデータである。

uchgschg・SIP の関係

macOS のファイルフラグには、ユーザー用とシステム用の二種類が存在する。

フラグ 名称 設定・解除できるユーザー 用途
uchg User immutable 所有者または root ユーザーによる変更禁止
uappnd User append-only 所有者または root ユーザーによる追記のみ許可
schg System immutable root(制約あり) システムレベルの変更禁止
sappnd System append-only root(制約あり) システムレベルの追記のみ許可

schg はシステム変更禁止フラグであり、uchg よりも強力である。FreeBSD などでは root 権限を持つユーザーが設定・解除できるが、macOS では SIP(System Integrity Protection)の影響を受ける。そのため、通常の macOS 環境では root であっても簡単には解除できない。

SIP (System Integrity Protection) は OS X 10.11 El Capitan 以降に導入された macOS のセキュリティ機構であり、システムファイルや重要なディレクトリを保護する。SIP が有効な状態では、

  • /System
  • /usr/usr/local を除く)
  • /bin
  • /sbin
  • 一部の /Library

などに対する変更は、root 権限を持っていても制限される。また、SIP は一部のシステムフラグ(schg など)についても保護を行うため、root 権限だけでは変更できない場合がある。役割を整理すると次のようになる。

機能 保護対象 主な目的
uchg 個々のファイル ユーザーによる変更を禁止する
schg 個々のファイル システムレベルで変更を禁止する
SIP OS 全体 システム領域や重要ファイルを保護する

つまり、uchgschg はファイルシステム上のファイルフラグであり、SIP はmacOS 全体の保護機構である。

通常のユーザーが遭遇する「名前を変更できない」「chmod が失敗する」といった問題は、多くの場合 uchg が原因であり、ls -lO を実行すると確認できる。一方、システムファイルの変更に関する問題では、schg よりも SIP が原因となっていることが多い。