Publikováno Napsat komentář

výchozí-plist Killer

minulý týden kolega MacAdmin Kyle Crawford zjistil, že na macOS High Sierra defaults odstraní soubor seznamu vlastností s neplatnou syntaxí PLIST/XML, i když se jen pokusíte číst data. Erik Holtham má podrobnější chybu OpenRadar.

Patrik Wardle našel příslušný kód, který odstraní soubor, když není ověřen.

to je špatné. Děkujeme všem zúčastněným za nalezení, dokumentování a sdílení.

Toto je nové chování v High Sierra. Zatím si nejsem jistý, která verze High Sierra byla představena. Toto chování má smysl v kontextu aplikace, která se pokouší číst soubor nastavení, ale nástroj defaults, který odstraňuje libovolné soubory, je samozřejmě nebezpečný.

aktualizace: toto chování bylo opraveno v 10.13.4. Je však stále dobrým zvykem vyhnout se defaults pro cokoli jiného než skutečné soubory předvoleb.

co dělat?

jako obvykle nepropadejte panice. To ovlivní pouze počítače Mac se systémem High Sierra a poškozené nebo poškozené soubory. Pokud však máte skript, který omylem ukazuje příkaz defaults na jiný soubor, odstraní to. Takže ji musíte používat opatrně.

pravděpodobně je dobré ověřit soubor před pokusem o jeho úpravu příkazem defaults ve skriptu příkazem plutil :

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

alternativy k výchozím

Alternativně můžete a měli byste použít plutil nebo PlistBuddy ke čtení a úpravě souborů seznamu vlastností.

další informace o plutil, PlistBuddy a dalších nástrojích pro čtení a zápis seznamů vlastností v mé knize: „Seznamy vlastností, Předvolby a profily pro správce Apple“

plutil bohužel není opravdu užitečné číst jednu hodnotu ze souboru seznamu vlastností. Sloveso extract zobrazí libovolnou hodnotu jako vlastní plist. Příkaz plutil je užitečný pro úpravu existujících souborů plist. (Přečtěte si podrobnosti o příkazu plutil.)

PlistBuddy, je však velmi užitečné pro čtení hodnot zápisu do souboru seznamu vlastností:

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

PlistBuddy má další výhodu v tom, že umožňuje přidávat nebo upravovat hodnoty vnořené hluboko do struktur dict nebo array.

můžete získat více informací o PlistBuddy v jeho manuálové stránce nebo mé knize.

interaktivní režim PlistBuddy je také velmi užitečný.

takže výchozí příkaz je mrtvý?

č.

společnost Apple nás varuje, abychom nepoužívali defaults pro editaci a analýzu souborů se seznamem obecných vlastností na manuálové stránce příkazu defaults :

varování: výchozí příkaz bude změněn v nadcházející hlavní verzi, aby fungoval pouze na doménách předvoleb. Obecné manipulační nástroje plist budou složeny do jiného programu příkazového řádku.

jak toto varování uvádí, nástroj defaults čte a zapisuje data do souborů plist prostřednictvím systému předvoleb systému macOS. To má tu výhodu, že nástroj získá (a změní) aktuální hodnotu, ať už je uložen v paměti nebo ne. Když aplikace poslouchá oznámení, že se preference změnila (ne mnoho), bude oznámena.

soubory pro preferenční domény jsou obvykle uloženy v /Library/Preferences/, ~/Library/Preferences nebo jejich ByHost podsložkách. Sandboxed aplikace budou mít své preference plist soubory ve svém kontejneru.

Existuje však mnoho dalších souborů, které jsou soubory seznamu vlastností, které nejsou součástí výchozího systému uživatele: launchd soubory, konfigurační profily a recepty AutoPkg, abychom jmenovali jen několik.

Mac Administrátoři běžně používají nástroj defaults, navzdory varování společnosti Apple, k vytváření, čtení a úpravě obecných souborů plist. Jak bylo uvedeno výše, plutil, PlistBuddy nebo přímá manipulace pomocí Obj-C, Python nebo Swift, jsou lepší volbou pro obecné soubory plist.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.