Useful Mac OS X Terminal Commands
Mac OS X is a very powerful OS. One of it’s most amazing traits is how well it scales from being dead easy to use for novice users to allowing power users near unlimited capabilities. The former comes from the excellent UI design and GUI tools that Apple has built, the latter from Mac OS X’s FreeBSD Unix underpinnings. While most users will never have to touch the Mac OS X Terminal application to go about their day to day computing, those who like to push the limits of what they can do will most likely spend at least a bit of time at the command prompt. This article is for those aspiring command line gurus, like myself.
I’ve been using Mac OS X since the Public Beta was released in 2000. Over the years, as I’ve delved further into learning about the operating system’s Unix underpinnings, I’ve always kept a Stickies note handy where I would paste terminal commands that I thought might come in handy at some point in the future. Every one of these commands required countless Google searches and time scouring the results to find solutions to the problem I had at the time. It’s in the interest of saving others from spending too much time searching that I present my Stickies Mac OS X terminal command list. I hope these help all of you as much as they have helped me.
A warning for newbies:
If you’re not familiar with the Mac OS X Terminal, it’s an application that allows a user to directly execute Unix commands by typing them into text based command prompt. You can find the Terminal application in /Applications/Utilities on your hard disk. Please be aware that the terminal and Unix commands are very unforgiving. A simple typo or misplaced punctuation can mean the difference between your command working and you deleting or overwriting something important, especially when executing commands with administrator rights (via the sudo command). If you aren’t sure what you’re doing, it’s better to take the time to research the answer than to simply guess and possibly mess something up you won’t know how to fix. This article is not meant to be a tutorial on how to use the Terminal. If have never used the terminal, may I suggest you visit O’Reilly’s MacDevCenter which has some good tutorials to get you started.
The Commands
Disclaimer: Please note that I cannot be held responsible for anything bad you do to your computer while attempting to use any of these commands. Use them at your own risk!
Eject Stubborn CDs
disktool -e disk#I found myself one day with a CDROM stuck in my CDROM drive, but no way to eject it. It didn’t show up in the Finder or on the Desktop, and hitting the “Eject” button on the keyboard did nothing. I found and tried two or three other terminal and GUI based solutions from sites like Mac OS X Hints, but none of them worked except this little gem. I haven’t had to use it for years and it may not work for every stuck CD, but this one saved me from having to reboot my computer to get a bad CD out. Type disktool by itself to get help.
Unmount Stubborn Network Volumes
umount -f /Volumes/volumenameLike the stuck CD issue above, I have once or twice come across a network volume that I could not disconnect. Substitute the stuck network share’s name in place of “volumename” in this command. You can view the pdisk man page to get help by typing man umount at the prompt and hitting return.
Delete partition table on iPod
pdiskThis menu based terminal app saved a dead iPod. I once made the mistake of formatting my iPod as an external FireWire drive as some non-standard format (maybe NTFS or Unix File System). After doing that, I couldn’t re-initialize the iPod using the latest iPod updater. While I don’t remember exactly the steps I used to get the iPod working again (it had to do with deleting the partition table), this tool is what did the trick for me. You can view the pdisk man page to get help by typing man pdisk at the prompt and hitting return.
Restart Bonjour service
-
Stop Bonjour service:
sudo launchctl unload /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist-
Start Bonjour service:
sudo launchctl load /System/Library/LaunchDaemons/com.apple.mDNSResponder.plistA while back I had a problem where one of my Macs would periodically fail to broadcast it’s Bonjour name for things like print and file serving. Rebooting the computer would resolve the problem for a time, but it would always come back. Rather than having to reboot my computer all the time, I searched for and found this handy set of commands for stopping and starting the Bonjour service which would do the trick until the problem occurred again. Since this was a service, it was great not having to reboot. I eventually solved the problem, which if memory serves was caused by my router, but I felt it was handy to hold onto this in case I ever needed to stop or restart the Bonjour service again. These commands need to be run as administrator, which is why they are prefixed with the sudo command. You will be prompted to enter your admin password to execute them.
Restart Apple Remote Desktop (ARD) service
sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -restart -agent -menuNote: This is a very long command that should all be typed or copied/pasted as one line.
I had a problem with Apple Remote Desktop once where if I left a remote control session running for too long (say overnight), the remote display would no longer refresh automatically. In my quest to avoid rebooting my server, I found this handy command that restarts the ARD service, which listens for and manages remote control requests. This has to be run on the machine you want to control normally. Since I was having problems remote controlling said computer, I would log in remotely via SSH by typing ssh ip_address and execute the command while logged in remotely. Very handy indeed. Being able to remotely login via SSH is no doubt one of the most useful reasons to learn the command line. All terminal commands that are covered in this article can be executed remotely. You can view the SSH man page to get help by typing man ssh at the prompt and hitting return.
Reset Network Interface
-
Shut down network interface:
sudo ifconfig en0 down-
Start up network interface:
sudo ifconfig en0 up-
Note: Substitute en0 for appropriate network interface id (a.k.a. BSD device name). You can use System Profiler (in the /Applications/Utilities folder) to find the BSD device name for the network connection you want to reset.
I can’t remember why I needed to do this. Might have been while I was troubleshooting that Bonjour service issue, or maybe I was trying to change the connection’s MAC hardware address. Doesn’t really matter. The point is you can use this combination of commands to restart a network interface. These commands use the SUDO command to run using administrator rights and so you will be prompted for your admin password.
[Edit: Thanks to commenter "why o why" for pointing out, "it should be noted that if you remotely shutdown the ethernet interface you are using, it will be difficult to get it back up remotely
"]
Restart Apache Webserver
sudo apachectl gracefulWhile restarting Mac OS X’s built-in Apache web server is as easy as toggling the “Personal Web Sharing” service’s status in the Sharing preference pane, you can’t do this easily remotely unless you can remote control the server in question. Over a modem connection, this can be near impossible or at least very painful. This command comes in handy if you’ve modified the Apache configuration file via a remote SSH connection as the changes only take effect after the Apache service is restarted.
Restart MySQL Server
-
Stop MySQL Server
sudo /Library/StartupItems/MySQLCOM/MySQLCOM stop-
Start MySQL Server
sudo /Library/StartupItems/MySQLCOM/MySQLCOM startNot so long ago I installed the MySQL open source SQL database on my web server so I could run a phpBB based forum site. MySQL also happens to be the database that runs the Art Of Geek blog. These two commands are useful for stopping or restarting the MySQL service via SSH, or if like me you have ever broken your MySQL installation just enough for the MySQL preference pane to stop working.
Change a file’s type code to make an AAC file an iTunes/iPod audio book
/Developer/Tools/SetFile -t 'm4b ' filename.m4bNote: You must have the Mac OS X developer tools installed for this command to work!
This gem of a command will set the type code of a file to ‘m4b ‘ (there is a space after the ‘b’), which tells iTunes it’s an audio book. This is required if you have ever ripped an audio book from CD, and want iTunes to see it as an audio book. The file must be an AAC file, and you need to change the file extension to .m4b. The truth is, this command can come in handy any time you need to implicitly set a file’s ‘type’ or ‘creator’ codes. You can view the SetFile man page for help by typing man SetFile at the terminal prompt and hitting return.
That’s all the time (and commands) we have for today folks! I’ll post more in a future article!
12 comments September 22nd, 2006