You Are Here

REMEMBER: If you are used to Microsoft products, including DOS, then
	  note that Unix is case sensitive. Password is not the same as
	  passWord or PASSWORD. If you cannot find a file (and you're
	  sure it's there), look at what you're typing. You may have
	  accidently hit the caps lock key, or have made the first
	  character a capital letter.

Before viewing files or directories in Unix, it is best to know exactly 
where you are. The command to find this information is pwd. PWD
is short for present working directory. If you type in pwd 
at the command prompt, you will see something like this:

  1985UI ~$                      The command prompt of computer 1985UI.
  1985UI ~$pwd                   You typed in 'pwd'
  /usr/trip/log/                 You are in the directory log,
                                 which is in the located in the
                                 directory trip, which is 
                                 in the directory usr. Remember,
                                 anything above the last directory is
                                 root.

The pwd command is very useful, especially if you are used to MS-DOS
and its inclusion of the complete path in the command prompt.

What's In Here?
Now that you know where you are, you can use the ls command to find out
what files and subdirectories are located in here with you. If you use ls by
itself, UNIX assumes you want to list everything in your present working 
directory. A quick example for you:

  1985UI ~$                      The command prompt
  1985UI ~$ls                    You typed in 'ls'
  access_log	error_log        These are the files and subdirectories 
  referer_log   trip_log         that are located in your current location.
  cgi_bin       perl

As you can see, ls is akin to the DOS command dir. Just as in DOS,
if you wanted to see what files were located in /usr/trip/, you could type
the following at the command prompt:

  In DOS:	dir c:\usr\trip
  In UNIX:	ls /usr/trip/

You would get a simple list of the files and subdirectories. If you were located
deep inside a nest of directories and wanted to see what files were located in
the root directory, you can just type ls / to view what's there.

I Want More Information
Just as in DOS, you can get a more detailed listing by adding 'arguments'. Let
us say that we would like to know more about what is located in the directory
/usr/trip/. All you have to do is add '-l' (dash and L) to the ls command.
For example:

  1985UI ~$ls -l /usr/trip/      You typed in 'ls -l /usr/trip/'
  Total 10                       There are 10 items in this directory (3 hidden)
  -rwxrwxrwx root 15233 Jan 08 15:33 access_log
  drwxrwxr-x root     8 Jan 01 2000  cgi_bin
  -rwxrwxrwx root  1237 Jan 08 15:33 error_log
  drwxrwxr-x root     8 Jan 01 2000  perl   
  -rwxrwxrwx root   133 Jan 08 15:33 referer_log
  lrwxrwxr-x root     7 Jan 08 2000  root ->
  -rwxrwxrwx root  5211 Jan 08 15:33 trip_log

That's a lot of information! We will dissect the first line for access_log.
The first set of cryptic letters, -rwxrwxrwx, lists the file attributes, or
the read, write and execution status of the file or directory. We will break 
this line of alphabet soup down into the following format: ABBBCCCDDD.
  A	The first character shows what kind of file this is. If this character is a
   	'-', then it is a normal file. If the first character is a 'd', then 
	this is a directory. Note that cgi-bin is a directory. If the first
	character is an 'l', then the item is a link, or shortcut, to another 
	directory. Note that root is a link.

  BBB   The next three characters show the read, write and execute permissions for
	the files owner. If the owner had permission to read and execute 
	the file, but did not have permission to write to this file, a '-' would 
	replace the middle character (r-x).

  CCC   The next three characters show the read, write and execute permissions for
	the files group. If the group had permission to read and write to 
	the file, but did not have permission to execute this file, a '-' would 
	replace the last character (rw-).

  DDD   The next three characters show the read, write and execute permissions for
	everyone else. If a user wasn't the owner or in a group that had 
	permission to read, write or execute the file, a '-' would replace all
	three characters (---). If the owner of the file wanted everyone to be
	able to read the file, the last 3 characters would be 'r--'.

After the file attributes, you see the word root. This is the name of the 
owner of this file. If Jericho owned the file, root would be replaced with 
jericho. 

Following the owner's name is the size of the file in bytes. In our example, 
access_log is a little over 15 kilobytes in size.  

Now we can easily see that the file was created or modified on January 8th at 3:33pm.
In the case of directories, it is common for the time to be replaced with the year the 
directory was created.

Now we are at the actual name of the file, directory or link. This may seem a little
backwards from those who are used to MS-DOS commands. Here, you should note the link 
root on line number 6. The little '->' is commonly used to indicate that the 
file is a link.

Now, remember that there were 10 files in the directory /usr/trip. How can you see
these invisible files? Just add the argument -a for all. Note that you can
chain the arguments together:

  1985UI ~$ls -la /usr/trip/     You typed in 'ls -la /usr/trip/' (long list, all)
  Total 10                       There are 10 items in this directory
  
  drwxr-xr-x root     8 Jan 01 2000  .
  drwxr-xr-x root     8 Jan 01 2000  ..
  -rwxrwxrwx root 15233 Jan 08 15:33 .logconf
  -rwxrwxrwx root 15233 Jan 08 15:33 access_log
  drwxrwxr-x root     8 Jan 01 2000  cgi_bin
  -rwxrwxrwx root  1237 Jan 08 15:33 error_log
  drwxrwxr-x root     8 Jan 01 2000  perl   
  -rwxrwxrwx root   133 Jan 08 15:33 referer_log
  lrwxrwxr-x root     7 Jan 08 2000  root ->
  -rwxrwxrwx root  5211 Jan 08 15:33 trip_log

Notice three new directories appeared. In Unix, control and configuration files are
called Dot files. The ls command, by default, hides these files because they're
not used by the user on a regular basis. This helps to unclutter the display when
listing files.

The .logconf file is just a configuration file. In this case, it sets the parameters
for the trip_log program. Normally configuration files are edited for your particular
computer and requirements using a text editor such as vi.

The weird directories called '.' and '..' may be unexpected, even though they do appear
in MS-DOS. The '.' appears in every directory; it just means the current directory. If you
were to type in ls and ls . you would get the same output (a simple listing 
of the current directory). The '..' directory appears in every directory except for the
root directory. The '..' just means 'the directory immediately above the one I am
in now'. In MS-DOS, you can use dir .. to see the directory contents of the 
directory just above the current one, just as you can type in ls ..

For example:

  1985UI ~$ls ..		You are in /usr/trip, and you typed in ls ..'
  Total 3			There are 3 items in the directory /usr. 2 are hidden.
  trip				The only things in the directory /usr is a directory
				called trip and the two hidden directories (the . 
				and the ..)

I Want To Go Somewhere Else
The command to change the directory you're in is the same as in MS-DOS: cd. To change
your current directory to a different one:

  1985UI ~$cd /home/rpickle		You are in /usr/trip, and you typed in where
					you want to go: cd /home/rpickle
  1985UI ~$pwd				You're in the new directory. Type in pwd if you
					want to verify it.
  /home/rpickle				There you have it: you're in the correct directory.

Is There Another Way To Go Somewhere Else?
Yes, there is another way. The commands are called pushd and popd. These 
commands make use of the computer stack. 

A stack is a computer term for a type of data storage. You can equate a stack to a pile 
of reports on your desk. You can work on a report until the boss tells you she needs a 
different report worked on. You therefore remove the other report from the stack and place
the one you were working with on top of the stack of reports. You can work on the 
important report until you're done, after which you take the earlier report off of the top
of the stack and continue working on it.

If you were working in directory /usr/trip, and needed to pop on over to directory
/usr/config to work on something quickly, you would just type in pushd and 
the directory name and path. This puts your current directory on the top of the data 
stack for later use, and places you in the new directory. After completing whatever it was 
you needed to do, you would then just type in popd by itself, because it would 'pop' 
you back in the last directory you were in before this one, because that's the one 
at the top of the stack.

Is It Absolutely Relative?
Before we conclude this section of the Newbie's Guide to Unix, we should discuss the 
concepts of relative and absolute paths. Relative paths are (surprise)
relative to where you are right now. For example, looking at /usr/trip:

  1985UI ~$pwd				You type in pwd
  /usr/trip/				You're in /usr/trip

  1985UI ~$ls -l 	    		You typed in 'ls -l'
  Total 10                   		There are 10 items in this directory (3 hidden)
  -rwxrwxrwx root 15233 Jan 08 15:33 access_log
  drwxrwxr-x root     8 Jan 01 2000  cgi_bin
  -rwxrwxrwx root  1237 Jan 08 15:33 error_log
  drwxrwxr-x root     8 Jan 01 2000  perl   
  -rwxrwxrwx root   133 Jan 08 15:33 referer_log
  lrwxrwxr-x root     7 Jan 08 2000  root ->
  -rwxrwxrwx root  5211 Jan 08 15:33 trip_log

Notice that there's a subdirectory here called perl. If you needed to go into this 
directory, you could type cd perl. This is a relative path, because it is
relative to the directory we are in. Unix knows that you want to go to a subdirectory that
is in the same directory you are in now. If you wanted to jump out to /home/rpickle, 
you would type cd /home/rpickle. This is an absolute path; it gives the complete
path from root to the desired directory. Note that all relative paths do not use a beginning
'/', and absolute paths use one. This will cause some confusion to newbies. If you are trying
to go to a subdirectory that you know exists, check to see if you've used a '/' where you
shouldn't have. 

In the next lesson, we will cover the concept of file ownership, which was touched
on when we discussed the ls -l long listing.





Rancid Pickle (c) copyright 2000 attrition.org