Posted on Hozzászólás most!

defaults-the Plist Killer

a múlt héten, fickó Macadmin Kyle Crawford felfedezte, hogy a macOS High Sierra a defaults törli a tulajdonságlista fájl érvénytelen plist/XML szintaxis, akkor is, ha csak megpróbálja olvasni az adatokat. Erik Holtham egy részletesebb OpenRadar bug.

Patrik Wardle megtalálta a megfelelő kódot, amely törli a fájlt, ha nem érvényesíti.

ez rossz. Köszönet minden érintettnek, hogy megtalálta, dokumentálta és megosztotta ezt.

ez új viselkedés a High Sierra-ban. Még nem vagyok biztos benne, hogy a High Sierra melyik verzióját vezették be ezt az új viselkedést. A viselkedésnek akkor van értelme, ha egy alkalmazás megpróbál olvasni egy beállítási fájlt, de a defaults eszköz tetszőleges fájlok törlése természetesen veszélyes.

frissítés: ezt a viselkedést a 10.13.4. Azonban még mindig jó gyakorlat a defaults elkerülése a tényleges preferenciafájlokon kívül.

mi a teendő?

mint általában, ne essen pánikba. Ez csak a High Sierra-t futtató Mac-eket, valamint a sérült vagy törött fájlokat érinti. Ha azonban van olyan parancsfájl, amely véletlenül egy másik fájlra irányítja a defaults parancsot, akkor azt törli. Tehát óvatosan kell használni.

valószínűleg jó gyakorlat egy fájl ellenőrzése, mielőtt megkísérelné módosítani a defaults paranccsal egy plutil paranccsal rendelkező szkriptben:

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

a

alapértékek alternatívái alternatívaként a plutil vagy a PlistBuddy használatával olvashatja és módosíthatja a tulajdonságlista fájljait.

További információ a plutil, PlistBuddy és egyéb eszközökről a saját könyv tulajdonságlistáinak olvasásához és írásához: “Tulajdonlisták, preferenciák és profilok az Apple rendszergazdái számára”

plutil sajnos nem igazán hasznos egyetlen értéket olvasni egy tulajdonságlista fájlból. A extract ige minden értéket saját plistként jelenít meg. A plutil parancs hasznos a meglévő plist fájlok szerkesztéséhez. (Olvassa el a plutil parancs részleteit.)

PlistBuddy, azonban nagyon hasznos mind olvasás írásban értékeket egy tulajdonságlista fájlt:

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

PlistBuddy további előnye, hogy lehetővé teszi a dict vagy array struktúrákba beágyazott értékek hozzáadását vagy szerkesztését.

további információt a PlistBuddy man oldalán vagy a könyvemben talál.

a PlistBuddy interaktív módja szintén nagyon hasznos.

tehát a defaults parancs halott?

szám.

az Apple már jó ideje figyelmeztet minket, hogy ne használjuk a defaults – et az Általános tulajdonságlista szerkesztéséhez és elemzéséhez a defaults parancs man oldalán:

figyelem: a defaults parancs egy közelgő nagyobb kiadásban megváltozik, hogy csak a preferenciák tartományain működjön. Általános plist manipuláció utilities lesz hajtva egy másik parancssori programot.

amint ez a figyelmeztetés kimondja, a defaults eszköz beolvassa és írja az adatokat a plist fájlokba a macOS preferenciarendszerén keresztül. Ennek az az előnye, hogy az eszköz megkapja (és megváltoztatja) az aktuális értéket, függetlenül attól, hogy a memóriában van-e Gyorsítótárazva. Amikor egy alkalmazás figyeli az értesítéseket, hogy egy preferencia megváltozott (nem sokan), akkor értesítést kap.

a preferencia tartományok fájljait általában /Library/Preferences/, ~/Library/Preferences vagy azok ByHost almappáiban tárolják. Sandboxolt alkalmazások lesz a preferencia plist fájlokat a tárolóban.

ott azonban sok más fájl, amely tulajdonság, felsorolja azokat a fájlokat, amelyek nem részei a felhasználói alapértelmezett rendszernek: launchd fájlok, konfigurációs profilok és AutoPkg receptek, hogy csak néhányat említsünk.

a Mac rendszergazdák az Apple figyelmeztetése ellenére gyakran használják a defaults eszközt általános plist fájlok létrehozására, olvasására és szerkesztésére. Mint fentebb említettük, a plutil, PlistBuddy vagy az Obj-C, A Python vagy a Swift általi közvetlen manipuláció jobb választás az Általános plist fájlokhoz.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.