Thte surest way to corrupt a youth is to instruct him to hold in higher esteem those who think alike than those who think differently
Nietzsche
Contents Introduction Finding it Using it Arguments 1: Behaviour Arguments 2: Targets Examples |
In this point-and-click world, the command line is becoming a bit of a lost art. Those coming from a Windows background, as I did, often have unpleasant DOS prompt memories and consider the command line a relic of the past.
The command line is a lot more easier to use, fast, and powerful (and therefore fun) than you may think. I'm writing this little tutorial because being able to use the command line is such a fundamental part of many of the things I talk about in other articles. It's worth getting to know...
A command prompt, or shell, is simply a place where you type commands for your computer to follow. It's actually a program in it's own right, albeit one with the simplest possible user interface.
It really depends on the operating system, and version, you are using. Hunting around your systems application menus should find it. It's also known variously as a DOS prompt, a terminal, an emulator, the command line, or a shell.
![]() The command line has a long and noble history in the UNIX/Linux world, going back to before I was born (and I'm starting to get old). This screenshot is from KDE's Konsole. Other popular terminals are xterm, and Eterm. |
![]() |
![]() Mac OS X, true to it's UNIX roots comes with some powerful shells. You can get more opensource programs to use with it from the excellent Fink project. |
![]() |
![]() Under Windows, a so-called DOS prompt is almost always available, but it's next to useless. You can download a free shell and collection of opensource programs to go with it from www.cygwin.com. |
![]() |
When using a shell the basic sequence of events is as follows:
You type commands, the shell runs the command (which is usually just a small program), then shows you any output. When the command finishes running you return back to the shell. For example:
$ ls diagram.png resume.tex subdir/ $ _
Let's have a look at what's going on here. We run the command ls. The shell runs the ls program, and displays the output. We can see that the output is a directory listing (ls is shorthand for 'list' — it's the directory listing command). When ls finishes we are returned to the prompt and the shell waits for us to give it it's next command.
The short answer: because it's faster to type. Once you have learned the basic set of commands, using the command line is very efficient indeed, but until then it all seems rather obtuse.
Often we want to change the way a command behaves. Say for example we want the ls command to show us the file sizes as well as the file names. We can do that using arguments (text typed after the command name). Arguments can do different things, but when the are prefixed by a hyphen (-) they tend to modify program behaviour:
$ ls diagram.png resume.tex subdir/ $ ls -s total 1332 1308 diagram.png 20 resume.tex 4 subdir/ $ ls -s -h total 1.4M 1.3M diagram.png 20K resume.tex 4.0K subdir/ $ ls -l -rw-r--r-- 1 leonov leonov 1334262 Dec 7 12:58 diagram.png -rw-r--r-- 1 leonov leonov 17224 Dec 7 12:58 resume.tex drwxrwxr-x 2 leonov leonov 4096 Dec 7 12:58 subdir/
The -s argument shows file sizes, the -h formats file sizes for 'humans', and the -l argument gives us the 'long' file listing. Arguments can be combined:
$ ls -l -rw-r--r-- 1 leonov leonov 1334262 Dec 7 12:58 diagram.png -rw-r--r-- 1 leonov leonov 17224 Dec 7 12:58 resume.tex drwxrwxr-x 2 leonov leonov 4096 Dec 7 12:58 subdir/ $ ls -lh 1.3M -rw-r--r-- 1 leonov leonov 1.3M Dec 7 12:58 diagram.png 20K -rw-r--r-- 1 leonov leonov 17K Dec 7 12:58 resume.tex 4.0K drwxrwxr-x 2 leonov leonov 4.0K Dec 7 12:58 subdir/
Tip: If you use the same arguments all the time, you can save some typing by setting up aliases. For example, on my computer if I type ls the command that the shell actually executes is ls -shF --color=auto...
The other class of arguments tell the command what to work on, and are not prefixed with a hyphen. For example, our ls command will list the contents of the current directory by default, but sometimes we want to list the contents of some other directory instead:
$ ls diagram.png resume.tex subdir/ $ ls /home leonov/ library/ websites/ $ ls /home/library distfiles/ games/ it_reference/ movies/ music/ wavs/
Tip: When you are typing in a filename you don't have to type the whole thing. Just type the first few letters then press the <Tab> key. Auto-completion will do the rest!
We have covered just the very basics of command line usage. It's probably just enough information to convince you that the command line is a bad idea! Never fear, it gets more and more useful the more you use it. I'll leave you with a couple of useful, real life examples.
$ wc -w *
6034 amy.tex
5296 arrival.tex
4442 bath.tex
6250 dog.tex
3160 headingwest.tex
6881 highland.tex
3938 hightailing.tex
6824 interior.tex
4870 jenny.tex
5940 linda.tex
7339 london.tex
5876 work.tex
66850 total
$ mogrify -format jpg -thumbnail 110x90 '*.jpg'
$ grep -lr @todo *
computing/command_line.html
computing/ssh.html
computing/dvorak.html
library/shakespeare.html
library/godman/index.html
websites/this.html
personal/index.html
$ grep -lr @todo * | sort -u | xargs kate
$ mplayer -nosound -loop 0 -fs sample.mpg
$ ssh -C mongo w
14:01:40 up 60 days, 7:41, 1 user, load average: 0.09, 0.03, 0.01
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
leonov pts/0 192.168.0.247 Mon14 0.00s 0.21s 0.06s w