Julkaistu Jätä kommentti

defaults-The Plist Killer

viime viikolla macadmin Kyle Crawford on havainnut, että MacOS High Sierra defaults poistaa ominaisuusluettelotiedoston, jossa on virheellinen plist/XML-syntaksi, vaikka vain yrittää lukea tietoja. Erik Holthamilla on tarkempi openradar-bugi.

Patrik Wardle on löytänyt asiaankuuluvan koodin, joka poistaa tiedoston, kun sitä ei vahvisteta.

tämä on huono. Kiitos kaikille osallisille tämän löytämisestä, dokumentoinnista ja jakamisesta.

tämä on uutta käyttäytymistä High Sierralla. En ole vielä varma, mikä versio High Sierrasta tämä uusi käyttäytyminen otettiin käyttöön. Käyttäytyminen on järkevää asetustiedostoa yrittävän sovelluksen yhteydessä, mutta mielivaltaisia tiedostoja poistava defaults – työkalu on tietenkin vaarallinen.

päivitys:tämä käyttäytyminen on korjattu 10.13.4. Edelleen on kuitenkin hyvä käytäntö välttää defaults kaikkea muuta kuin varsinaisia preferenssitiedostoja.

Mitä tehdä?

kuten tavallista, älä panikoi. Tämä vaikuttaa vain Macit käynnissä Korkea Sierra ja korruptoitunut tai rikki tiedostoja. Jos skripti kuitenkin osoittaa komennon defaults vahingossa eri tiedostoon, se poistaa sen. Joten sinun täytyy käyttää sitä varoen.

on luultavasti hyvä tapa tarkistaa tiedosto ennen kuin yrität muokata sitä defaults – komennolla skriptissä, jossa on plutil – komento:

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

vaihtoehdot oletuksille

Vaihtoehtoisesti voit ja sinun tulisi käyttää plutil tai PlistBuddy omaisuusluettelotiedostojen lukemiseen ja muokkaamiseen.

Lue lisää plutil, PlistBuddy ja muista työkaluista lukea ja kirjoittaa omaisuusluetteloita Kirjaani: ”Applen järjestelmänvalvojien ominaisuusluettelot, Asetukset ja profiilit”

plutil ei valitettavasti ole todella hyödyllistä lukea yhtä arvoa omaisuusluettelotiedostosta. extract verbi osoittaa mitä tahansa arvoa omana plistinaan. Komento plutil on hyödyllinen olemassa olevien plist-tiedostojen muokkaamiseen. (Lue yksityiskohdat plutil – komennosta.)

PlistBuddy, on kuitenkin erittäin hyödyllistä sekä lukea kirjoitusarvoja omaisuusluettelotiedostoon:

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

PlistBuddy on lisäetu antaa lisätä tai muokata arvoja, jotka ovat sisäkkäisiä syvällä dict tai array rakenteissa.

lisätietoa PlistBuddy saat sen miessivulta tai minun kirjaltani.

PlistBuddy Vuorovaikutteinen tila on myös erittäin hyödyllinen.

joten defaults-komento on kuollut?

Ei.

Apple on varoittanut meitä käyttämästä defaults yleistä ominaisuusluetteloa tiedostojen muokkaamiseen ja jäsentämiseen jo pitkään defaults komennon man-sivulla:

varoitus: defaults-komento muutetaan tulevassa pääjulkaisussa toimimaan vain asetustunnuksilla. General plist manipulation utilities taitetaan eri komentoriviohjelmaan.

kuten tässä varoituksessa todetaan, defaults – työkalu lukee ja kirjoittaa tietoja plist-tiedostoihin macOS: n asetusjärjestelmän kautta. Tämän etuna on, että työkalu saa (ja muuttaa) nykyisen arvon riippumatta siitä, onko se välimuistissa muistissa vai ei. Kun sovellus kuuntelee ilmoituksia siitä, että mieltymys on muuttunut (harva tekee), siitä ilmoitetaan.

suosituimmuustunnusten tiedostot tallennetaan yleensä /Library/Preferences/, ~/Library/Preferences tai niiden ByHost alikansioihin. Sandboxed sovellukset ovat mieluummin plist tiedostot niiden säiliössä.

siellä on kuitenkin monia muita tiedostoja, jotka ovat ominaisuusluettelotiedostoja, jotka eivät kuulu käyttäjän oletusjärjestelmään: launchd tiedostoja, määritysprofiileja ja AutoPkg: n reseptejä vain muutamia mainitakseni.

Mac-järjestelmänvalvojat käyttävät Applen varoituksesta huolimatta yleisesti defaults – työkalua yleisten plist-tiedostojen luomiseen, lukemiseen ja muokkaamiseen. Kuten edellä mainittiin, plutil, PlistBuddy tai suora manipulointi Obj-C: n, Pythonin tai Swiftin kautta ovat parempia vaihtoehtoja yleisille plist-tiedostoille.

Vastaa

Sähköpostiosoitettasi ei julkaista.