Industry guru Dave Taylor answers free tech support questions about a wide variety of business and technical topics, including blogging, Google AdSense, MySpace, Sony PSP, Apple iPod, Mp3 players, management, Linux, SEO, Mac OS X, Facebook, Twitter, LinkedIn and Microsoft Windows.

Can I check my "plist" files in Mac OS X for problems?

I keep hearing that if any of my programs start to act oddly within Mac OS X that one culprit can be the preferences file for that particular program. That's all well and good, but what if the corrupted preferences file is messing up things I can't see? Surely there's some way to check or verify the preference files to ensure all is well?

Dave's Answer:

A fascinating question, because I too have been wondering about the mysterious new XML-format "plist" files in Mac OS X and how to ascertain if any of them are messed up without having the associated application start spitting up bits.

It turns out that there's a great little command-line application accessible within Terminal (Applications -> Utilities -> Terminal) that performs just what you seek, a plist verification program called plutil.

At it's most basic you can just hand it a suspect preferences file and it'll scan it to see if all is well with the overall XML format. The program doesn't know how a given application interprets its preferences, so if a 'true' should be 'false' that won't be flagged, of course.

$ cd ~/Library/Preferences
$ plutil com.microsoft.Word.plist
com.microsoft.Word.plist: OK
$

You can replace the individual plist name with a set of all plist files in the Preferences directory with "*.plist" instead, as in: plutil *.plist. If you try this, however, you'll find that it has a status output line for each file checked which means that you lose the problems in the stream of successes.

To avoid this problem, plutil has another flag, '-s', that specifies you should only be shown errors. Now we're getting somewhere! Here's what happens on my computer when I run this:

$ plutil -s *.plist
IM_Installer.plist:
stream had too few bytes
com.Intego.NetUpdateInstaller.plist:
stream had too few bytes
com.apple.NetInfoManager.plist:
stream had too few bytes
com.apple.mix.plist:
Conversion of data failed. The file is not UTF-8, or in the 
encoding specified in XML header if XML.
com.realmacsoftware.buttonbuilder.plist:
XML parser error:
        Unexpected character T at line 1
Old-style plist parser error:
        Unexpected ';' or '=' after key at line 2

Not too good. Well, actually there are 244 plist files in this directory (use ls *plist | wc -l to figure that out for yourself) so hiccups with four or five probably isn't too bad.

The standard way to fix a corrupted preferences file is to just delete it and then reset any custom settings in that specific application next time it's launched. So I'll do that, but not by typing in the filenames. How terribly... archaic! Instead, I'll use the helpful Mac OS X shell backquote feature to run the test against all the preferences files again, then extract just the filenames:

$ rm -i `plutil -s *.plist | grep 'plist:' | sed 's/://g'`
remove IM_Installer.plist? y
remove com.Intego.NetUpdateInstaller.plist? y
remove com.apple.NetInfoManager.plist? y
remove com.apple.mix.plist? y
remove com.realmacsoftware.buttonbuilder.plist? y

Notice that the inclusion of the '-i' flag to rm causes the program to prompt me before each file is deleted. A nice safety trick!

If you're thinking we're done, you're not quite correct. There's a second directory full of plist files, the system Library at /Library:

$ cd /Library/Preferences
$ sudo plutil -s *.plist
Password:
com.Logitech.ControlCenter.plist:
stream had too few bytes
$ 

This time you'll want to use the sudo command to make sure that the plutil command can read even those preferences files that are only readable by the administrator. For completeness sake, natch!

If there are any preference files in the results that you want to trash, you'll probably need to use sudo rm rather than just rm.

Phew. Long answer for what seems like a simple question. Hope this is helpful!



Help others find this article at Del.icio.us, Digg, Netscape, Reddit, and Simpy.

Subscribe!

Never miss another useful Q&A article again! Subscribe to AskDaveTaylor with Google Reader.

Comments

Dave,

Wow! Great info. Can't wait to try it at work next week. Thanks!

Posted by: Bret at January 2, 2005 7:13 AM

WRT the plutil program. It works on a single file but when I try 'plutil -s *.plist' I get the error message 'Unrecognized option'

Any thoughts?

Posted by: Bob Chaput at September 28, 2005 11:30 PM

That's a strange error to see, Bob. When you type in

man plutil

does it show that your version has a "-s" flag at all?

Posted by: Dave Taylor at September 29, 2005 5:55 AM

Dave,
I have the same problem as Bob. I get an error using "*.plist." Oh my Man page has -s listed. I'm on Tiger 10.4.2

Posted by: Peter Pan at October 3, 2005 11:30 PM

Dave,

The command works in the main Library/Preferences folder, but not in the users Library/Preferences. I tried both. The user folder doesn't like the *.plist

Posted by: Peter pan at October 3, 2005 11:54 PM

SOLUTION - Some plists have dumb names that trip up plutil, e.g. files starting with a dash, which it things are arguments (e.g. -BringToFront.plist), and files with spaces in 'em. I renamed 'em, ran piutil, and renamed 'em back.


There are plists in other places, in the filesystem too.

Even this probably doesn't catch all of 'em:
plutil -s ~/Library/Preferences/*.plist ~/Library/Preferences/*/*.plist /Library/Preferences/*/*.plist

My plists had no errors. :)

PS. Check out the link to thank me.

Posted by: Matthew, SF, CA at March 17, 2006 11:36 AM

Found you by Googling "plist"...good information. Will check back.

Posted by: carol Scott at August 14, 2006 9:57 AM

OK ... I haven't worked in the terminal extensively before and while this is all intriuging ... but this all seems rather daunting.

Seems like it would be pretty easy to mess things up ... and once fiddled with pretty hard to recover.

To prove my cluelessness, here's a real 'newbie' question ... in your example above how are you actually rendering these vertical divisions between the commands?

ie:rm -i `plutil -s *.plist | grep 'plist:' | sed 's/://g'

Perhaps I'm being dense but I'm looking at my Macintosh keyboard and I don't see any keystroke that might render that character... or is that a shorthand method to signify that the commands are entered on seperate lines?

I seem to remember seeing some application for working within the terminal wherein you might copy and paste correctly compiled scripts and even drag and drop selected text in and out of the terminal window ... with an included 'undo' feature built-in ... does anyone happen to know the name of that app?

Posted by: DJ at December 22, 2006 10:28 PM

DJ,

The backquote key is the same as the tilde (~) key, just minus the operation.

Posted by: Zachary at January 1, 2007 7:07 PM

I found a very long plist on my hard drive when I was trying to search why my internet (and computer) is suddenly sooo slow. I wish there were instructions for users like me who know nothing other than using the software, i.e., Excel, Word, etc., with just a basic knowledge of the rest of the computer. I'm curious about the plist also, but too uneducated to even follow along your instructions. I wish there were alternate additional instructions for me (and people like me) when I don't know what I'm doing! I've learned the hard way if I can't understand it, then don't get into the more advanced levels, then I know just enough & risk how make things worse.
HELP! Please guys remember we need help too!

Posted by: Jene at December 24, 2007 4:37 PM

I have a lot to say, but ...
Starbucks coffee cup I have a lot to say, and questions of my own for that matter, but most of all I'd like to say thank you for all your efforts on this Web site by buying you a chai!

I do have a comment, now that you mention it!









Remember personal info?


Please note that I will never send you any unsolicited commercial email. Ever.

While I'm at it, please note that by submitting a question or comment you're agreeing to my terms of service, which are: you relinquish any subsequent rights of ownership to your material by submitting it on this site.









Search
Find just the answers you seek from among our 1700+ free tech support articles by using our Lijit search engine.


Help!





Subscribe to
Ask Dave Taylor!

Add to Google Reader
Add to My Yahoo!
Subscribe in NewsGator Online

RDF   XML

Free Updates!
Sign up and get free weekly updates and special offers on books, seminars, workshops and more.


Recent Entries
Join the List!
Join my author info mailing list, where you'll learn about my upcoming books, speaking gigs, and more!


Book Links
© 2002 - 2008 by Dave Taylor. All Rights Reserved.

Note: This web site is for the purpose of disseminating information for educational purposes, free of charge, for the benefit of all visitors. We take great care to provide quality information. However, we do not guarantee, and accept no legal liability whatsoever arising from or connected to, the accuracy, reliability, currency or completeness of any material contained on this web site or on any linked site.

[whiteboard marker tray]