macOSの「ファイルフラグ」でファイルの挙動を制御する方法|chflagsコマンド徹底解説
macOSでは「フラグ(Flags)」を使って、ファイルに対して可能な操作を制限できます。フラグは一般的なパーミッションとは別の仕組みで設定され、chown や chmod といったコマンドとは並行して独立した構造として機能します。フラグの変更には chflags コマンドを、確認には ls コマンドを使用します。なお、Unix系OSにも同様の仕組みが存在しますが、そちらは「フラグ」ではなく「属性」と呼ばれ、より多くのオプションが用意されています。
macOSで設定済みのフラグを確認する方法
ターミナルで ls コマンドにオプションを付けることで、現在設定されているフラグを一覧表示できます。
ls -lO ~/Library 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でフラグを設定・解除する

フラグが問題になるケースは意外と多くあります。フラグはパーミッションを超える追加的な制限を課すため、見落とされやすいのが原因です。「管理者権限を持っているのにファイルが削除できない」といった状況に遭遇したら、1つか2つのフラグが設定されている可能性があります。
以下に、macOSで設定できるフラグの一覧とその機能を示します。これが利用可能な全オプションです。ほとんどのフラグはファイルの所有者かスーパーユーザーのみが設定でき、sappnd と schg はシステムレベルのフラグであるためスーパーユーザーしか設定できません。特権昇格なしで設定できるのは「hidden」フラグだけです。
macOSでフラグを設定する
macOSでフラグを設定する際は、以下のコマンドを使用します。ディレクトリ単位の操作には再帰オプション -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
なお、1回の chflags コマンドで設定・解除できるフラグは1つだけです。
- opaque:ユニオンマウント経由でフォルダを表示した際に不透明(中身を見せない)として扱います。ユニオンマウントは複数のディレクトリを同時に表示する古い方式です。
- nodump:
dumpコマンドでシステムをバックアップする際、そのファイルやフォルダがバックアップ対象から除外されます。 - sappnd / sappend:システムレベルの追記専用(append-only)フラグを設定します。ファイルへの追加は可能ですが、修正や削除はできません。このフラグを解除するにはシングルユーザーモードへの移行が必要です。
- schg / schange / simmutable:システムレベルのイミュータブル(不変)フラグを設定します。すべてのユーザーによるあらゆる権限レベルでのファイル変更をロックします。解除にはシングルユーザーモードが必要です。
- uappnd / uappend:ユーザーレベルの追記専用フラグを設定します。ファイルの所有者が設定でき、特権昇格なしで所有者自身が解除できます。
sappndやschgほど強力ではないため、実際にはこちらの方が頻繁に使われます。 - uchg / uchange / uimmutable:ユーザーレベルのイミュータブルフラグを設定します。システムイミュータブルフラグとの関係は、
uappndとsappndの関係と同じです。 - hidden:隠しファイルフラグを設定します。FinderのGUI上や
lsコマンドの結果からその項目が非表示になります。
macOSでフラグを解除する
特定のフラグを解除するには、その逆のフラグを設定します。多くの場合、コマンドの先頭に「no」を付けるだけでOKです。ただし nodump の場合は例外で、解除には dump フラグを使用します。
sudo chflags dump /usr/bin/local/oty.sh
それ以外の標準的なフラグは「no」プレフィックスで反転できます。
sudo chflags nosappnd /usr/bin/local/oty.sh
chmod と同様に、再帰オプションも利用できます。
chflags -R nohidden ~/Desktop
フラグを解除すれば、通常どおりファイルの所有者やパーミッションを自由に変更できるようになります。
Unix系OSで属性を使う

Unix系OSでもバックエンドでは同様の仕組みが動作していますが、扱い方は異なるコマンド体系になっています。主要なLinuxディストリビューションでは、代わりに chattr と lsattr コマンドを使用します。これらは「属性」を変更・表示するためのもので、他の多くのUnix環境ではフラグは「属性」と呼ばれています。
属性は lsattr で確認できます。
lsattr /path/to/file.txt
属性の変更は略号のコードに基づいて行われ、詳細は chattr のマニュアルページに記載されています。
「'acdeijstuADST' の文字は、ファイルの新しい属性を選択する:追記専用、圧縮、ダンプ除外、エクステント形式、不変、データジャーナリング、安全な削除、テールマージ無効、削除不可、atime更新なし、同期ディレクトリ更新、同期更新、ディレクトリ階層の最上位。」
コマンドの書式は次のとおりです。
chattr +s /file/name.txt
この例では、指定したパスに「安全な削除」属性を設定しています。
まとめ
フラグは「誰がファイルを変更できるか」を制限したい場合に最も有用です。ファイルをロックすることで、ファイルシステムレベルで改ざんや誤編集を防げます。rootへの昇格またはファイル所有者の権限がない限りこれらの設定は変更できないため、それなりに堅牢なセキュリティ対策と言えます。
-
macOSでターミナル(コマンドライン)を使う方法|基本操作と便利なコマンドを解説
Windowsに「コマンドプロンプト」があるように、macOSにはコマンドの実行やシステム変更に使える「ターミナル」が標準搭載されています。ターミナルはmacOS専用のコマンドラインアプリケーションで、システム設定の変更、ファイルやアプリの起動、さまざまなタスクの実行などに活用できます。Appleが開発したこのアプリは、macOSの標準アプリとして最初からインストールされており、OSをアップデートしても常に同梱されています。ターミナルアプリはMacの「ユーティリティ」フォルダ内にあります。 つまり、ターミナルはMac版のコマンドプロンプトです。「Macでコマンドラインにはどうやってアクセスす
-
CPGZファイルとは?概要とmacOSでの開き方を徹底解説
「CPGZ」という拡張子をご存じでしょうか。MacやLinuxユーザーなら、一度は目にしたことがあるかもしれません。CPGZファイルは、ソフトウェアやアプリ、ドキュメント、動画などのさまざまなデータを格納するために使われる圧縮アーカイブ形式です。 本記事では、MacでZIP/CPGZファイルを開く方法を紹介する前に、まずCPGZファイルとは何か、なぜ利用されるのかについてわかりやすく解説します。 あわせて読みたい: iPhoneでZIPファイルを作成・開く方法 CPGZファイルとは? CPGZファイルは、CPIOファイル形式の発展形です。CPIO(Copy In Copy Out)は、もとも