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.