Useful Mac OS X Terminal tools

Wednesday, 29 August 2012

by Silumesii Maboshe

If you find yourself in the Mac OS X Terminal a lot, here are some commands and tools you may find useful.

Here are commands I take for granted

Consider this part a command-line primer. Three things are useful to remember about the Terminal:

  1. The Mac OS X Terminal is UNIX and works similarly to other flavours of UNIX/Linux.
  2. In UNIX, everything is a file.
  3. Some commands won’t give feedback when they work.

In Mac OS X, you can get to the Terminal by going to Finder > Applications > Utilities and then double-clicking the Terminal application.

I prefer typing to clicking whenever possible so I have installed an application launcher called Quicksilver. It allows me to fire-up applications without using the mouse or trackpad. Very handy!

I’ll probably use the words “directory” and “folder” interchangeably. They mean the same thing. If you are used to a graphical user interface (GUI), the term “folder” will likely be familiar to you.

ls

ls is short-hand for “list”. ls lists the contents of the folder you are currently in.

$ ls
Desktop		Downloads	Library		Music		Public
Documents	Dropbox		Movies		Pictures

ls can give very detailed information about the files it displays. To do that, you can give it an option or argument. For example

$ ls -l

The - says options come after this. Each letter after the - is an option. In the above case, l means long. So ls will display a long list with detailed information about the contents of the current folder.

total 0
drwxr-xr-x  2 sausande  staff  68 27 Aug 12:11 Desktop
drwxr-xr-x  2 sausande  staff  68 27 Aug 12:11 Documents
drwxr-xr-x  2 sausande  staff  68 27 Aug 12:11 Downloads
drwxr-xr-x  2 sausande  staff  68 27 Aug 12:11 Dropbox
drwxr-xr-x  2 sausande  staff  68 27 Aug 12:11 Library
drwxr-xr-x  2 sausande  staff  68 27 Aug 12:11 Movies
drwxr-xr-x  2 sausande  staff  68 27 Aug 12:11 Music
drwxr-xr-x  2 sausande  staff  68 27 Aug 12:11 Pictures
drwxr-xr-x  2 sausande  staff  68 27 Aug 12:11 Public

Let’s try another set of options:

$ ls -al
total 0
drwxr-xr-x  11 sausande  staff  374 27 Aug 12:11 .
drwxr-xr-x   3 sausande  staff  102 27 Aug 12:11 ..
drwxr-xr-x   2 sausande  staff   68 27 Aug 12:11 Desktop
drwxr-xr-x   2 sausande  staff   68 27 Aug 12:11 Documents
drwxr-xr-x   2 sausande  staff   68 27 Aug 12:11 Downloads
drwxr-xr-x   2 sausande  staff   68 27 Aug 12:11 Dropbox
drwxr-xr-x   2 sausande  staff   68 27 Aug 12:11 Library
drwxr-xr-x   2 sausande  staff   68 27 Aug 12:11 Movies
drwxr-xr-x   2 sausande  staff   68 27 Aug 12:11 Music
drwxr-xr-x   2 sausande  staff   68 27 Aug 12:11 Pictures
drwxr-xr-x   2 sausande  staff   68 27 Aug 12:11 Public

Notice anything different?

It’s the same list but now there is a directory called “.” and another called “..”. Any file or folder in UNIX that starts with “.” is a hidden folder. The option a used with ls allows us to see hidden folders.

dots

Dots have special meaning in the command line. They are not punctuation.

. means the folder I am in right now while .. means the parent folder of the folder I am in right now.

~

~ is your home (or more accurately your home folder). It’s the place where all the files and folders under your username are kept.

If you’ve ever seen a t-shirt with the words “There’s now place like ~”, now you can laugh because you finally get the pun.

mkdir

mkdir is used to make folders (or “directories”).

$ mkdir Projects
$ mkdir Homework

If your folder name needs spaces, you can enclose it in "s, just like this:

$ mkdir "Project Proposals"
$ mkdir "Stuff I need to do like yesterday"

pwd

pwd stands for “print working directory”. It let’s you know where you are in the system directory hierarchy.

$ pwd
/Users/sausande

touch

touch will create an empty file with the name you give it. For example:

$ touch the_milky_way.txt

If the file exists, the timestamp on the file with be updated (which ends up being quite a useful thing to do).

Tab completion

Hitting the TAB key during a command will suggest possible ways to autocomplete the command. You may need to install bash_completion for fancier functions. Out of the box, though, tab completion is useful to drill down folder hierarchies.

cd

cd stands for “change directory”. If you need to move from one directory to another, use cd with the name of the folder you’d like to move to. We can also use the dots to move around folders.

Let’s say we had the following hierarchy of folders

$ mkdir -p stand/and/sing/of/zambia/proud/and

Did you see what we did there? We created folders within folders with a single command! Thanks to the p option supplied with mkdir.

Using cd we can move down the hierarchy one step at a time.

$ cd stand
$ ls
and
$ pwd
/Users/sausande/stand
$ cd and
$ ls
sing
$ pwd
/Users/sausande/stand/and

To move up the hierarchy we can use ...

$ cd ..	
$ ls
and
$ pwd
/Users/sausande/stand

You can cd to your home folder using either of the following commands:

$ cd
$ cd ~

Using TAB completion, you can drill down all the way to the lowest level in the folder structure.

$ cd stand[TAB]/and[TAB]/sing[TAB]/of[TAB]/zambia[TAB]/proud[TAB]/and

It takes some getting used to. Soon you’ll find yourself hitting TAB instinctively.

Here are the commands I find useful

exit

exit will exit your Terminal session. If you explicitly say so in your preferences, exit will also close your Terminal window after exiting.

open

open will open a file or a folder for you.

If you are in a folder you can use open . and the folder will open as a Finder window. If you have a file called index.html in your current folder, open index.html will open the page in your default browser.

bc

bc is a command-line calculator. It’s a bit trippy but really useful.

say

say speaks text.

I use it to let me know that a long-running task has completed.

say "FTP website upload completed."
say "Hello, shall I prepare you some chikanda?"

I enjoy that it does not wince at trying to pronounce words that are not English.

wget

wget fetches files over the Internet. Use it with --continue to resume a partial download. If wget is not natively installed on your system you can get it using MacPorts of Homebrew.

date

date displays the current system time. The best part of it is the number of ways it allows you to format a date.

$ date
Wed 29 Aug 2012 12:54:32 CAT
$ date "+Today is a %A"
Today is a Wednesday
date "+%B/%d/%Y@%H:%M:%S"
August/29/[email protected]:57:25

tail

tail displays the last 10 or so lines of a file. When used with the f option, it will stream the contents of a file. This means that you get a live update of additions to the file as they arrive. This is useful for looking at log files as they change.

time

time will measure how much time it took to execute a command.

$ time say "All my people in the session, let me see your hands up!"

real	0m6.248s
user	0m0.223s
sys	0m0.232s

grep

grep stands for GNU regular expression parser. It can be used to search for words inside a file. It’s such a powerful tool that some consider grep to be a religion.

So much more …

There are hundreds of other useful commands. At the end of the day, the command-line is your friend. Don’t be afraid to use the Terminal.

I’d be happy to hear what your favourite Terminal commands are!