Seeing What’s Going On Around You
You’re logged in, looking at the command prompt, and ready to delve into this Unix thing. Great! Let’s have a look.
Task 2.4: Who Are You?
While you’re logged in to the system, you can learn a few more Unix commands, including a couple that can answer a philosophical conundrum that has bothered men and women of thought for thousands of years: Who am I?
The easiest way to find out “who you are” is to enter the whoami command:
% whoami taylor %
Try it on your system. The command lists the account name associated with the current login.
Ninety-nine percent of the commands you type with Unix have a single specific spelling and will fail if you get creative. With whoami, however, adding spaces to transform the statement into proper English—that is, entering who am I—dramatically changes the result. On my system, I get the following results:
% who am i taylor pts/2 Oct 27 10:11 (:0.0) %
On a Mac system, it doesn’t show (:0.0) otherwise things work well.
This tells me quite a bit about my identity on the computer, including my account name and where and when I logged in. Try the command on your system to see what results you get.
In this example, my account name is taylor. The pts/2 is the current communication line I’m using to access the system, and you can see that I logged in at 10:11 using a regular communications socket. (The :0.0 is relevant under the X Window System, something we won’t cover for quite a while in this book.)
- One of the most dramatic influences Unix systems have had on the computing community is the propensity for users to work together on a network, hooked up by telephone lines and modems (the predominant method until the middle to late 1980s) or by high-speed network connections to the Internet (a more common type of connection today). Regardless of the connection, however, you can see that each computer needs a unique identifier to distinguish it from others on the network. In the early days of Unix, systems had unique hostnames, but as hundreds of systems have grown into millions, this has proved to be an unworkable solution.
The alternative was what’s called a domain-based naming scheme, where systems are assigned unique names within specific subsets of the overall network. Here’s an example:
The computer I use is within the .edu domain (read the hostname and domain—mentor.utech.edu—from right to left), meaning that the computer is located at an educational institution. Then, within the educational institution subset of the network, utech is a unique descriptor, and, therefore, if other UTech universities existed, they couldn’t use the same top-level domain name. Finally, mentor is the name of the computer itself.
- As with learning to read addresses on envelopes, learning to read domain names can unlock much information about a computer and its location. For example, lib.stanford.edu is the library computer at Stanford University, and ccgate.infoworld.com tells you that the computer is at InfoWorld, a commercial computer site, and that its hostname is ccgate. You’ll learn more about this later when you learn how to use electronic mail to communicate with people throughout the Internet.
Another way to find out who you are in Unix is to use the id command. The purpose of this command is to tell you what group or groups you’re in and the numeric identifier for your account name (known as your user ID number or user ID). Enter id and see what you get. I get the following result:
% id uid=100(taylor) gid=10(staff) %
- In this example, you can see that my account name is taylor and that the numeric equivalent, the user ID, is 100. (Here it’s abbreviated as uid—pronounce it “you-eye-dee” to sound like a Unix expert). Just as the account name is unique on a system, so also is the user ID. Fortunately, you rarely, if ever, need to know these numbers since they’re used by the OS internally, so focus on the account name and group name.
Next, you can see that my group ID (or gid) is 10 and that group number 10 is known as the staff group. It’s the only group to which I belong.
On another system, I am a member of two different groups:
% id uid=103(taylor) gid=10(staff) groups=10(staff),44(ftp) %
Although I have the same account name on this system (taylor), you can see that my user ID and group ID are both different from those in the earlier example. Note also that I’m a member of two groups: the staff group, with a group ID of 10, and the ftp group, with a group ID of 44.
You’ve now learned a couple different ways to have Unix give you some information about your account. Later, you’ll learn how to set protection modes on your files so that people in your group can read your files but so those not in your group are barred from access.
Task 2.5: Finding Out What Other Users Are Logged In to the System
The next philosophical puzzle that you can solve with Unix is “Who else is there?” The answer, however, is rather restricted, limited to only those people currently logged in to the same computer at the same time. Three commands are available to get you this information, and the one you choose depends on how much you’d like to learn about the other users: users, who, and w.
The simplest of the commands is the users command, which lists the account names of all people using the system:
% users david mark taylor %
In this example, david and mark are also logged in to the system with me. Try this on your computer and see what other users—if any—are logged in to your computer system.
A command that you’ve encountered earlier in this hour can be used to find out who is logged on to the system, what line they’re on, and how long they’ve been logged in. That command is who:
% who taylor vt/7 Oct 27 14:10 (:0) david pts/1 Dec 27 15:54 (:0.0) mark pts/2 Oct 27 11:51 (:0.0) %
Here, you can see that three people are logged in: taylor (me), david, and mark. Furthermore, you can now see that david is logged in by connection pts/1 and has been connected since December 27 at 3:54 p.m. You can see that mark has been connected since just before noon on October 27 on line pts/2. Note that I have been logged in since 14:10, which is 24-hour time for 2:10 p.m. Unix doesn’t always indicate a.m. or p.m.
The user and who commands can tell you who is using the system at any particular moment, but how do you find out what they’re doing?
Task 2.6: What Is Everyone Doing on the Computer?
To find out what everyone else is doing, there’s a third command, w, that serves as a combination of “Who are they?” and “What are they doing?”
Consider the following output from the w command:
% w 2:12pm up 7 days, 5:28, 3 users, load average: 0.33, 0.33, 0.02 User tty login@ idle JCPU PCPU what taylor vt/7 27Oct14 2:35 2:07 python2.6 /usr/lib/system-config david pts/1 3:54pm 2:04 15 33 bash mark pts/2 27Oct14 43 -csh %
This is a much more complex command than users or who, and it offers more information. Notice that the output is broken into different areas. The first line summarizes the status of the system and, rather cryptically, the number of programs that the computer is running at one time. Finally, for each user, the output indicates the username, the tty, when the user logged in to the system, how long it’s been since the user has done anything (in minutes and seconds), the combined CPU time of all jobs the user has run, and the amount of CPU time taken by the current job. The last field tells you what you wanted to know in the first place: What are the users doing?
In this example, the current time is 2:12 p.m., and the system has been up for 7 days, 5 hours, and 28 minutes. Currently three users are logged in, and the system is very quiet, with an average of 0.33 jobs submitted (or programs started) in the last minute; 0.33 jobs, on average, in the last 5 minutes; and 0.02 jobs in the last 15 minutes.
taylor is the only user actively using the computer (that is, who has no idle time) and is using the python command. User david is sitting in the bash shell, which has gone for quite awhile without any input from the user (2 hours and 11 minutes of idle time). The program already has used 15 seconds of CPU time and, overall, david has used 33 seconds of CPU time. User mark has a C shell running, as indicated by -csh. (The leading dash indicates that this is the program that the computer launched automatically when mark logged in. This is akin to how the system automatically launches the Finder on a Macintosh.) User mark hasn’t actually done anything yet: Notice that there is no accumulated computer time for that account.
- Now it’s your turn. Try the w command on your system and see what kind of output you get. Try to interpret all the information based on the explanation here. One thing is certain: Your account should have the w command listed as what you’re doing.
On a multiuser Unix system, the w command gives you a quick and easy way to see what’s going on.
Task 2.7: Checking the Current Date and Time
You’ve learned how to orient yourself on a Unix system, and you are now able to figure out who you are, who else is on the system, and what everyone is doing. What about the current time and date?
Logic suggests that time shows the current time and date the current date; but this is Unix, and logic doesn’t always apply. In fact, consider what happens when I enter time on my system:
% time real 0m0.000s user 0m0.000s sys 0m0.000s %
The output is cryptic to the extreme and definitely not what you’re interested in finding out. The program is showing how much user time, system time, and CPU time has been used by the command interpreter itself, broken down by input/output operations and more. (The time command is more useful than it looks, particularly if you’re a programmer.)
On other Unixes, you might find time to be a missing command, a built-in shell function, or something completely different. In all cases, it won’t tell you the current time.
Well, time didn’t work, so what about date?
% date Sat Jun 617:05:32 MST 2015 %
That’s more like it!
Try the date command on your computer and see whether the output agrees with your watch.
How do you think date keeps track of the time and date when you’ve turned off the computer? Does the computer know the correct time if you unplug it for a few hours? (I hope so. Almost all computers today have little batteries inside for just this situation.)