Publisert Legg igjen en kommentar

standard – Plist Killer

forrige uke, andre MacAdmin Kyle Crawford har oppdaget at på macOS High Sierra defaults vil slette en eiendomsliste fil med ugyldig plist/XML syntaks, selv Når du bare prøver å lese data. Erik Holtham har en mer detaljert OpenRadar bug.

Patrik Wardle har funnet den relevante koden, som sletter filen når den ikke validerer.

Dette er dårlig. Takk til alle involverte for å finne, dokumentere og dele dette.

Dette er ny oppførsel I High Sierra. Jeg er ennå ikke sikker på hvilken versjon Av High Sierra denne nye oppførselen ble introdusert. Oppførselen er fornuftig i sammenheng med et program som forsøker å lese en innstillingsfil, men verktøyet defaults sletter vilkårlige filer er selvsagt farlig.

Oppdatering: denne oppførselen er løst i 10.13.4. Det er imidlertid fortsatt god praksis å unngå defaults for noe annet enn faktiske preferansefiler.

hva skal jeg gjøre?

som vanlig, ikke få panikk. Dette vil bare påvirke Mac-maskiner som kjører High Sierra og korrupte eller ødelagte filer. Men hvis du har et skript som ved et uhell peker kommandoen defaults på en annen fil, vil den slette det. Så du må bruke den med forsiktighet.

det er sannsynligvis lurt å verifisere en fil før du prøver å endre den med kommandoen defaults i et skript med kommandoen plutil :

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

Alternativer til standardinnstillinger

Alternativt kan og bør du bruke plutil eller PlistBuddy til å lese og endre egenskapslistefiler.

Lær mer om plutil, PlistBuddy og andre verktøy for å lese og skrive eiendomslister i boken min: «Eiendomslister, Preferanser og Profiler For Apple-Administratorer»

plutil er dessverre ikke veldig nyttig å lese en enkelt verdi fra en eiendomslistefil. Verbet extract vil vise noen verdi som sin egen plist. Kommandoen plutil er nyttig for å redigere eksisterende plistfiler. (Les detaljer om kommandoen plutil.)

PlistBuddy, men er svært nyttig for både å lese en skriveverdier til en egenskapsliste fil:

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

PlistBuddy har den ekstra fordelen av å tillate å legge til eller redigere verdier nestet dypt i dict eller array strukturer.

du kan få mer informasjon om PlistBuddy i sin man side eller min bok.

den interaktive modusen PlistBuddy er også veldig nyttig.

så kommandoen standard er død?

Nei.

Apple har advart oss om ikke å bruke defaults for generisk eiendomsliste filredigering og parsing for en stund i kommandoens mannside:

ADVARSEL: defaults-kommandoen vil bli endret i en kommende større utgivelse for å bare fungere på preferansedomener. Generelle plist manipulasjon verktøy vil bli kastet inn i et annet kommandolinjeprogram.

som denne advarselen sier, leser og skriver verktøyet defaults data til plist-filer gjennom macOS ‘ s preferansesystem. Dette har fordelen at verktøyet får (og endrer) gjeldende verdi om den er bufret i minnet eller ikke. Når et program lytter etter varsler om at en preferanse har endret seg (ikke mange gjør), vil den bli varslet.

Filer for preferansedomener lagres vanligvis i /Library/Preferences/, ~/Library/Preferences eller undermappene ByHost. Sandboxed programmer vil ha sine preferanser plist filer i sin container.

det er imidlertid mange andre filer som er egenskapsliste filer som ikke er en del av brukerens standardsystem: launchd filer, konfigurasjonsprofiler og AutoPkg ‘ oppskrifter for å nevne noen få.

Mac-Administratorer bruker vanligvis verktøyet defaults, til Tross For Apples advarsel, til å opprette, lese og redigere generiske plistfiler. Som nevnt ovenfor, plutil, PlistBuddy eller direkte manipulering Gjennom Obj-C, Python eller Swift, er bedre valg for generiske plist-filer.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert.