home *** CD-ROM | disk | FTP | other *** search
-
-
-
-
-
-
- II. DAY-TO-DAY USE
-
- Creating Files -- The Editor
-
- If you have to type a paper or a letter or a program,
- how do you get the information stored in the machine? Most
- of these tasks are done with the ``text editor'' ed. Since
- ed-is thoroughly documented in ed(1) and explained in A
- Tutorial Introduction to the UNIX Text Editor, we won't
- spend any time here describing how to use it. All we want
- it for right now is to make some files. (A file is just a
- collection of information stored in the machine, a simplis-
- tic but adequate definition.)
-
- To create a file called junk-with some text in it, do
- the following: ed junk(invokes the text editor) a (com-
- mand to ``ed'', to add text) now type in whatever text you
- want ... . (signals the end of adding text) The ``.''
- that signals the end of adding text must be at the beginning
- of a line by itself. Don't forget it, for until it is
- typed, no other ed-commands will be recognized -- everything
- you type will be treated as text to be added.
-
- At this point you can do various editing operations on
- the text you typed in, such as correcting spelling mistakes,
- rearranging paragraphs and the like. Finally, you must
- write the information you have typed into a file with the
- editor command w: w ed-will respond with the number of char-
- acters it wrote into the file junk.
-
- Until the w-command, nothing is stored permanently, so
- if you hang up and go home the information is lost.- But
- after w-the information is there permanently; you can re-
- access it any time by typing ed junk Type a q-command to
- quit the editor. (If you try to quit without writing, ed-
- will print a ?- to remind you. A second q-gets you out
- regardless.)
-
- Now create a second file called temp-in the same man-
- ner. You should now have two files, junk-and temp.
-
- What files are out there?
-
- The ls-(for ``list'') command lists the names (not con-
- tents) of any of the files that knows about. If you type ls
- the response will be junk temp which are indeed the two
- files just created. The names are sorted into alphabetical
- order automatically, but other variations are possible. For
- example, the command ls -t causes the files to be listed in
- -----------
- - This is not strictly true -- if you hang up
- while editing, the data you were working on is
- saved in a file called ed.hup, which you can con-
- tinue with at your next session.
-
-
-
-
-
-
-
-
-
- -2-
-
-
- the order in which they were last changed, most recent
- first. The -l-option gives a ``long'' listing: ls -l will
- produce something like -rw-rw-rw- 1 bwk 41 Jul 22 2:56
- junk -rw-rw-rw- 1 bwk 78 Jul 22 2:57 temp The date and
- time are of the last change to the file. The 41 and 78 are
- the number of characters (which should agree with the num-
- bers you got from ed). bwk-is the owner of the file, that
- is, the person who created it. The -rw-rw-rw--tells who has
- permission to read and write the file, in this case every-
- one.
-
- Options can be combined: ls--lt-gives the same thing as
- ls--l, but sorted into time order. You can also name the
- files you're interested in, and ls-will list the information
- about them only. More details can be found in ls(1).
-
- The use of optional arguments that begin with a minus
- sign, like -t-and -lt, is a common convention for programs.
- In general, if a program accepts such optional arguments,
- they precede any filename arguments. It is also vital that
- you separate the various arguments with spaces: ls-l-is not
- the same as ls---l.
-
- Printing Files
-
- Now that you've got a file of text, how do you print it
- so people can look at it? There are a host of programs that
- do that, probably more than are needed.
-
- One simple thing is to use the editor, since printing
- is often done just before making changes anyway. You can
- say ed junk 1,$p ed-will reply with the count of the charac-
- ters in junk- and then print all the lines in the file.
- After you learn how to use the editor, you can be selective
- about the parts you print.
-
- There are times when it's not feasible to use the edi-
- tor for printing. For example, there is a limit on how big
- a file ed-can handle (several thousand lines). Secondly, it
- will only print one file at a time, and sometimes you want
- to print several, one after another. So here are a couple
- of alternatives.
-
- First is cat, the simplest of all the printing pro-
- grams. cat- simply prints on the terminal the contents of
- all the files named in a list. Thus cat junk prints one
- file, and cat junk temp prints two. The files are simply
- concatenated (hence the name cat'') onto the terminal.
-
- pr-produces formatted printouts of files. As with cat,
- pr- prints all the files named in a list. The difference is
- that it produces headings with date, time, page number and
- file name at the top of each page, and extra lines to skip
- over the fold in the paper. Thus, pr junk temp will print
-
-
-
-
-
-
-
-
-
- -3-
-
-
- junk- neatly, then skip to the top of a new page and print
- temp-neatly.
-
- pr-can also produce multi-column output: pr -3 junk
- prints junk-in 3-column format. You can use any reasonable
- number in place of ``3'' and pr-will do its best. pr- has
- other capabilities as well; see pr(1).
-
- It should be noted that pr-is not a formatting program
- in the sense of shuffling lines around and justifying mar-
- gins. The true formatters are nroff-and troff, which we
- will get to in the section on document preparation.
-
- There are also programs that print files on a high-
- speed printer. Look in your manual under opr-and lpr.
- Which to use depends on what equipment is attached to your
- machine.
-
- Shuffling Files About
-
- Now that you have some files in the file system and
- some experience in printing them, you can try bigger things.
- For example, you can move a file from one place to another
- (which amounts to giving it a new name), like this: mv junk
- precious This means that what used to be ``junk'' is now
- ``precious''. If you do an ls-command now, you will get
- precious temp Beware that if you move a file to another one
- that already exists, the already existing contents are lost
- forever.
-
- If you want to make a copy of a file (that is, to have
- two versions of something), you can use the cp- command: cp
- precious temp1 makes a duplicate copy of precious-in temp1.
-
- Finally, when you get tired of creating and moving
- files, there is a command to remove files from the file sys-
- tem, called rm. rm temp temp1 will remove both of the files
- named.
-
- You will get a warning message if one of the named
- files wasn't there, but otherwise rm, like most commands,
- does its work silently. There is no prompting or chatter,
- and error messages are occasionally curt. This terseness is
- sometimes disconcerting to newcomers, but experienced users
- find it desirable.
-
- What's in a Filename
-
- So far we have used filenames without ever saying
- what's a legal name, so it's time for a couple of rules.
- First, filenames are limited to 14 characters, which is
- enough to be descriptive.- Second, although you can use
- -----------
- - In 4.2 BSD the limit was extended to 255 char-
-
-
-
-
-
-
-
-
-
- -4-
-
-
- almost any character in a filename, common sense says you
- should stick to ones that are visible, and that you should
- probably avoid characters that might be used with other
- meanings. We have already seen, for example, that in the ls-
- command, ls--t-means to list in time order. So if you had a
- file whose name was -t, you would have a tough time listing
- it by name. Besides the minus sign, there are other charac-
- ters which have special meaning. To avoid pitfalls, you
- would do well to use only letters, numbers and the period
- until you're familiar with the situation.
-
- On to some more positive suggestions. Suppose you're
- typing a large document like a book. Logically this divides
- into many small pieces, like chapters and perhaps sections.
- Physically it must be divided too, for ed-will not handle
- really big files. Thus you should type the document as a
- number of files. You might have a separate file for each
- chapter, called chap1 chap2 etc... Or, if each chapter were
- broken into several files, you might have chap1.1 chap1.2
- chap1.3 ... chap2.1 chap2.2 ... You can now tell at a
- glance where a particular file fits into the whole.
-
- There are advantages to a systematic naming convention
- which are not obvious to the novice user. What if you
- wanted to print the whole book? You could say pr chap1.1
- chap1.2 chap1.3 ...... but you would get tired pretty fast,
- and would probably even make mistakes. Fortunately, there
- is a shortcut. You can say pr chap* The *-means ``anything
- at all,'' so this translates into ``print all files whose
- names begin with chap'', listed in alphabetical order.
-
- This shorthand notation is not a property of the pr-
- command, by the way. It is system-wide, a service of the
- program that interprets commands (the ``shell,'' sh(1)).
- Using that fact, you can see how to list the names of the
- files in the book: ls chap* produces chap1.1 chap1.2 chap1.3
- ... The *-is not limited to the last position in a filename
- -- it can be anywhere and can occur several times. Thus rm
- *junk* *temp* removes all files that contain junk-or temp-as
- any part of their name. As a special case, *- by itself
- matches every filename, so pr * prints all your files
- (alphabetical order), and rm * removes all files. (You had
- better be sure that's what you wanted to say!)
-
- The *- is not the only pattern-matching feature avail-
- able. Suppose you want to print only chapters 1 through 4
- and 9. Then you can say pr chap[12349]* The [...]-means to
- match any of the characters inside the brackets. A range of
- consecutive letters or digits can be abbreviated, so you can
- also do this with pr chap[1-49]* Letters can also be used
- within brackets: [a-z]-matches any character in the range a-
- through z.
- -----------
- acters.
-
-
-
-
-
-
-
-
-
- -5-
-
-
- The ?-pattern matches any single character, so ls ?
- lists all files which have single-character names, and ls -l
- chap?.1 lists information about the first file of each chap-
- ter chap1.1, chap2.1, etc.).
-
- Of these niceties, *-is certainly the most useful, and
- you should get used to it. The others are frills, but worth
- knowing.
-
- If you should ever have to turn off the special meaning
- of *, ?, etc., enclose the entire argument in single quotes,
- as in ls '?' We'll see some more examples of this shortly.
-
- What's in a Filename, Continued
-
- When you first made that file called junk, how did the
- system know that there wasn't another junk- somewhere else,
- especially since the person in the next office is also read-
- ing this tutorial? The answer is that generally each user
- has a private which contains only the files that belong to
- him. When you log in, you are ``in'' your directory.
- Unless you take special action, when you create a new file,
- it is made in the directory that you are currently in; this
- is most often your own directory, and thus the file is unre-
- lated to any other file of the same name that might exist in
- someone else's directory.
-
- The set of all files is organized into a (usually big)
- tree, with your files located several branches into the
- tree. It is possible for you to ``walk'' around this tree,
- and to find any file in the system, by starting at the root
- of the tree and walking along the proper set of branches.
- Conversely, you can start where you are and walk toward the
- root.
-
- Let's try the latter first. The basic tools is the
- command pwd-(``print working directory''), which prints the
- name of the directory you are currently in.
-
- Although the details will vary according to the system
- you are on, if you give the command pwd, it will print some-
- thing like /usr/your-name This says that you are currently
- in the directory your-name, which is in turn in the direc-
- tory /usr, which is in turn in the root directory called by
- convention just /. (Even if it's not called /usr- on your
- system, you will get something analogous. Make the corre-
- sponding mental adjustment and read on.)
-
- If you now type ls /usr/your-name you should get
- exactly the same list of file names as you get from a plain
- ls: with no arguments, ls-lists the contents of the current
- directory; given the name of a directory, it lists the con-
- tents of that directory.
-
-
-
-
-
-
-
-
-
-
- -6-
-
-
- Next, try ls /usr This should print a long series of
- names, among which is your own login name your-name. On
- many systems, usr-is a directory that contains the directo-
- ries of all the normal users of the system, like you.
-
- The next step is to try ls / You should get a response
- something like this (although again the details may be dif-
- ferent): bin dev etc lib tmp usr This is a collection of the
- basic directories of files that the system knows about; we
- are at the root of the tree.
-
- Now try cat /usr/your-name/junk (if junk- is still
- around in your directory). The name /usr/your-name/junk is
- called the pathname-of the file that you normally think of
- as ``junk''. ``Pathname'' has an obvious meaning: it repre-
- sents the full name of the path you have to follow from the
- root through the tree of directories to get to a particular
- file. It is a universal rule in the system that anywhere
- you can use an ordinary filename, you can use a pathname.
-
- Here is a picture which may make this clearer:
- (root)
- / | \
- / | \
- / | \
- bin etc usr dev tmp
- / | \ / | \ / | \ / | \ / | \
- / | \
- / | \
- adam eve mary
- / / \ \
- / \ junk
- junk temp
-
- Notice that Mary's junk-is unrelated to Eve's.
-
- This isn't too exciting if all the files of interest
- are in your own directory, but if you work with someone else
- or on several projects concurrently, it becomes handy
- indeed. For example, your friends can print your book by
- saying pr /usr/your-name/chap* Similarly, you can find out
- what files your neighbor has by saying ls /usr/neighbor-name
- or make your own copy of one of his files by cp
- /usr/your-neighbor/his-file yourfile
-
- If your neighbor doesn't want you poking around in his
- files, or vice versa, privacy can be arranged. Each file
- and directory has read-write-execute permissions for the
- owner, a group, and everyone else, which can be set to con-
- trol access. See ls(1) and chmod(1) for details. As a mat-
- ter of observed fact, most users most of the time find open-
- ness of more benefit than privacy.
-
-
-
-
-
-
-
-
-
-
-
- -7-
-
-
- As a final experiment with pathnames, try ls /bin
- /usr/bin Do some of the names look familiar? When you run a
- program, by typing its name after the prompt character, the
- system simply looks for a file of that name. It normally
- looks first in your directory (where it typically doesn't
- find it), then in /bin-and finally in /usr/bin. There is
- nothing magic about commands like cat-or ls, except that
- they have been collected into a couple of places to be easy
- to find and administer.
-
- What if you work regularly with someone else on common
- information in his directory? You could just log in as your
- friend each time you want to, but you can also say ``I want
- to work on his files instead of my own''. This is done by
- changing the directory that you are currently in: cd
- /usr/your-friend (On some systems, cd- is spelled chdir.)
- Now when you use a filename in something like cat-or pr, it
- refers to the file in your friend's directory. Changing
- directories doesn't affect any permissions associated with a
- file -- if you couldn't access a file from your own direc-
- tory, changing to another directory won't alter that fact.
- Of course, if you forget what directory you're in, type pwd
- to find out.
-
- It is usually convenient to arrange your own files so
- that all the files related to one thing are in a directory
- separate from other projects. For example, when you write
- your book, you might want to keep all the text in a direc-
- tory called book. So make one with mkdir book then go to it
- with cd book then start typing chapters. The book is now
- found in (presumably) /usr/your-name/book To remove the
- directory book, type rm book/* rmdir book The first command
- removes all files from the directory; the second removes the
- empty directory.
-
- You can go up one level in the tree of files by saying
- cd .. ..'' is the name of the parent of whatever directory
- you are currently in. For completeness, .'' is an alternate
- name for the directory you are in.
-
- Using Files instead of the Terminal
-
- Most of the commands we have seen so far produce output
- on the terminal; some, like the editor, also take their
- input from the terminal. It is universal in systems that
- the terminal can be replaced by a file for either or both of
- input and output. As one example, ls makes a list of files
- on your terminal. But if you say ls >filelist a list of
- your files will be placed in the file filelist-(which will
- be created if it doesn't already exist, or overwritten if it
- does). The symbol >-means ``put the output on the following
- file, rather than on the terminal.'' Nothing is produced on
- the terminal. As another example, you could combine several
- files into one by capturing the output of cat-in a file: cat
-
-
-
-
-
-
-
-
-
- -8-
-
-
- f1 f2 f3 >temp
-
- The symbol >>- operates very much like >-does, except
- that it means ``add to the end of.'' That is, cat f1 f2 f3
- >>temp means to concatenate f1, f2-and f3-to the end of
- whatever is already in temp, instead of overwriting the
- existing contents. As with >, if temp-doesn't exist, it
- will be created for you.
-
- In a similar way, the symbol <-means to take the input
- for a program from the following file, instead of from the
- terminal. Thus, you could make up a script of commonly used
- editing commands and put them into a file called script.
- Then you can run the script on a file by saying ed file
- <script As another example, you can use ed-to prepare a let-
- ter in file let, then send it to several people with mail
- adam eve mary joe <let
-
- Pipes
-
- One of the novel contributions of the system is the
- idea of a pipe. A pipe is simply a way to connect the out-
- put of one program to the input of another program, so the
- two run as a sequence of processes -- a pipeline.
-
- For example, pr f g h will print the files f, g, and h,
- beginning each on a new page. Suppose you want them run
- together instead. You could say cat f g h >temp pr <temp rm
- temp but this is more work than necessary. Clearly what we
- want is to take the output of cat- and connect it to the
- input of pr. So let us use a pipe: cat f g h | pr The ver-
- tical bar |-means to take the output from cat, which would
- normally have gone to the terminal, and put it into pr-to be
- neatly formatted.
-
- There are many other examples of pipes. For example,
- ls | pr -3 prints a list of your files in three columns.
- The program wc-counts the number of lines, words and charac-
- ters in its input, and as we saw earlier, who-prints a list
- of currently-logged on people, one per line. Thus who | wc
- tells how many people are logged on. And of course ls | wc
- counts your files.
-
- Any program that reads from the terminal can read from
- a pipe instead; any program that writes on the terminal can
- drive a pipe. You can have as many elements in a pipeline
- as you wish.
-
- Many programs are written so that they will take their
- input from one or more files if file arguments are given; if
- no arguments are given they will read from the terminal, and
- thus can be used in pipelines. pr-is one example: pr -3 a b
- c prints files a, b-and c-in order in three columns. But in
- cat a b c | pr -3 pr-prints the information coming down the
-
-
-
-
-
-
-
-
-
- -9-
-
-
- pipeline, still in three columns.
-
- The Shell
-
- We have already mentioned once or twice the mysterious
- ``shell,'' which is in fact sh(1).- The shell is the program
- that interprets what you type as commands and arguments. It
- also looks after translating *, etc., into lists of file-
- names, and <, >, and |-into changes of input and output
- streams.
-
- The shell has other capabilities too. For example, you
- can run two programs with one command line by separating the
- commands with a semicolon; the shell recognizes the semi-
- colon and breaks the line into two commands. Thus date; who
- does both commands before returning with a prompt character.
-
- You can also have more than one program running simul-
- taneously if you wish. For example, if you are doing some-
- thing time-consuming, like the editor script of an earlier
- section, and you don't want to wait around for the results
- before starting something else, you can say ed file <script
- & The ampersand at the end of a command line says ``start
- this command running, then take further commands from the
- terminal immediately,'' that is, don't wait for it to com-
- plete. Thus the script will begin, but you can do something
- else at the same time. Of course, to keep the output from
- interfering with what you're doing on the terminal, it would
- be better to say ed file <script >script.out & which saves
- the output lines in a file called script.out.
-
- When you initiate a command with &, the system replies
- with a number called the process number, which identifies
- the command in case you later want to stop it. If you do,
- you can say kill process-number If you forget the process
- number, the command ps-will tell you about everything you
- have running. (If you are desperate, kill-0-will kill all
- your processes.) And if you're curious about other people,
- ps-a- will tell you about all programs that are currently
- running.
-
- You can say (command-1; command-2; command-3) & to
- start three commands in the background, or you can start a
- background pipeline with command-1 | command-2 &
-
- Just as you can tell the editor or some similar program
- to take its input from a file instead of from the terminal,
- you can tell the shell to read a file to get commands. (Why
- not? The shell, after all, is just a program, albeit a
- clever one.) For instance, suppose you want to set tabs on
- your terminal, and find out the date and who's on the system
- -----------
- - On Berkeley Unix systems, the usual shell for
- interactive use is the c shell, csh(1).-
-
-
-
-
-
-
-
-
-
- -10-
-
-
- every time you log in. Then you can put the three necessary
- commands tabs, date, who) into a file, let's call it
- startup, and then run it with sh startup This says to run
- the shell with the file startup-as input. The effect is as
- if you had typed the contents of startup-on the terminal.
-
- If this is to be a regular thing, you can eliminate the
- need to type sh: simply type, once only, the command chmod
- +x startup and thereafter you need only say startup to run
- the sequence of commands. The chmod(1) command marks the
- file executable; the shell recognizes this and runs it as a
- sequence of commands.
-
- If you want startup-to run automatically every time you
- log in, create a file in your login directory called
- .profile, and place in it the line startup. When the shell
- first gains control when you log in, it looks for the
- .profile- file and does whatever commands it finds in it.-
- We'll get back to the shell in the section on programming.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -----------
- - The c shell instead reads a file called .login-
-
-
-
-
-
-
-