From Mac Guides

Jump to: navigation, search
The Terminal application.
The Terminal application.
The Terminal is a program included with all versions of Mac OS X. It is located in the Utilities folder within the Applications folder. When launched, it provides a line interface to control the underpinnings of the UNIX based operating system.

The default UNIX shell in Mac OS X Panther (10.3) or later is Bash



Here is a list of common commands:

list files and directories
change directory
create a new directory
copy files or directories
move (rename) files or directories
remove files or directories

See the Terminal Commands category for a list of useful Terminal programs.

A few basics

When the Terminal is first opened, a message similar to the following appears:

 Last login: Sat Dec 17 14:08:02 on ttyp2
 Welcome to Darwin!
 h460db012:~ markyoung$ 

Line 1 shows the last time the Terminal was used. 'ttyp2 can be thought of as the "connection" to the Terminal. For example, opening another terminal window would probably show "ttyp3". Alternatively, if you have enabled Remote Login, the remote address of the last user would be visible there. If the date or last connection is unfamiliar, it could indicate someone has unwanted access to your computer.

Line 2 is just a friendly greeting from Darwin.

Line 3 is the prompt, or command prompt. It shows the machine name (h460db012), a colon, the present working directory (~) a space, the current user (markyoung) and a dollar sign (or a hash (#) if the shell has super user privileges).

The current directory

The current directory, also known as the working directory, is where you are. In the Finder, this is equivalent to having a window open and viewing the files. To determine the current directory, type in:


Which produces an output similar to this:

 h460db012:~ markyoung$ pwd

pwd stands for "present working directory", and will likely output "/Users/(yourusername)". You may also notice that the current directory is displayed in a different form in the prompt. In this case, "~" is equivalent to "/Users/markyoung", the home folder. To change the current directory, use the cd command, as in

 h460db012:~ markyoung$ cd Documents/
 h460db012:~/Documents markyoung$ pwd

You are now in your Documents directory, just as if you had double clicked on the Documents folder in the Finder. Note how the prompt has changed to include the path "~/Documents". You can get a list of all the documents in this directory with the ls (list) command:

 h460db012:~/Documents markyoung$ ls
 Cocoa Programming
 Microsoft User Data
 Pirate Girl.jpeg
 jeep dimensions.rtf
 jeep stuff.rtf

The ls has many, many options, and is worth learning. For example, ls -F will postfix a slash (/) on every directory and an asterisk (*) on every executable file.

To open one of these documents, use the open command. The open command is equivalent to double clicking a file in the Finder.

 h460db012:~/Documents markyoung$ open starwarsWhosOnFirst.wmv 

Job control

While Activity Monitor is useful, it's not quite as useful as working with the shell.

To get a list of every running process on your computer, type this:

 ps -ax

"process status" dumps out a long list of everything that's running, along with the job number. Paired with the grep command, you can quickly determine if a process or application is running. Example,

 h460db012:~/Documents markyoung$ ps -ax | grep http
 164  ??  Ss     0:06.05 /usr/sbin/httpd
 1377  p1  R+     0:00.00 grep http

"/usr/sbin/httpd" confirms that Apache is running.

 h460db012:~/Documents markyoung$ ps -ax | grep mysql
  1379  p1  R+     0:00.00 grep mysql

In this case however, MySQL is not running. The only process that matches "mysql" is the grep process itself (the process doing the searching).

To forcefully end a process, kill it.

 h460db012:~/Documents markyoung$ ps -ax | grep Dock
  91  ??  S      0:15.03 /System/Library/CoreServices/Dock.app/Contents/MacOS/Dock -psn_0_393217
  1383  p1  R+     0:00.00 grep Dock
 h460db012:~/Documents markyoung$ kill 91

Here, we first find the process ID of the Dock, then use the kill command with the process ID as a parameter. Alternatively, you can skip the process list and grep, and use the "combined" form:

 h460db012:~/Documents markyoung$ killall Dock

Of course, the "kill" command can cause some issues if you kill the wrong process id.

For more on jobs and job control, see the jobs article.

Who Am I and Where Am I

To get the name of the current user, use the cleverly named "whoami" command (although this information is also available in the command prompt).

 h460db012:~/Documents markyoung$ whoami

To get your current location, use the "hostname" command.

 h460db012:~/Documents markyoung$ hostname

Some Other Useful Tips

Home Directory shortcuts

Your home directory (/Users/[yourusername]) can quickly be navigated to by typing "cd" with no arguments. Alternatively, the tilde(~) character is a shortcut for the home directory of the logged in user. The tilde can prefix another user's name to become the shortcut of that user's home directory. Therefore, these commands are equivalent (assuming markyoung is the current user):

cd ~
cd ~markyoung
cd /Users/markyoung


At any time, when typing a command, the Terminal (or, more accurately, bash) allows for filename completion, by hitting the tab key. As a common example, type this

 tail -f /var/log/sys

But, before hitting return, hit "tab". The shell will complete the filename, as the only thing in the /var/log directory that starts with "sys" is "system.log". If there's multiple matches, the shell will complete it up to the last common point. For example:

 tail -f /var/log/sec 

Tab in this case merely completes up to /var/log/secure.log and then beeps. This is because there are (probably) multiple files that begin with "secure.log". Pressing tab a second time will tell the shell to provide a list of matching files. For example:

 h460db012:~/Documents markyoung$ tail -f /var/log/secure.log
 secure.log       secure.log.1.gz  secure.log.3.gz  
 secure.log.0.gz  secure.log.2.gz  secure.log.4.gz  
 h460db012:~/Documents markyoung$ tail -f /var/log/secure.log

This handy feature allows you to choose the one you want. If you were to type ".1", then tab, then it would complete the filename as "secure.log.1.gz" (although in this example this is a gzip'd file, which isn't tailable)

Drag and drop

To save time typing out a long path, you can drag an icon from Finder to a Terminal window, and the whole path will be filled in for you. For example, if you wanted to set the current directory to ~/Library/Preferences/, you could type in (with a trailing space):


Then drag the Preferences folder onto the Terminal window, press return, and the command will work as normal. The icon in the title bar of a Finder window is also draggable in this manner.

See Also