home *** CD-ROM | disk | FTP | other *** search
Text File | 1986-05-22 | 24.0 KB | 1,195 lines |
- .\" @(#)u2 6.1 (Berkeley) 5/22/86
- .\"
- .SH
- II. DAY-TO-DAY USE
- .SH
- Creating Files \(em The Editor
- .PP
- 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
- .UC UNIX
- ``text editor''
- .UL ed .
- Since
- .UL ed
- is thoroughly documented in
- .UL ed (1)
- and explained in
- .ul
- 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
- .ul
- files.
- (A file is just a collection of information stored in the machine,
- a simplistic but adequate definition.)
- .PP
- To create a file
- called
- .UL junk
- with some text in it, do the following:
- .P1
- .ta .65i
- ed junk \fR(invokes the text editor)\f3
- a \fR(command to ``ed'', to add text)\f3
- .ft I
- now type in
- whatever text you want ...
- .ft 3
- \&. \fR(signals the end of adding text)\f3
- .P2
- The ``\f3.\fR'' 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
- .UL ed
- commands will be recognized \(em
- everything you type will be treated as text to be added.
- .PP
- 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
- .UL w :
- .P1
- w
- .P2
- .UL ed
- will respond with the number of characters it wrote
- into the file
- .UL junk .
- .PP
- Until the
- .UL w
- command,
- nothing is stored permanently,
- so if you hang up and go home
- the information is lost.\(dg
- .FS
- \(dg This is not strictly true \(em
- if you hang up while editing, the data you were
- working on is saved in a file called
- .UL ed.hup ,
- which you can continue with at your next session.
- .FE
- But after
- .UL w
- the information is there permanently;
- you can re-access it any time by typing
- .P1
- ed junk
- .P2
- Type a
- .UL q
- command
- to quit the editor.
- (If you try to quit without writing,
- .UL ed
- will print a
- .UL ?
- to remind you.
- A second
- .UL q
- gets you out regardless.)
- .PP
- Now create a second file called
- .UL temp
- in the same manner.
- You should now have two files,
- .UL junk
- and
- .UL temp .
- .SH
- What files are out there?
- .PP
- The
- .UL ls
- (for ``list'') command lists the names
- (not contents)
- of any of the files that
- .UC UNIX
- knows about.
- If you type
- .P1
- ls
- .P2
- the response will be
- .P1
- junk
- temp
- .P2
- 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
- .P1
- ls -t
- .P2
- causes the files to be listed in the order in which they were last changed,
- most recent first.
- The
- .UL \-l
- option gives a ``long'' listing:
- .P1
- ls -l
- .P2
- will produce something like
- .P1
- -rw-rw-rw- 1 bwk 41 Jul 22 2:56 junk
- -rw-rw-rw- 1 bwk 78 Jul 22 2:57 temp
- .P2
- 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 numbers you got from
- .UL ed ).
- .UL bwk
- is the owner of the file, that is, the person
- who created it.
- The
- .UL \-rw\-rw\-rw\-
- tells who has permission to read and write the file,
- in this case everyone.
- .PP
- Options can be combined:
- .UL ls\ \-lt
- gives the same thing as
- .UL ls\ \-l ,
- but sorted into time order.
- You can also name the files you're interested in,
- and
- .UL ls
- will list the information about them only.
- More details can be found in
- .UL ls (1).
- .PP
- The use of optional arguments that begin with a minus sign,
- like
- .UL \-t
- and
- .UL \-lt ,
- is a common convention for
- .UC UNIX
- 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:
- .UL ls\-l
- is not the same as
- .UL ls\ \ \-l .
- .SH
- Printing Files
- .PP
- 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.
- .PP
- One simple thing is to use the editor,
- since printing is often done just before making changes anyway.
- You can say
- .P1
- ed junk
- 1,$p
- .P2
- .UL ed
- will reply with the count of the characters in
- .UL 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.
- .PP
- There are times when it's not feasible to use the editor for printing.
- For example, there is a limit on how big a file
- .UL 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.
- .PP
- First is
- .UL cat ,
- the simplest of all the printing programs.
- .UL cat
- simply prints on the terminal the contents of all the files
- named in a list.
- Thus
- .P1
- cat junk
- .P2
- prints one file, and
- .P1
- cat junk temp
- .P2
- prints two.
- The files are simply concatenated (hence the name
- .UL cat '') ``
- onto the terminal.
- .PP
- .UL pr
- produces formatted printouts of files.
- As with
- .UL cat ,
- .UL 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,
- .P1
- pr junk temp
- .P2
- will print
- .UL junk
- neatly,
- then skip to the top of a new page and print
- .UL temp
- neatly.
- .PP
- .UL pr
- can also produce multi-column output:
- .P1
- pr -3 junk
- .P2
- prints
- .UL junk
- in 3-column format.
- You can use any reasonable number in place of ``3''
- and
- .UL pr
- will do its best.
- .UL pr
- has other capabilities as well;
- see
- .UL pr (1).
- .PP
- It should be noted that
- .UL pr
- is
- .ul
- not
- a formatting program in the sense of shuffling lines around
- and justifying margins.
- The true formatters are
- .UL nroff
- and
- .UL troff ,
- which we will get to in the section on document preparation.
- .PP
- There are also programs that print files
- on a high-speed printer.
- Look in your manual under
- .UL opr
- and
- .UL lpr .
- Which to use depends on
- what equipment is attached to your machine.
- .SH
- Shuffling Files About
- .PP
- 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:
- .P1
- mv junk precious
- .P2
- This means that what used to be ``junk'' is now ``precious''.
- If you do an
- .UL ls
- command now,
- you will get
- .P1
- precious
- temp
- .P2
- Beware that if you move a file to another one
- that already exists,
- the already existing contents are lost forever.
- .PP
- If you want
- to make a
- .ul
- copy
- of a file (that is, to have two versions of something),
- you can use the
- .UL cp
- command:
- .P1
- cp precious temp1
- .P2
- makes a duplicate copy of
- .UL precious
- in
- .UL temp1 .
- .PP
- Finally, when you get tired of creating and moving
- files,
- there is a command to remove files from the file system,
- called
- .UL rm .
- .P1
- rm temp temp1
- .P2
- will remove both of the files named.
- .PP
- You will get a warning message if one of the named files wasn't there,
- but otherwise
- .UL rm ,
- like most
- .UC UNIX
- commands,
- does its work silently.
- There is no prompting or chatter,
- and error messages are occasionally curt.
- This terseness is sometimes disconcerting
- to new\%comers,
- but experienced users find it desirable.
- .SH
- What's in a Filename
- .PP
- 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.\(dg
- .FS
- \(dg In 4.2 BSD the limit was extended to 255 characters.
- .FE
- Second, although you can use 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
- .UL ls
- command,
- .UL ls\ \-t
- means to list in time order.
- So if you had a file whose name
- was
- .UL \-t ,
- you would have a tough time listing it by name.
- Besides the minus sign, there are other characters 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.
- .PP
- 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
- .UL 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
- .P1
- chap1
- chap2
- .ft R
- etc...
- .P2
- Or, if each chapter were broken into several files, you might have
- .P1
- chap1.1
- chap1.2
- chap1.3
- \&...
- chap2.1
- chap2.2
- \&...
- .P2
- You can now tell at a glance where a particular file fits into the whole.
- .PP
- There are advantages to a systematic naming convention which are not obvious
- to the novice
- .UC UNIX
- user.
- What if you wanted to print the whole book?
- You could say
- .P1
- pr chap1.1 chap1.2 chap1.3 ......
- .P2
- but you would get tired pretty fast, and would probably even make mistakes.
- Fortunately, there is a shortcut.
- You can say
- .P1
- pr chap*
- .P2
- The
- .UL *
- means ``anything at all,''
- so this translates into ``print all files
- whose names begin with
- .UL chap '',
- listed in alphabetical order.
- .PP
- This shorthand notation
- is not a property of the
- .UL pr
- command, by the way.
- It is system-wide, a service of the program
- that interprets commands
- (the ``shell,''
- .UL sh (1)).
- Using that fact, you can see how to list the names of the files in the book:
- .P1
- ls chap*
- .P2
- produces
- .P1
- chap1.1
- chap1.2
- chap1.3
- \&...
- .P2
- The
- .UL *
- is not limited to the last position in a filename \(em
- it can be anywhere
- and can occur several times.
- Thus
- .P1
- rm *junk* *temp*
- .P2
- removes all files that contain
- .UL junk
- or
- .UL temp
- as any part of their name.
- As a special case,
- .UL *
- by itself matches every filename,
- so
- .P1
- pr *
- .P2
- prints all your files
- (alphabetical order),
- and
- .P1
- rm *
- .P2
- removes
- .ul
- all files.
- (You had better be
- .IT very
- sure that's what you wanted to say!)
- .PP
- The
- .UL *
- is not
- the only pattern-matching feature available.
- Suppose you want to print only chapters 1 through 4 and 9.
- Then you can say
- .P1
- pr chap[12349]*
- .P2
- The
- .UL [...]
- 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
- .P1
- pr chap[1-49]*
- .P2
- Letters can also be used within brackets:
- .UL [a\-z]
- matches any character in the range
- .UL a
- through
- .UL z .
- .PP
- The
- .UL ?
- pattern matches any single character,
- so
- .P1
- ls ?
- .P2
- lists all files which have single-character names,
- and
- .P1
- ls -l chap?.1
- .P2
- lists information about the first file of each chapter
- .UL chap1.1 \&, (
- .UL chap2.1 ,
- etc.).
- .PP
- Of these niceties,
- .UL *
- is certainly the most useful,
- and you should get used to it.
- The others are frills, but worth knowing.
- .PP
- If you should ever have to turn off the special meaning
- of
- .UL * ,
- .UL ? ,
- etc.,
- enclose the entire argument in single quotes,
- as in
- .P1
- ls \(fm?\(fm
- .P2
- We'll see some more examples of this shortly.
- .SH
- What's in a Filename, Continued
- .PP
- When you first made that file called
- .UL junk ,
- how did
- the system
- know that there wasn't another
- .UL junk
- somewhere else,
- especially since the person in the next office is also
- reading this tutorial?
- The answer is that generally each user
- has a private
- .IT directory ,
- 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 unrelated to any other file of the same name
- that might exist in someone else's directory.
- .PP
- 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.
- .PP
- Let's try the latter first.
- The basic tools is the command
- .UL pwd
- (``print working directory''),
- which prints the name of the directory you are currently in.
- .PP
- Although the details will vary according to the system you are on,
- if you give the
- command
- .UL pwd ,
- it will print something like
- .P1
- /usr/your\(hyname
- .P2
- This says that you are currently in the directory
- .UL your-name ,
- which is in turn in the directory
- .UL /usr ,
- which is in turn in the root directory
- called by convention just
- .UL / .
- (Even if it's not called
- .UL /usr
- on your system,
- you will get something analogous.
- Make the corresponding mental adjustment and read on.)
- .PP
- If you now type
- .P1
- ls /usr/your\(hyname
- .P2
- you should get exactly the same list of file names
- as you get from a plain
- .UL ls :
- with no arguments,
- .UL ls
- lists the contents of the current directory;
- given the name of a directory,
- it lists the contents of that directory.
- .PP
- Next, try
- .P1
- ls /usr
- .P2
- This should print a long series of names,
- among which is your own login name
- .UL your-name .
- On many systems,
- .UL usr
- is a directory that contains the directories
- of all the normal users of the system,
- like you.
- .PP
- The next step is to try
- .P1
- ls /
- .P2
- You should get a response something like this
- (although again the details may be different):
- .P1
- bin
- dev
- etc
- lib
- tmp
- usr
- .P2
- This is a collection of the basic directories of files
- that
- the system
- knows about;
- we are at the root of the tree.
- .PP
- Now try
- .P1
- cat /usr/your\(hyname/junk
- .P2
- (if
- .UL junk
- is still around in your directory).
- The name
- .P1
- /usr/your\(hyname/junk
- .P2
- is called the
- .UL pathname
- of the file that
- you normally think of as ``junk''.
- ``Pathname'' has an obvious meaning:
- it represents 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
- .UC UNIX
- system
- that anywhere you can use an ordinary filename,
- you can use a pathname.
- .PP
- Here is a picture which may make this clearer:
- .P1 1
- .ft R
- .if t .vs 9p
- .if t .tr /\(sl
- .if t .tr ||
- .ce 100
- (root)
- / | \e
- / | \e
- / | \e
- bin etc usr dev tmp
- / | \e / | \e / | \e / | \e / | \e
- / | \e
- / | \e
- adam eve mary
- / / \e \e
- / \e junk
- junk temp
- .ce 0
- .br
- .tr //
- .P2
- .LP
- Notice that Mary's
- .UL junk
- is unrelated to Eve's.
- .PP
- 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
- .P1
- pr /usr/your\(hyname/chap*
- .P2
- Similarly, you can find out what files your neighbor has
- by saying
- .P1
- ls /usr/neighbor\(hyname
- .P2
- or make your own copy of one of his files by
- .P1
- cp /usr/your\(hyneighbor/his\(hyfile yourfile
- .P2
- .PP
- 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 control access.
- See
- .UL ls (1)
- and
- .UL chmod (1)
- for details.
- As a matter of observed fact,
- most users most of the time find openness of more
- benefit than privacy.
- .PP
- As a final experiment with pathnames, try
- .P1
- ls /bin /usr/bin
- .P2
- 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
- .UL /bin
- and finally in
- .UL /usr/bin .
- There is nothing magic about commands like
- .UL cat
- or
- .UL ls ,
- except that they have been collected into a couple of places to be easy to find and administer.
- .PP
- 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:
- .P1
- cd /usr/your\(hyfriend
- .P2
- (On some systems,
- .UL cd
- is spelled
- .UL chdir .)
- Now when you use a filename in something like
- .UL cat
- or
- .UL pr ,
- it refers to the file in your friend's directory.
- Changing directories doesn't affect any permissions associated
- with a file \(em
- if you couldn't access a file from your own directory,
- changing to another directory won't alter that fact.
- Of course,
- if you forget what directory you're in, type
- .P1
- pwd
- .P2
- to find out.
- .PP
- 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 directory called
- .UL book .
- So make one with
- .P1
- mkdir book
- .P2
- then go to it with
- .P1
- cd book
- .P2
- then start typing chapters.
- The book is now found in (presumably)
- .P1
- /usr/your\(hyname/book
- .P2
- To remove the directory
- .UL book ,
- type
- .P1
- rm book/*
- rmdir book
- .P2
- The first command removes all files from the directory;
- the second
- removes the empty directory.
- .PP
- You can go up one level in the tree of files
- by saying
- .P1
- cd ..
- .P2
- .UL .. '' ``
- is the name of the parent of whatever directory you are currently in.
- For completeness,
- .UL . '' ``
- is an alternate name
- for the directory you are in.
- .SH
- Using Files instead of the Terminal
- .PP
- 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
- .UC UNIX
- systems
- that the terminal can be replaced by a file
- for either or both of input and output.
- As one example,
- .P1
- ls
- .P2
- makes a list of files on your terminal.
- But if you say
- .P1
- ls >filelist
- .P2
- a list of your files will be placed in the file
- .UL filelist
- (which
- will be created if it doesn't already exist,
- or overwritten if it does).
- The symbol
- .UL >
- 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
- .UL cat
- in a file:
- .P1
- cat f1 f2 f3 >temp
- .P2
- .PP
- The symbol
- .UL >>
- operates very much like
- .UL >
- does,
- except that it means
- ``add to the end of.''
- That is,
- .P1
- cat f1 f2 f3 >>temp
- .P2
- means to concatenate
- .UL f1 ,
- .UL f2
- and
- .UL f3
- to the end of whatever is already in
- .UL temp ,
- instead of overwriting the existing contents.
- As with
- .UL > ,
- if
- .UL temp
- doesn't exist, it will be created for you.
- .PP
- In a similar way, the symbol
- .UL <
- 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
- .UL script .
- Then you can run the script on a file by saying
- .P1
- ed file <script
- .P2
- As another example, you can use
- .UL ed
- to prepare a letter in file
- .UL let ,
- then send it to several people with
- .P1
- mail adam eve mary joe <let
- .P2
- .SH
- Pipes
- .PP
- One of the novel contributions of
- the
- .UC UNIX
- system
- is the idea of a
- .ul
- pipe.
- A pipe is simply a way to connect the output of one program
- to the input of another program,
- so the two run as a sequence of processes \(em
- a pipeline.
- .PP
- For example,
- .P1
- pr f g h
- .P2
- will print the files
- .UL f ,
- .UL g ,
- and
- .UL h ,
- beginning each on a new page.
- Suppose you want
- them run together instead.
- You could say
- .P1
- cat f g h >temp
- pr <temp
- rm temp
- .P2
- but this is more work than necessary.
- Clearly what we want is to take the output of
- .UL cat
- and
- connect it to the input of
- .UL pr .
- So let us use a pipe:
- .P1
- cat f g h | pr
- .P2
- The vertical bar
- .UL |
- means to
- take the output from
- .UL cat ,
- which would normally have gone to the terminal,
- and put it into
- .UL pr
- to be neatly formatted.
- .PP
- There are many other examples of pipes.
- For example,
- .P1
- ls | pr -3
- .P2
- prints a list of your files in three columns.
- The program
- .UL wc
- counts the number of lines, words and characters in
- its input, and as we saw earlier,
- .UL who
- prints a list of currently-logged on people,
- one per line.
- Thus
- .P1
- who | wc
- .P2
- tells how many people are logged on.
- And of course
- .P1
- ls | wc
- .P2
- counts your files.
- .PP
- 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.
- .PP
- Many
- .UC UNIX
- 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.
- .UL pr
- is one example:
- .P1
- pr -3 a b c
- .P2
- prints files
- .UL a ,
- .UL b
- and
- .UL c
- in order in three columns.
- But in
- .P1
- cat a b c | pr -3
- .P2
- .UL pr
- prints the information coming down the pipeline,
- still in
- three columns.
- .SH
- The Shell
- .PP
- We have already mentioned once or twice the mysterious
- ``shell,''
- which is in fact
- .UL sh (1).\(dg
- .FS
- \(dg On Berkeley Unix systems, the usual shell for interactive use is the c shell,
- .UL csh(1).
- .FE
- The shell is the program that interprets what you type as
- commands and arguments.
- It also looks after translating
- .UL * ,
- etc.,
- into lists of filenames,
- and
- .UL < ,
- .UL > ,
- and
- .UL |
- into changes of input and output streams.
- .PP
- 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 semicolon and
- breaks the line into two commands.
- Thus
- .P1
- date; who
- .P2
- does both commands before returning with a prompt character.
- .PP
- You can also have more than one program running
- .ul
- simultaneously
- if you wish.
- For example, if you are doing something 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
- .P1
- ed file <script &
- .P2
- 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 complete.
- 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
- .P1
- ed file <script >script.out &
- .P2
- which saves the output lines in a file
- called
- .UL script.out .
- .PP
- When you initiate a command with
- .UL & ,
- 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
- .P1
- kill process\(hynumber
- .P2
- If you forget the process number,
- the command
- .UL ps
- will tell you about everything you have running.
- (If you are desperate,
- .UL kill\ 0
- will kill all your processes.)
- And if you're curious about other people,
- .UL ps\ a
- will tell you about
- .ul
- all
- programs that are currently running.
- .PP
- You can say
- .P1 1
- (command\(hy1; command\(hy2; command\(hy3) &
- .P2
- to start three commands in the background,
- or you can start a background pipeline with
- .P1
- command\(hy1 | command\(hy2 &
- .P2
- .PP
- 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 every time you log in.
- Then you can put the three necessary commands
- .UL tabs , (
- .UL date ,
- .UL who )
- into a file, let's call it
- .UL startup ,
- and then run it with
- .P1
- sh startup
- .P2
- This says to run the shell with the file
- .UL startup
- as input.
- The effect is as if you had typed
- the contents of
- .UL startup
- on the terminal.
- .PP
- If this is to be a regular thing,
- you can eliminate the
- need to type
- .UL sh :
- simply type, once only, the command
- .P1
- chmod +x startup
- .P2
- and thereafter you need only say
- .P1
- startup
- .P2
- to run the sequence of commands.
- The
- .UL chmod (1)
- command marks the file executable;
- the shell recognizes this and runs it as a sequence of commands.
- .PP
- If you want
- .UL startup
- to run automatically every time you log in,
- create a file in your login directory called
- .UL .profile ,
- and place in it the line
- .UL startup .
- When the shell first gains control when you log in,
- it looks for the
- .UL .profile
- file and does whatever commands it finds in it.\(dg
- .FS
- \(dg The c shell instead reads a file called
- .UL .login
- .
- .FE
- We'll get back to the shell in the section
- on programming.
-