CNS DOCWEB Home
CNS Home Page
CNS Publications Page
Search All CNS Docs

DOCWEB Logo Entire document
Available as PDF

Chapter 19: How to List and Read UNIX Directories

ls -- List of Files ("list" the files in the directory)

The ls command displays a list of files in the specified directory. If you don't specify a directory, then ls will list the files in the current directory.

By default, ls gives a short list, showing filenames only. It also skips certain files (those whose names start with a . [period]).

Figure 11. Output from ls Command

picard@spnode15$ ls

3dtree.jpg         command_memos      mj.ultra           temp
HTMLBgnrGuide.txt  dead.letter        pgpdriver          unpgp
News               dead.letter.bak    pine        
TUTORIAL           info.listserv      pinerc016899    
baen.txt           jim.kirk.letters   print.txt
bin                junk               public_html
calendar           mail               rexx

picard@spnode15$

What UNIX Calls Alphabetical Order

The files in the preceding example are in what UNIX considers to be "alphabetical order." Actually, UNIX calls it the "collating sequence," since it takes into account the order of characters other than the familiar A­Z and a­z alphabetic sequence. Further, since UNIX differentiates between UPPER and lower-case characters, these two sets (A­Z and a­z) are distinguished in the collating sequence, as reflected in the order in which the files are displayed (among other things).

As you can see, in the collating sequence, numbers (numerals, actually) come before letters. Then come the UPPER-case letters, followed by the lower-case letters. The ls command formats its listing in columns, just like a phone book--you read down each column, rather than across the page.

ls -l --For a More Detailed Listing

If you wish to see the "long" listing, which includes information about the file type, size, and access permissions, use the form:

ls -l

(that's ls <space> dash L [for Long]). Note that the -l option must be in lower-case for it to be recognized.

If you wish to see "all" the files, including the special files whose names begin with . (period), use the form ls -a; think of the a option as "all." You can combine these into ls -la. Figure 12 shows a sample of the ls command with the -la options.

Figure 12. Output from ls -la Command

picard@spnode15$ ls -la

total 1600
drwx---s-x  11 picard   STAFF       1536 Jun 26 14:49 .
dr-xr-sr-x1300 bin      bin        20480 Jun 26 12:06 ..
-rw-------   1 picard   STAFF        948 Jun 06 09:46 .addressbook
-rw-------   1 picard   STAFF       3368 Jun 06 09:46 .addressbook.lu
-rw-------   1 picard   STAFF        193 Apr 02 10:06 .article
-rw-------   1 picard   STAFF       1035 May 20 12:30 .bash_history
drwx---S--   2 picard   STAFF        512 Jun 23 13:56 .mailpgp
-rw-------   1 picard   STAFF     128654 Jun 10 19:19 .newsrc
drwx------   4 picard   STAFF        512 May 29 07:01 .pgp
-rw-------   1 picard   STAFF      10196 Jun 26 14:33 .pinerc
-rwxr-xr-x   1 picard   STAFF       1047 May 27 14:15 .plan
-rw-------   1 picard   STAFF         35 Jun 17 09:23 .profile
-rw-------   1 picard   STAFF        371 Sep 08 1995  .signature
-rw-------   1 picard   STAFF      81691 Jun 20 10:34 3dtree.jpg
-rw-------   1 picard   STAFF      31156 Jan 03 10:19 HTMLBgnrGuide.txt
drwx---s-x   2 picard   STAFF        512 Apr 01 13:26 News
-rw-------   1 picard   STAFF      11760 Jul 23 1995  TUTORIAL
-rw-------   1 picard   STAFF        234 Feb 02 08:18 baen.txt
drwx---s-x   2 picard   STAFF        512 Mar 12 06:57 bin
-rw-------   1 picard   STAFF         71 Jul 31 1995  calendar
-rw-------   1 picard   STAFF     338912 May 02 1995  command.memos
-rw-------   1 picard   STAFF        747 Jun 24 13:12 dead.letter
-rw-------   1 picard   STAFF      10506 Jun 01 12:42 info.listserv
-rw-------   1 picard   STAFF     698675 Nov 01 1995  jim.kirk.letters
-rw-------   1 picard   STAFF        122 Jun 24 13:28 junk
drwx------   2 picard   STAFF       1536 Jun 25 12:40 mail
-rw-r-----   1 picard   STAFF       1397 May 28 12:50 mj.ultra
drwx---s-x   2 picard   STAFF        512 May 26 21:09 pine
-rw-------   1 picard   STAFF       1716 Jul 23 1995  print.txt
drwxr-sr-x   6 picard   STAFF       1024 Mar 27 10:54 public_html
drwx---s-x   3 picard   STAFF        512 Mar 31 07:24 rexx
drwx---s-x   2 picard   STAFF        512 Aug 08 1995  temp
-rwx--x--x   1 picard   STAFF        368 May 28 14:10 unpgp

picard@spnode15$

Let's look at this listing, and see what it tells us. At first glance, the left-most column looks like utter nonsense; drwxr--blah-blah-blah. What's going on here?

File Type. The first position/character in this column describes what type of entry each horizontal line represents. The first character will usually be either a - or a d. Symbols in the first (left most) position on the line represent:

-

= Regular File

d

= Directory

You can tell, just by looking at the output from ls -l which entries are files and which are directories.

Permissions. The rest of the first column (after the - or d) indicates access permissions which have been set either explicitly, by you, using the chmod command (which we'll look at later) or automatically, by the system, when the file (or directory) was created. We'll discuss this part of the listing in more detail when we get to the chmod command, which deals with setting file access permissions.

Directory Entries (and Hard-Link Count). The next column (immediately to the right of the access permissions) is a number which tells how many directory entries are under that item. For a regular file, this will typically be 1. For a directory, this will always be at least 2. The reason for this is that every directory always contains pointers to both itself, and its parent directory. You can see these two entries as the first two items in our example listing in Figure 12: the entries for . and .. (i.e. one period, and two periods). The single period ( . ), is the pointer to the current directory--the directory that you are "in" right now. Two periods ( .. ), point to the parent directory--the directory which contains the current directory. You can use these as convenient nicknames/shortcuts in some commands, when you want to describe a relative pathname.

Owner. The next column to the right displays the userid of the owner of this file or directory. In our listing, most of the files are owned by our hypothetical user, picard. When you create files and directories, you will be their owner, and your userid will show here, in place of picard.

Group. The next column (mostly "STAFF" in our example) shows the name of the user group which is connected with this entry. Each userid is a member of one or more groups, and access permissions may be set which determine what sort of access other members of the same group have to the file or directory named. Again, more on that when we get to the chmod command.

Size. The next column shows the file size in bytes (characters).

Date/Time. The next 3 columns show the date and time the file was last modified.

File Name. Finally, we have the file name. As discussed earlier, UNIX is very accommodating with regard to the length of file names. However there are some qualifications: File names cannot (usually) contain blank spaces, or the characters /, *, or ?. This is because / is used to separate levels of a pathname, * is a "wildcard" character which is expanded by the system to mean "any number of any characters," and ? is a wildcard representing "any single character." MS-DOS users in particular should recognize these "wildcard" characters.

"Hidden Files"

Note the first few entries in our ls -la list example. All the files start with . (a period) and none of them showed up in the "plain" ls listing we first looked at. These are files which, normally, you would not want to be bothered with seeing. Some of them are created by programs to contain information about you and how you use the program--similar to MS-Windows ".INI" files, or the files in a Macintosh "Preferences" folder.

Others are files that you may have created, but, for whatever reason, don't care to always have to see in your directory listing.

Later in this document we'll talk more about some of them, particularly .profile and .forward.

Partial listings--Being Selective

You can use wildcards in conjunction with the ls command to specify a partial listing of your files. For example,

ls -l c*

would list out only those files beginning with the lowercase-letter "c".

CNS DOCWEB Home
CNS Home Page
CNS Publications Page
Search All CNS Docs