に投稿 コメントを残す

defaults–Plist Killer

先週、仲間のMacAdmin Kyle Crawfordは、macOS High Sierraでdefaultsが無効なplist/XML構文を持つプロパティリストファイルを削除することを発見しました。 Erik Holthamにはより詳細なOpenRadarバグがあります。

Patrik Wardleが関連するコードを見つけました。

これは悪いです。 これを見つけ、文書化し、共有するためのすべての関係者に感謝します。

これはHigh Sierraでの新しい動作です。 この新しい動作が導入されたHigh Sierraのバージョンはまだわかりません。 この動作は、アプリケーションが設定ファイルを読み取ろうとするコンテキストでは理にかなっていますが、任意のファイルを削除するdefaultsツールは、

更新:この動作は10.13.4で修正されました。 ただし、実際の環境設定ファイル以外のものについてはdefaultsを避けることをお勧めします。

何をすべきか?

いつものように、慌てないでください。 これは、High Sierraを実行しているMacと、破損したファイルまたは壊れたファイルにのみ影響します。 しかし、誤ってdefaultsコマンドを別のファイルに指しているスクリプトがある場合、それはそれを削除します。 だからあなたは注意してそれを使用する必要があります。

スクリプト内のdefaultsコマンドを使用してファイルを変更しようとする前に、ファイルを検証することをお勧めします。plutilコマンド:

if ! plutil -lint path/to/file.plist; then echo "broken plist" exit 1else defaults path/to/file …fi

defaults

の代わりに、plutilまたはPlistBuddyを使用してプロパティリストファイルを読み取ったり変更したりすることもできますし、使用する必要があります。

私の本の中でプロパティリストを読み書きするためのplutilPlistBuddyおよびその他のツールの詳細については、

私の本の中でプロパティリストを読: “アップルの管理者のためのプロパティリスト、環境設定とプロフ”

plutil 残念ながら、プロパティリストファイルから単一の値を読み取るのには本当に便利ではありません。 extract動詞は、任意の値を独自のplistとして表示します。 plutilコマンドは、既存のplistファイルを編集するのに便利です。 (plutilコマンドの詳細を参照してください。)

PlistBuddy, しかし、プロパティリストファイルへの書き込み値の読み取りの両方に非常に便利です:

$ /usr/libexec/PlistBuddy berry.plist -c "print size"$ /usr/libexec/PlistBuddy berry.plist -c "set size enormous"

PlistBuddy dictまたはarray構造体の奥深くにネストされた値を追加または編集できるという追加の利点があります。

PlistBuddyの詳細については、manページまたは私の本を参照してください。

PlistBuddyの対話モードも非常に便利です。

だからdefaultsコマンドは死んでいますか?

Appleは、defaultsコマンドのmanページで、汎用プロパティリストファイルの編集と解析にdefaultsを使用しないように警告しています:

警告:defaultsコマンドは、今後のメジャーリリースで変更され、環境設定ドメインでのみ動作するようになります。 一般的なplist操作ユーティリティは、別のコマンドラインプログラムに折り畳まれます。

この警告が表示されているように、defaultsツールはmacOSの環境設定システムを介してplistファイルにデータを読み書きします。 これには、メモリにキャッシュされているかどうかにかかわらず、ツールが現在の値を取得(および変更)するという利点があります。 アプリケーションが設定が変更されたという通知をリッスンしている場合(多くはありません)、通知されます。設定ドメインの

ファイルは、通常、/Library/Preferences/~/Library/Preferences、またはそのByHostサブフォルダに格納されます。 サンドボックス化されたアプリケーションは、コンテナ内にプリファレンスplistファイルを持ちます。

しかし、ユーザーのデフォルトシステムの一部ではないプロパティリストファイルである他の多くのファイル:launchdファイル、構成プロファイル、AutoPkgのレシピ

Mac管理者は、Appleの警告にもかかわらず、一般的なplistファイルを作成、読み取り、編集するために、一般的にdefaultsツールを使用します。 上記のように、plutilPlistBuddy、またはObj-C、Python、またはSwiftを介した直接操作は、一般的なplistファイルの方が優れた選択肢です。

コメントを残す

メールアドレスが公開されることはありません。