You may never have to visit OS X's command line, but if you're curious to learn more, here's what you need to know and some great tricks to explore.
OS X's command line and I have never been what I'd call "friendly"; rather, we have a mutual respect and understanding about not messing with each other. (Well, as much of a mutual respect as one can have between a human being and a code window.)
While the average person should never have any reason to visit Terminal, Apple's command line interface app actually does give you access to quite a few neat tricks and shortcuts... if you're willing to take a peek.
What is Terminal?
Apple's Terminal app is a direct interface to OS X's bash shell — part of its UNIX underpinnings. When you open it, Terminal presents you with a white text screen, logged in with your OS X user account by default.
Here's the important part: With a system administrator account and password, you have direct access to tweaking almost everything about your computer's software code; that means that while this little window provides great power, it comes with great responsibility. In short, be careful before using Terminal to execute commands, and make sure you understand what you're typing.
You can also use Terminal to securely connect to other machines, web servers, and even create your own scripts, but those are how-tos for another day. For now, we're going to focus on using Terminal to explore your own computer.
Basic Terminal commands you should know
Before we get started with the fun stuff, let's learn some basic Terminal terminology and commands. These form the framework for more complex interactions (aka, the fun stuff).
How to execute a Terminal command
You can type something in the Terminal window until you're blue in the face, but it won't execute until you press the Return key on your keyboard. At that point, it will either return an error if you've typed something incorrectly, or the command will execute.
Unless you're executing a command that requires the display of text in Terminal, you won't have any indicator that what you've done has been successful; you'll just get a new line with your user name on it once the command is finished processing.
When writing commands and paths in Terminal, almost everything is case sensitive: This means that you need to remember to properly capitalize "Dock" when referring to the Dock, or OS X won't understand your command.
What's a path?
You can use Terminal to get direct access to your files without using the Finder. To do so, you build something called a path. Paths look similar in some ways to website sub-directories, and follow the structure of your folders.
Paths take two forms: absolute paths and relative paths. An absolute path starts at the root level of your hard drive, and is displayed as "/". So if you wanted to make a path to your Applications folder, you would write "/Applications/".
Relative paths are defined based on where you've already navigated to, and represented by "./". For instance, if you go to the "/Applications/" folder in Terminal, that's your current working directory (cwd). You can then get to your Utilities folder by typing "./Utilities/" rather than "/Applications/Utilities".
When you first launch Terminal, you're starting in the current working directory of /Users/myusername/ (also known as your User folder).
How to display and move between files in Terminal
To actually put all this path knowledge to use, you'll need the Terminal commands for displaying and changing files.
ls: The "ls" command, by itself, displays the contents of the cwd. So if I were just to type "ls" in Terminal, it would display the contents of my user directory:
You can optionally add an absolute or relative or path if you want to view a different directories. So, for example, if I wanted to view the Utilities folder inside Applications, I could type "ls /Applications/Utilities/". This won't change your current working directory, but it'll let you view other directories on your hard drive.
You can add options to view more information about that directory. The options for "ls" include:
- -l, which lets you view the permissions of each file in the directory
- -R, which will not only show each folder in the directory, but all their files, as well
- -a, which will show any hidden files in the current directory
cd: Where the "ls" command lets you view a directory, the "cd" command will actually move to that directory (change your cwd). For instance, if after viewing the Utilities folder, you want to move to it, you'd type "cd /Applications/Utilities/".
pwd: Write this command by itself to help you remember the path of your current directory. When typed into terminal, it will print the full path of your cwd.
man: This command, followed by another Unix command, lets you read the Unix manual about the second command. This is super useful if you want to try a cool Terminal trick you found online, but aren't sure what those commands actually do.
For instance, typing "man ls" will get you information on the "ls" command, which lists directory contents.
How to modify files, folders, and preferences in Terminal
defaults: This command is often used in Terminal tips and tricks to tweak applications and system settings via their preference files. You can use it to do things like disable transparency in the menu bar, always show your scroll bars, change trackpad behavior, and much much more. You'll usually see this paired with either "write" and a string, as with this:
The code above lets you save all your screenshots as JPGs instead of the system default PNG.
killall: If you execute a Terminal command that affects any system process or app, you're going to need to reboot the process to make it take effect. "killall" followed by the process will do so. (This is also another way to force quit misbehaving apps or processes if your Force Quit menu isn't behaving.) Remember, this command and its target are case sensitive.
ln: OS X has long offered aliases, which let you create links to files, folders, and applications elsewhere in the system without having to duplicate them. Unfortunately, certain apps don't play well with aliases. With the link command "ln -s", you can create a low-level, UNIX-based symbolic link which most system processes will recognize. Likely, you'll never have to make a symbolic link, but on the off-chance you want to perform a Terminal trick that requires them, this is how you do it.
The first path listed is your original file's path; the second path is where you'd like your symbolic link.
chflags: This commands lets you view and change the flags on a file or folder. For most people, the only flags you're going to care about are "hidden" and "nohidden", which hide and unhide documents, respectively.
sudo: If you spend any time online, you've probably heard of "sudo" before. This is Unix's override command, and lets you execute any command as an administrator — provided, of course, that you have the requisite password and permissions. It probably goes without saying, but as a Terminal beginner, it's generally a good idea not to mess with commands like "sudo" unless you are 100 percent sure what you're doing.
How to use Terminal for fun and whimsy
say: Feeling lonely? You can make your computer say anything you like with the "say" command, and you can even record it in audio format to your desktop, if you so choose.
telnet towel.blinkenlights.nl: This isn't technically something local to your Mac, but it's my all-time favorite Terminal trick. Some kind soul on the internet made an all-ASCII version of Star Wars: A New Hope; run the following code, and you'll be treated to a full showing. If it doesn't make you smile just a little bit, you might be dead inside.
Next week: Terminal tricks
Next week on Coding Corner I'm going to compile some of my favorite OS X Terminal tricks for improving your Mac, including adding spaces to the dock, hiding files and folders, moving the Dock, and more. Do you have a favorite Terminal trick for OS X? Let me know in the comments and it might make next week's roundup.