Yet another Mac OS X command line introduction (Part 2)
By Mark Dalrymple, August 5, 2002
Your shell remembers the last several dozen commands that you’ve run. You can use this stored history to reduce your typing burden if you’re running a command similar to what you’ve run before.
history command will show the stored history.
For example, here are the last dozen lines run in the session I’m
% history | tail -12 128 12:16 du -sk Pictures/ 129 12:17 pwd 130 12:17 du -sk . 131 12:18 du -sk Library Pictures 132 12:23 du -sk * 133 12:31 man -k filter 134 12:33 du -sk * | sort -n 135 12:38 man sort 136 12:39 du -sk * | sort -rn 137 12:40 ls -1 | wc -l 138 12:42 du -sk * | sort -n | tail -2 139 12:45 history | tail -12
(The columns of output are the command number, the time I ran it and the command itself.)
You can use the up and down arrows to cycle through your history.
If I hit the up arrow twice, I’d have my command #138. Once you’ve
found the command you want, you can use the left and right arrow keys to
cursor around in the command to edit it. Say I wanted command #138, but
I wanted that sorted in reverse, so that the command will show me the two
files. I’d do:
left-arrow a bunch of times until the cursor was sitting on the
type an “r"
press Return (you don’t have to be at the end of the command line for it to
take effect when you’re going through the history like this)
Note that the home/end/page-up/page-down keys won’t work for you here, since the scrolling terminal view will consume those keys before the command line sees them.
You can also search through your history rather than hitting up-arrow
over and over and over again looking for a command you know you’ve used
recently. Typing a
Control-R (just like you’d
Command-R, but use the
key instead of the Command/Apple/propeller key) When you do this, your
command line mutates, from
bck: stands for backward
You then type in some of your command, like you could type in
sk, and the shell will display the most recent
du -sk .... If that’s not what you
Control-R again to see the second most
recent command, and so on.
You can cut and paste the text for commands (and command output as
well) into other programs, like
Project Builder for later retrieval if you wish.
Newer versions of
BBedit have a command-line shell
worksheet (similar to the MPW shell, for the old-timers out
there) where you can keep commands hanging around for later.
So, what’s some other fun stuff you can do?
You can use the command line for other stuff. For instance, you
can get the
uptime of your machine. That is, how
long since your machine was last restarted. One of the nifty-keen
things about Unix (and therefore Mac OS X) is that the system just
doesn’t crash under normal circumstances. It’ll stay up and running
until you explicitly tell it to shut down or reboot, leading to very
long uptimes. So, when your Windows-running office mate
announces another virus-related crash, you can say, “Gee, I haven’t had
to reboot or quit Photoshop in four months.” My friend Doug’s desktop
Linux machine at work had an uptime longer than his employment with
a company. And this was at his first anniversary working there!
So, running uptime looks like:
% uptime 1:03PM up 4 days, 16:12, 5 users, load averages: 0.39, 0.23, 0.04
This is the current time, the number of user sessions logged in, and the load averages of the machine (an indication of how hard the machine is working). The three numbers are averages of machine load over the last 5, 30, and 60 seconds. High numbers mean the machine is doing more work. Very high load numbers can indicate a performance problem or an overloaded system.
The terminal window can run interactive programs as well. Try running
top command like this:
% top -u Processes: 46 total, 3 running, 43 sleeping... 148 threads 13:08:32 Load Avg: 1.20, 0.53, 0.34 CPU usage: 65.9% user, 30.1% sys, 4.1% idle SharedLibs: num = 144, resident = 14.5M code, 676K data, 3.72M LinkEdit MemRegions: num = 4089, resident = 105M + 3.11M private, 31.3M shared PhysMem: 46.0M wired, 146M active, 20.6M inactive, 213M used, 299M free VM: 2.13G + 66.7M 237494(0) pageins, 37450(0) pageouts PID COMMAND %CPU TIME #TH #PRTS #MREGS RPRVT RSHRD RSIZE VSIZE 6164 Terminal 68.3% 4:05.71 8 133 618 4.41M 6.57M 9.34M 63.7M 6713 top 10.5% 0:01.16 1 15 14 228K 244K 468K 1.37M 70 Window Man 7.3% 3:48:19 3 171 493 2.18M 12.8M 14.7M 39.1M 0 kernel_tas 5.6% 44:10.03 26 0 - - - 34.4M 399M 6548 TruBlueEnv 2.4% 6:02.60 17 171 198 18.2M 7.64M 25.1M 1.05G 6186 Mozilla 1.6% 9:48.85 9 129 778 65.0M 3.91M 64.5M 146M 280 Dock 0.0% 9:34.29 3 103 157 1.57M 4.55M 3.22M 54.7M 280 Dock 0.0% 9:34.29 3 103 157 1.57M 4.55M 3.22M 54.7M 279 Finder 0.0% 1:41.64 3 134 518 5.97M 10.5M 13.3M 83.9M 68 ATSServer 0.0% 0:43.36 1 34 98 440K 1.40M 1.45M 15.3M 72 update 0.0% 0:37.78 1 8 13 12K 204K 72K 1.25M 272 slpd 0.0% 0:36.36 8 29 28 84K 296K 264K 4.99M 210 AppleFileS 0.0% 0:24.68 12 95 49 148K 332K 416K 8.76M 270 loginwindo 0.0% 0:18.83 7 150 146 1.74M 2.48M 2.90M 43.0M 6576 emacs 0.0% 0:16.69 1 13 21 1.79M 2.96M 3.38M 10.3M
That’s a lot of stuff. And if you let it keep running, you’ll see
that it updates itself. This is a peek into the guts of your system
to see what it is doing and how healthy it is. The “man page” for
top (I’ll speak about that later) tells you what most everything
means. The main piece of interest is the lower two-thirds of the
output which shows the programs currently running sorted by how much
processor time (CPU) they are consuming (that’s what the
-u flag does). It’s actually a useful diagnosis
tool – if your machine is sluggish, you can run
to see who the CPU pig is.
top, press q.