Annotation of 43BSDReno/share/doc/usd/01.begin/u2, revision 1.1

1.1     ! root        1: .\"    @(#)u2  6.1 (Berkeley) 5/22/86
        !             2: .\"
        !             3: .SH
        !             4: II.  DAY-TO-DAY USE
        !             5: .SH
        !             6: Creating Files \(em The Editor
        !             7: .PP
        !             8: If you have to type a paper or a letter or a program,
        !             9: how do you get the information stored in the machine?
        !            10: Most of these tasks are done with
        !            11: the
        !            12: .UC UNIX
        !            13: ``text editor''
        !            14: .UL ed .
        !            15: Since
        !            16: .UL ed
        !            17: is thoroughly documented in 
        !            18: .UL ed (1) 
        !            19: and explained in
        !            20: .ul
        !            21: A Tutorial Introduction to the UNIX Text Editor,
        !            22: we won't spend any time here describing how to use it.
        !            23: All we want it for right now is to make some
        !            24: .ul
        !            25: files.
        !            26: (A file is just a collection of information stored in the machine,
        !            27: a simplistic but adequate definition.)
        !            28: .PP
        !            29: To create a file 
        !            30: called
        !            31: .UL junk
        !            32: with some text in it, do the following:
        !            33: .P1
        !            34: .ta .65i
        !            35: ed junk        \fR(invokes the text editor)\f3
        !            36: a      \fR(command to ``ed'', to add text)\f3
        !            37: .ft I
        !            38: now type in
        !            39: whatever text you want ...
        !            40: .ft 3
        !            41: \&.    \fR(signals the end of adding text)\f3
        !            42: .P2
        !            43: The ``\f3.\fR'' that signals the end of adding text must be
        !            44: at the beginning of a line by itself.
        !            45: Don't forget it,
        !            46: for until it is typed,
        !            47: no other
        !            48: .UL ed
        !            49: commands will be recognized \(em
        !            50: everything you type will be treated as text to be added.
        !            51: .PP
        !            52: At this point you can do various editing operations
        !            53: on the text you typed in, such as correcting spelling mistakes,
        !            54: rearranging paragraphs and the like.
        !            55: Finally, you must write the information you have typed
        !            56: into a file with the editor command
        !            57: .UL w :
        !            58: .P1
        !            59: w
        !            60: .P2
        !            61: .UL ed
        !            62: will respond with the number of characters it wrote
        !            63: into the file 
        !            64: .UL junk .
        !            65: .PP
        !            66: Until the
        !            67: .UL w
        !            68: command,
        !            69: nothing is stored permanently,
        !            70: so if you hang up and go home
        !            71: the information is lost.\(dg
        !            72: .FS
        !            73: \(dg This is not strictly true \(em
        !            74: if you hang up while editing, the data you were
        !            75: working on is saved in a file called
        !            76: .UL ed.hup ,
        !            77: which you can continue with at your next session.
        !            78: .FE
        !            79: But after
        !            80: .UL w
        !            81: the information is there permanently;
        !            82: you can re-access it any time by typing
        !            83: .P1
        !            84: ed junk
        !            85: .P2
        !            86: Type a
        !            87: .UL q
        !            88: command
        !            89: to quit the editor.
        !            90: (If you try to quit without writing,
        !            91: .UL ed
        !            92: will print a
        !            93: .UL ?
        !            94: to remind you.
        !            95: A second
        !            96: .UL q
        !            97: gets you out regardless.)
        !            98: .PP
        !            99: Now create a second file called 
        !           100: .UL temp
        !           101: in the same manner.
        !           102: You should now have two files,
        !           103: .UL junk
        !           104: and
        !           105: .UL temp .
        !           106: .SH
        !           107: What files are out there?
        !           108: .PP
        !           109: The
        !           110: .UL ls
        !           111: (for ``list'') command lists the names
        !           112: (not contents)
        !           113: of any of the files that
        !           114: .UC UNIX
        !           115: knows about.
        !           116: If you type
        !           117: .P1
        !           118: ls
        !           119: .P2
        !           120: the response will be
        !           121: .P1
        !           122: junk
        !           123: temp
        !           124: .P2
        !           125: which are indeed the two files just created.
        !           126: The names are sorted into alphabetical order automatically,
        !           127: but other variations are possible.
        !           128: For example,
        !           129: the command
        !           130: .P1
        !           131: ls -t
        !           132: .P2
        !           133: causes the files to be listed in the order in which they were last changed,
        !           134: most recent first.
        !           135: The
        !           136: .UL \-l
        !           137: option gives a ``long'' listing:
        !           138: .P1
        !           139: ls -l
        !           140: .P2
        !           141: will produce something like
        !           142: .P1
        !           143: -rw-rw-rw-  1 bwk   41 Jul 22 2:56 junk
        !           144: -rw-rw-rw-  1 bwk   78 Jul 22 2:57 temp
        !           145: .P2
        !           146: The date and time are of the last change to the file.
        !           147: The 41 and 78 are the number of characters
        !           148: (which should agree with the numbers you got from
        !           149: .UL ed ).
        !           150: .UL bwk
        !           151: is the owner of the file, that is, the person
        !           152: who created it.
        !           153: The
        !           154: .UL \-rw\-rw\-rw\- 
        !           155: tells who has permission to read and write the file,
        !           156: in this case everyone.
        !           157: .PP
        !           158: Options can be combined:
        !           159: .UL ls\ \-lt
        !           160: gives the same thing as
        !           161: .UL ls\ \-l ,
        !           162: but sorted into time order.
        !           163: You can also name the files you're interested in,
        !           164: and 
        !           165: .UL ls
        !           166: will list the information about them only.
        !           167: More details can be found in 
        !           168: .UL ls (1).
        !           169: .PP
        !           170: The use of optional arguments that begin with a minus sign,
        !           171: like
        !           172: .UL \-t
        !           173: and
        !           174: .UL \-lt ,
        !           175: is a common convention for
        !           176: .UC UNIX
        !           177: programs.
        !           178: In general, if a program accepts such optional arguments,
        !           179: they precede any filename arguments.
        !           180: It is also vital that you separate the various arguments with spaces:
        !           181: .UL ls\-l
        !           182: is not the same as
        !           183: .UL ls\ \ \-l .
        !           184: .SH
        !           185: Printing Files
        !           186: .PP
        !           187: Now that you've got a file of text,
        !           188: how do you print it so people can look at it?
        !           189: There are a host of programs that do that,
        !           190: probably more than are needed.
        !           191: .PP
        !           192: One simple thing is to use the editor,
        !           193: since printing is often done just before making changes anyway.
        !           194: You can say
        !           195: .P1
        !           196: ed junk
        !           197: 1,$p
        !           198: .P2
        !           199: .UL ed
        !           200: will reply with the count of the characters in 
        !           201: .UL junk
        !           202: and then print all the lines in the file.
        !           203: After you learn how to use the editor,
        !           204: you can be selective about the parts you print.
        !           205: .PP
        !           206: There are times when it's not feasible to use the editor for printing.
        !           207: For example, there is a limit on how big a file
        !           208: .UL ed
        !           209: can handle
        !           210: (several thousand lines).
        !           211: Secondly, 
        !           212: it
        !           213: will only print one file at a time,
        !           214: and sometimes you want to print several, one after another.
        !           215: So here are a couple of alternatives.
        !           216: .PP
        !           217: First is
        !           218: .UL cat ,
        !           219: the simplest of all the printing programs.
        !           220: .UL cat
        !           221: simply prints on the terminal the contents of all the files
        !           222: named in a list.
        !           223: Thus
        !           224: .P1
        !           225: cat junk
        !           226: .P2
        !           227: prints one file, and
        !           228: .P1
        !           229: cat junk temp
        !           230: .P2
        !           231: prints two.
        !           232: The files are simply concatenated (hence the name
        !           233: .UL cat '') ``
        !           234: onto the terminal.
        !           235: .PP
        !           236: .UL pr
        !           237: produces formatted printouts of files.
        !           238: As with 
        !           239: .UL cat ,
        !           240: .UL pr
        !           241: prints all the files named in a list.
        !           242: The difference is that it produces 
        !           243: headings with date, time, page number and file name
        !           244: at the top of each page,
        !           245: and
        !           246: extra lines to skip over the fold in the paper.
        !           247: Thus,
        !           248: .P1
        !           249: pr junk temp
        !           250: .P2
        !           251: will print
        !           252: .UL junk
        !           253: neatly,
        !           254: then skip to the top of a new page and print
        !           255: .UL temp
        !           256: neatly.
        !           257: .PP
        !           258: .UL pr
        !           259: can also produce multi-column output:
        !           260: .P1
        !           261: pr -3 junk 
        !           262: .P2
        !           263: prints
        !           264: .UL junk
        !           265: in 3-column format.
        !           266: You can use any reasonable number in place of ``3''
        !           267: and 
        !           268: .UL pr
        !           269: will do its best.
        !           270: .UL pr
        !           271: has other capabilities as well;
        !           272: see
        !           273: .UL pr (1).
        !           274: .PP
        !           275: It should be noted that
        !           276: .UL pr
        !           277: is
        !           278: .ul
        !           279: not
        !           280: a formatting program in the sense of shuffling lines around
        !           281: and justifying margins.
        !           282: The true formatters are
        !           283: .UL nroff
        !           284: and
        !           285: .UL troff ,
        !           286: which we will get to in the section on document preparation.
        !           287: .PP
        !           288: There are also programs that print files
        !           289: on a high-speed printer.
        !           290: Look in your manual under
        !           291: .UL opr
        !           292: and
        !           293: .UL lpr .
        !           294: Which to use depends on
        !           295: what equipment is attached to your machine.
        !           296: .SH
        !           297: Shuffling Files About
        !           298: .PP
        !           299: Now that you have some files in the file system
        !           300: and some experience in printing them,
        !           301: you can try bigger things.
        !           302: For example,
        !           303: you can move a file from one place to another
        !           304: (which amounts to giving it a new name),
        !           305: like this:
        !           306: .P1
        !           307: mv junk precious
        !           308: .P2
        !           309: This means that what used to be ``junk'' is now ``precious''.
        !           310: If you do an
        !           311: .UL ls
        !           312: command now,
        !           313: you will get
        !           314: .P1
        !           315: precious
        !           316: temp
        !           317: .P2
        !           318: Beware that if you move a file to another one
        !           319: that already exists,
        !           320: the already existing contents are lost forever.
        !           321: .PP
        !           322: If you want
        !           323: to make a
        !           324: .ul
        !           325: copy
        !           326: of a file (that is, to have two versions of something),
        !           327: you can use the 
        !           328: .UL cp
        !           329: command:
        !           330: .P1
        !           331: cp precious temp1
        !           332: .P2
        !           333: makes a duplicate copy of 
        !           334: .UL precious
        !           335: in
        !           336: .UL temp1 .
        !           337: .PP
        !           338: Finally, when you get tired of creating and moving
        !           339: files,
        !           340: there is a command to remove files from the file system,
        !           341: called
        !           342: .UL rm .
        !           343: .P1
        !           344: rm temp temp1
        !           345: .P2
        !           346: will remove both of the files named.
        !           347: .PP
        !           348: You will get a warning message if one of the named files wasn't there,
        !           349: but otherwise
        !           350: .UL rm ,
        !           351: like most
        !           352: .UC UNIX
        !           353: commands,
        !           354: does its work silently.
        !           355: There is no prompting or chatter,
        !           356: and error messages are occasionally curt.
        !           357: This terseness is sometimes disconcerting
        !           358: to new\%comers,
        !           359: but experienced users find it desirable.
        !           360: .SH
        !           361: What's in a Filename
        !           362: .PP
        !           363: So far we have used filenames without ever saying what's
        !           364: a legal name,
        !           365: so it's time for a couple of rules.
        !           366: First, filenames are limited to 14 characters,
        !           367: which is enough to be descriptive.\(dg
        !           368: .FS
        !           369: \(dg In  4.2 BSD the limit was extended to 255 characters.
        !           370: .FE
        !           371: Second, although you can use almost any character
        !           372: in a filename,
        !           373: common sense says you should stick to ones that are visible,
        !           374: and that you should probably avoid characters that might be used
        !           375: with other meanings.
        !           376: We have already seen, for example,
        !           377: that in the
        !           378: .UL ls
        !           379: command,
        !           380: .UL ls\ \-t
        !           381: means to list in time order.
        !           382: So if you had a file whose name
        !           383: was
        !           384: .UL \-t ,
        !           385: you would have a tough time listing it by name.
        !           386: Besides the minus sign, there are other characters which
        !           387: have special meaning.
        !           388: To avoid pitfalls,
        !           389: you would do well to 
        !           390: use only letters, numbers and the period
        !           391: until you're familiar with the situation.
        !           392: .PP
        !           393: On to some more positive suggestions.
        !           394: Suppose you're typing a large document
        !           395: like a book.
        !           396: Logically this divides into many small pieces,
        !           397: like chapters and perhaps sections.
        !           398: Physically it must be divided too,
        !           399: for 
        !           400: .UL ed
        !           401: will not handle really big files.
        !           402: Thus you should type the document as a number of files.
        !           403: You might have a separate file for each chapter,
        !           404: called
        !           405: .P1
        !           406: chap1
        !           407: chap2
        !           408: .ft R
        !           409: etc...
        !           410: .P2
        !           411: Or, if each chapter were broken into several files, you might have
        !           412: .P1
        !           413: chap1.1
        !           414: chap1.2
        !           415: chap1.3
        !           416: \&...
        !           417: chap2.1
        !           418: chap2.2
        !           419: \&...
        !           420: .P2
        !           421: You can now tell at a glance where a particular file fits into the whole.
        !           422: .PP
        !           423: There are advantages to a systematic naming convention which are not obvious
        !           424: to the novice
        !           425: .UC UNIX 
        !           426: user.
        !           427: What if you wanted to print the whole book?
        !           428: You could say
        !           429: .P1
        !           430: pr chap1.1 chap1.2 chap1.3 ......
        !           431: .P2
        !           432: but you would get tired pretty fast, and would probably even make mistakes.
        !           433: Fortunately, there is a shortcut.
        !           434: You can say
        !           435: .P1
        !           436: pr chap*
        !           437: .P2
        !           438: The
        !           439: .UL *
        !           440: means ``anything at all,''
        !           441: so this translates into ``print all files
        !           442: whose names begin with 
        !           443: .UL chap '',
        !           444: listed in alphabetical order.
        !           445: .PP
        !           446: This shorthand notation
        !           447: is not a property of the
        !           448: .UL pr
        !           449: command, by the way.
        !           450: It is system-wide, a service of the program
        !           451: that interprets commands
        !           452: (the ``shell,''
        !           453: .UL sh (1)).
        !           454: Using that fact, you can see how to list the names of the files in the book:
        !           455: .P1
        !           456: ls chap*
        !           457: .P2
        !           458: produces
        !           459: .P1
        !           460: chap1.1
        !           461: chap1.2
        !           462: chap1.3
        !           463: \&...
        !           464: .P2
        !           465: The
        !           466: .UL *
        !           467: is not limited to the last position in a filename \(em
        !           468: it can be anywhere
        !           469: and can occur several times.
        !           470: Thus
        !           471: .P1
        !           472: rm *junk* *temp*
        !           473: .P2
        !           474: removes all files that contain
        !           475: .UL junk
        !           476: or
        !           477: .UL temp
        !           478: as any part of their name.
        !           479: As a special case,
        !           480: .UL *
        !           481: by itself matches every filename,
        !           482: so
        !           483: .P1
        !           484: pr *
        !           485: .P2
        !           486: prints all your files
        !           487: (alphabetical order),
        !           488: and
        !           489: .P1
        !           490: rm *
        !           491: .P2
        !           492: removes
        !           493: .ul
        !           494: all files.
        !           495: (You had better be
        !           496: .IT  very 
        !           497: sure that's what you wanted to say!)
        !           498: .PP
        !           499: The
        !           500: .UL *
        !           501: is not 
        !           502: the only pattern-matching feature available.
        !           503: Suppose you want to print only chapters 1 through 4 and 9.
        !           504: Then you can say
        !           505: .P1
        !           506: pr chap[12349]*
        !           507: .P2
        !           508: The
        !           509: .UL [...]
        !           510: means to match any of the characters inside the brackets.
        !           511: A range of consecutive letters or digits can be abbreviated,
        !           512: so you can also do this 
        !           513: with
        !           514: .P1
        !           515: pr chap[1-49]*
        !           516: .P2
        !           517: Letters can also be used within brackets:
        !           518: .UL [a\-z]
        !           519: matches any character in the range
        !           520: .UL a
        !           521: through
        !           522: .UL z .
        !           523: .PP
        !           524: The
        !           525: .UL ?
        !           526: pattern matches any single character,
        !           527: so
        !           528: .P1
        !           529: ls ?
        !           530: .P2
        !           531: lists all files which have single-character names,
        !           532: and
        !           533: .P1
        !           534: ls -l chap?.1
        !           535: .P2
        !           536: lists information about the first file of each chapter
        !           537: .UL chap1.1 \&, (
        !           538: .UL chap2.1 ,
        !           539: etc.).
        !           540: .PP
        !           541: Of these niceties,
        !           542: .UL *
        !           543: is certainly the most useful,
        !           544: and you should get used to it.
        !           545: The others are frills, but worth knowing.
        !           546: .PP
        !           547: If you should ever have to turn off the special meaning
        !           548: of
        !           549: .UL * ,
        !           550: .UL ? ,
        !           551: etc.,
        !           552: enclose the entire argument in single quotes,
        !           553: as in
        !           554: .P1
        !           555: ls \(fm?\(fm
        !           556: .P2
        !           557: We'll see some more examples of this shortly.
        !           558: .SH
        !           559: What's in a Filename, Continued
        !           560: .PP
        !           561: When you first made that file called
        !           562: .UL junk ,
        !           563: how did 
        !           564: the system
        !           565: know that there wasn't another
        !           566: .UL junk
        !           567: somewhere else,
        !           568: especially since the person in the next office is also
        !           569: reading this tutorial?
        !           570: The answer is that generally each user 
        !           571: has a private
        !           572: .IT directory ,
        !           573: which contains only the files that belong to him.
        !           574: When you log in, you are ``in'' your directory.
        !           575: Unless you take special action,
        !           576: when you create a new file,
        !           577: it is made in the directory that you are currently in;
        !           578: this is most often your own directory,
        !           579: and thus the file is unrelated to any other file of the same name
        !           580: that might exist in someone else's directory.
        !           581: .PP
        !           582: The set of all files
        !           583: is organized into a (usually big) tree,
        !           584: with your files located several branches into the tree.
        !           585: It is possible for you to ``walk'' around this tree,
        !           586: and to find any file in the system, by starting at the root
        !           587: of the tree and walking along the proper set of branches.
        !           588: Conversely, you can start where you are and walk toward the root.
        !           589: .PP
        !           590: Let's try the latter first.
        !           591: The basic tools is the command
        !           592: .UL pwd
        !           593: (``print working directory''),
        !           594: which prints the name of the directory you are currently in.
        !           595: .PP
        !           596: Although the details will vary according to the system you are on,
        !           597: if you give the
        !           598: command
        !           599: .UL pwd ,
        !           600: it will print something like
        !           601: .P1
        !           602: /usr/your\(hyname
        !           603: .P2
        !           604: This says that you are currently in the directory
        !           605: .UL your-name ,
        !           606: which is in turn in the directory
        !           607: .UL /usr ,
        !           608: which is in turn in the root directory
        !           609: called by convention just
        !           610: .UL / .
        !           611: (Even if it's not called
        !           612: .UL /usr
        !           613: on your system,
        !           614: you will get something analogous.
        !           615: Make the corresponding mental adjustment and read on.)
        !           616: .PP
        !           617: If you now type
        !           618: .P1
        !           619: ls /usr/your\(hyname
        !           620: .P2
        !           621: you should get exactly the same list of file names
        !           622: as you get from a plain
        !           623: .UL ls  :
        !           624: with no arguments,
        !           625: .UL ls
        !           626: lists the contents of the current directory;
        !           627: given the name of a directory,
        !           628: it lists the contents of that directory.
        !           629: .PP
        !           630: Next, try
        !           631: .P1
        !           632: ls /usr
        !           633: .P2
        !           634: This should print a long series of names,
        !           635: among which is your own login name
        !           636: .UL your-name .
        !           637: On many systems, 
        !           638: .UL usr
        !           639: is a directory that contains the directories
        !           640: of all the normal users of the system,
        !           641: like you.
        !           642: .PP
        !           643: The next step is to try
        !           644: .P1
        !           645: ls /
        !           646: .P2
        !           647: You should get a response something like this
        !           648: (although again the details may be different):
        !           649: .P1
        !           650: bin
        !           651: dev
        !           652: etc
        !           653: lib
        !           654: tmp
        !           655: usr
        !           656: .P2
        !           657: This is a collection of the basic directories of files
        !           658: that
        !           659: the system
        !           660: knows about;
        !           661: we are at the root of the tree.
        !           662: .PP
        !           663: Now try
        !           664: .P1
        !           665: cat /usr/your\(hyname/junk
        !           666: .P2
        !           667: (if
        !           668: .UL junk
        !           669: is still around in your directory).
        !           670: The name
        !           671: .P1
        !           672: /usr/your\(hyname/junk
        !           673: .P2
        !           674: is called the
        !           675: .UL pathname
        !           676: of the file that
        !           677: you normally think of as ``junk''.
        !           678: ``Pathname'' has an obvious meaning:
        !           679: it represents the full name of the path you have to follow from the root
        !           680: through the tree of directories to get to a particular file.
        !           681: It is a universal rule in
        !           682: the
        !           683: .UC UNIX
        !           684: system
        !           685: that anywhere you can use an ordinary filename,
        !           686: you can use a pathname.
        !           687: .PP
        !           688: Here is a picture which may make this clearer:
        !           689: .P1 1
        !           690: .ft R
        !           691: .if t .vs 9p
        !           692: .if t .tr /\(sl
        !           693: .if t .tr ||
        !           694: .ce 100
        !           695: (root)
        !           696: / | \e
        !           697: /  |  \e
        !           698: /   |   \e
        !           699:   bin    etc    usr    dev   tmp 
        !           700: / | \e   / | \e   / | \e   / | \e   / | \e
        !           701: /  |  \e
        !           702: /   |   \e
        !           703: adam  eve   mary
        !           704: /        /   \e        \e
        !           705:              /     \e       junk
        !           706: junk temp
        !           707: .ce 0
        !           708: .br
        !           709: .tr //
        !           710: .P2
        !           711: .LP
        !           712: Notice that Mary's
        !           713: .UL junk
        !           714: is unrelated to Eve's.
        !           715: .PP
        !           716: This isn't too exciting if all the files of interest are in your own
        !           717: directory, but if you work with someone else
        !           718: or on several projects concurrently,
        !           719: it becomes handy indeed.
        !           720: For example, your friends can print your book by saying
        !           721: .P1
        !           722: pr /usr/your\(hyname/chap*
        !           723: .P2
        !           724: Similarly, you can find out what files your neighbor has
        !           725: by saying
        !           726: .P1
        !           727: ls /usr/neighbor\(hyname
        !           728: .P2
        !           729: or make your own copy of one of his files by
        !           730: .P1
        !           731: cp /usr/your\(hyneighbor/his\(hyfile yourfile
        !           732: .P2
        !           733: .PP
        !           734: If your neighbor doesn't want you poking around in his files,
        !           735: or vice versa,
        !           736: privacy can be arranged.
        !           737: Each file and directory has read-write-execute permissions for the owner,
        !           738: a group, and everyone else,
        !           739: which can be set
        !           740: to control access.
        !           741: See
        !           742: .UL ls (1)
        !           743: and
        !           744: .UL chmod (1)
        !           745: for details.
        !           746: As a matter of observed fact,
        !           747: most users most of the time find openness of more
        !           748: benefit than privacy.
        !           749: .PP
        !           750: As a final experiment with pathnames, try
        !           751: .P1
        !           752: ls /bin /usr/bin
        !           753: .P2
        !           754: Do some of the names look familiar?
        !           755: When you run a program, by typing its name after the prompt character,
        !           756: the system simply looks for a file of that name.
        !           757: It normally looks first in your directory
        !           758: (where it typically doesn't find it),
        !           759: then in
        !           760: .UL /bin
        !           761: and finally in
        !           762: .UL /usr/bin .
        !           763: There is nothing magic about commands like
        !           764: .UL cat
        !           765: or
        !           766: .UL ls ,
        !           767: except that they have been collected into a couple of places to be easy to find and administer.
        !           768: .PP
        !           769: What if you work regularly with someone else on common information
        !           770: in his directory?
        !           771: You could just log in as your friend each time you want to,
        !           772: but you can also say
        !           773: ``I want to work on his files instead of my own''.
        !           774: This is done by changing the directory that you are
        !           775: currently in:
        !           776: .P1
        !           777: cd /usr/your\(hyfriend
        !           778: .P2
        !           779: (On some systems,
        !           780: .UL cd
        !           781: is spelled
        !           782: .UL chdir .)
        !           783: Now when you use a filename in something like
        !           784: .UL cat
        !           785: or
        !           786: .UL pr ,
        !           787: it refers to the file in your friend's directory.
        !           788: Changing directories doesn't affect any permissions associated
        !           789: with a file \(em
        !           790: if you couldn't access a file from your own directory,
        !           791: changing to another directory won't alter that fact.
        !           792: Of course,
        !           793: if you forget what directory you're in, type
        !           794: .P1
        !           795: pwd
        !           796: .P2
        !           797: to find out.
        !           798: .PP
        !           799: It is usually convenient to arrange your own files
        !           800: so that all the files related to one thing are in a directory separate
        !           801: from other projects.
        !           802: For example, when you write your book, you might want to keep all the text
        !           803: in a directory called
        !           804: .UL book .
        !           805: So make one with
        !           806: .P1
        !           807: mkdir book
        !           808: .P2
        !           809: then go to it with
        !           810: .P1
        !           811: cd book
        !           812: .P2
        !           813: then start typing chapters.
        !           814: The book is now found in (presumably)
        !           815: .P1
        !           816: /usr/your\(hyname/book
        !           817: .P2
        !           818: To remove the directory
        !           819: .UL book ,
        !           820: type
        !           821: .P1
        !           822: rm book/*
        !           823: rmdir book
        !           824: .P2
        !           825: The first command removes all files from the directory;
        !           826: the second
        !           827: removes the empty directory.
        !           828: .PP
        !           829: You can go up one level in the tree of files 
        !           830: by saying
        !           831: .P1
        !           832: cd ..
        !           833: .P2
        !           834: .UL .. '' ``
        !           835: is the name of the parent of whatever directory you are currently in.
        !           836: For completeness,
        !           837: .UL . '' ``
        !           838: is an alternate name
        !           839: for the directory you are in.
        !           840: .SH
        !           841: Using Files instead of the Terminal
        !           842: .PP
        !           843: Most of the commands we have seen so far produce output
        !           844: on the terminal;
        !           845: some, like the editor, also take their input from the terminal.
        !           846: It is universal in
        !           847: .UC UNIX
        !           848: systems
        !           849: that the terminal can be replaced by a file
        !           850: for either or both of input and output.
        !           851: As one example,
        !           852: .P1
        !           853: ls
        !           854: .P2
        !           855: makes a list of files on your terminal.
        !           856: But if you say
        !           857: .P1
        !           858: ls >filelist
        !           859: .P2
        !           860: a list of your files will be placed in the file
        !           861: .UL filelist
        !           862: (which
        !           863: will be created if it doesn't already exist,
        !           864: or overwritten if it does).
        !           865: The symbol
        !           866: .UL >
        !           867: means ``put the output on the following file,
        !           868: rather than on the terminal.''
        !           869: Nothing is produced on the terminal.
        !           870: As another example, you could combine
        !           871: several files into one by capturing the output of
        !           872: .UL cat
        !           873: in a file:
        !           874: .P1
        !           875: cat f1 f2 f3 >temp
        !           876: .P2
        !           877: .PP
        !           878: The symbol
        !           879: .UL >>
        !           880: operates very much like
        !           881: .UL >
        !           882: does,
        !           883: except that it means
        !           884: ``add to the end of.''
        !           885: That is,
        !           886: .P1
        !           887: cat f1 f2 f3 >>temp
        !           888: .P2
        !           889: means to concatenate
        !           890: .UL f1 ,
        !           891: .UL f2 
        !           892: and
        !           893: .UL f3
        !           894: to the end of whatever is already in
        !           895: .UL temp ,
        !           896: instead of overwriting the existing contents.
        !           897: As with
        !           898: .UL > ,
        !           899: if 
        !           900: .UL temp
        !           901: doesn't exist, it will be created for you.
        !           902: .PP
        !           903: In a similar way, the symbol
        !           904: .UL <
        !           905: means to take the input
        !           906: for a program from the following file,
        !           907: instead of from the terminal.
        !           908: Thus, you could make up a script of commonly used editing commands
        !           909: and put them into a file called
        !           910: .UL script .
        !           911: Then you can run the script on a file by saying
        !           912: .P1
        !           913: ed file <script
        !           914: .P2
        !           915: As another example, you can use
        !           916: .UL ed
        !           917: to prepare a letter in file
        !           918: .UL let ,
        !           919: then send it to several people with
        !           920: .P1
        !           921: mail adam eve mary joe <let
        !           922: .P2
        !           923: .SH
        !           924: Pipes
        !           925: .PP
        !           926: One of the novel contributions of
        !           927: the
        !           928: .UC UNIX
        !           929: system
        !           930: is the idea of a
        !           931: .ul
        !           932: pipe.
        !           933: A pipe is simply a way to connect the output of one program
        !           934: to the input of another program,
        !           935: so the two run as a sequence of processes \(em
        !           936: a pipeline.
        !           937: .PP
        !           938: For example,
        !           939: .P1
        !           940: pr f g h
        !           941: .P2
        !           942: will print the files
        !           943: .UL f ,
        !           944: .UL g ,
        !           945: and
        !           946: .UL h ,
        !           947: beginning each on a new page.
        !           948: Suppose you want
        !           949: them run together instead.
        !           950: You could say
        !           951: .P1
        !           952: cat f g h >temp
        !           953: pr <temp
        !           954: rm temp
        !           955: .P2
        !           956: but this is more work than necessary.
        !           957: Clearly what we want is to take the output of
        !           958: .UL cat
        !           959: and
        !           960: connect it to the input of
        !           961: .UL pr .
        !           962: So let us use a pipe:
        !           963: .P1
        !           964: cat f g h | pr
        !           965: .P2
        !           966: The vertical bar 
        !           967: .UL |
        !           968: means to
        !           969: take the output from
        !           970: .UL cat ,
        !           971: which would normally have gone to the terminal,
        !           972: and put it into
        !           973: .UL pr
        !           974: to be neatly formatted.
        !           975: .PP
        !           976: There are many other examples of pipes.
        !           977: For example,
        !           978: .P1
        !           979: ls | pr -3
        !           980: .P2
        !           981: prints a list of your files in three columns.
        !           982: The program
        !           983: .UL wc
        !           984: counts the number of lines, words and characters in
        !           985: its input, and as we saw earlier,
        !           986: .UL who
        !           987: prints a list of currently-logged on people,
        !           988: one per line.
        !           989: Thus
        !           990: .P1
        !           991: who | wc
        !           992: .P2
        !           993: tells how many people are logged on.
        !           994: And of course
        !           995: .P1
        !           996: ls | wc
        !           997: .P2
        !           998: counts your files.
        !           999: .PP
        !          1000: Any program
        !          1001: that reads from the terminal
        !          1002: can read from a pipe instead;
        !          1003: any program that writes on the terminal can drive
        !          1004: a pipe.
        !          1005: You can have as many elements in a pipeline as you wish.
        !          1006: .PP
        !          1007: Many
        !          1008: .UC UNIX
        !          1009: programs are written so that they will take their input from one or more files
        !          1010: if file arguments are given;
        !          1011: if no arguments are given they will read from the terminal,
        !          1012: and thus can be used in pipelines.
        !          1013: .UL pr
        !          1014: is one example:
        !          1015: .P1
        !          1016: pr -3 a b c
        !          1017: .P2
        !          1018: prints files
        !          1019: .UL a ,
        !          1020: .UL b
        !          1021: and
        !          1022: .UL c
        !          1023: in order in three columns.
        !          1024: But in
        !          1025: .P1
        !          1026: cat a b c | pr -3
        !          1027: .P2
        !          1028: .UL pr
        !          1029: prints the information coming down the pipeline,
        !          1030: still in
        !          1031: three columns.
        !          1032: .SH
        !          1033: The Shell
        !          1034: .PP
        !          1035: We have already mentioned once or twice the mysterious
        !          1036: ``shell,''
        !          1037: which is in fact
        !          1038: .UL sh (1).\(dg
        !          1039: .FS
        !          1040: \(dg On Berkeley Unix systems, the usual shell for interactive use is the c shell, 
        !          1041: .UL csh(1).
        !          1042: .FE
        !          1043: The shell is the program that interprets what you type as
        !          1044: commands and arguments.
        !          1045: It also looks after translating
        !          1046: .UL * ,
        !          1047: etc.,
        !          1048: into lists of filenames,
        !          1049: and
        !          1050: .UL < ,
        !          1051: .UL > ,
        !          1052: and
        !          1053: .UL |
        !          1054: into changes of input and output streams.
        !          1055: .PP
        !          1056: The shell has other capabilities too.
        !          1057: For example, you can run two programs with one command line
        !          1058: by separating the commands with a semicolon;
        !          1059: the shell recognizes the semicolon and
        !          1060: breaks the line into two commands.
        !          1061: Thus
        !          1062: .P1
        !          1063: date; who
        !          1064: .P2
        !          1065: does both commands before returning with a prompt character.
        !          1066: .PP
        !          1067: You can also have more than one program running
        !          1068: .ul
        !          1069: simultaneously
        !          1070: if you wish.
        !          1071: For example, if you are doing something time-consuming,
        !          1072: like the editor script
        !          1073: of an earlier section,
        !          1074: and you don't want to wait around for the results before starting something else,
        !          1075: you can say
        !          1076: .P1
        !          1077: ed file <script &
        !          1078: .P2
        !          1079: The ampersand at the end of a command line
        !          1080: says ``start this command running,
        !          1081: then take further commands from the terminal immediately,''
        !          1082: that is,
        !          1083: don't wait for it to complete.
        !          1084: Thus the script will begin,
        !          1085: but you can do something else at the same time.
        !          1086: Of course, to keep the output from interfering
        !          1087: with what you're doing on the terminal,
        !          1088: it would be better to say
        !          1089: .P1
        !          1090: ed file <script >script.out &
        !          1091: .P2
        !          1092: which saves the output lines in a file
        !          1093: called
        !          1094: .UL script.out .
        !          1095: .PP
        !          1096: When you initiate a command with
        !          1097: .UL & ,
        !          1098: the system
        !          1099: replies with a number
        !          1100: called the process number,
        !          1101: which identifies the command in case you later want
        !          1102: to stop it.
        !          1103: If you do, you can say
        !          1104: .P1
        !          1105: kill process\(hynumber
        !          1106: .P2
        !          1107: If you forget the process number,
        !          1108: the command
        !          1109: .UL ps
        !          1110: will tell you about everything you have running.
        !          1111: (If you are desperate,
        !          1112: .UL kill\ 0
        !          1113: will kill all your processes.)
        !          1114: And if you're curious about other people,
        !          1115: .UL ps\ a
        !          1116: will tell you about
        !          1117: .ul
        !          1118: all
        !          1119: programs that are currently running.
        !          1120: .PP
        !          1121: You can say
        !          1122: .P1 1
        !          1123: (command\(hy1; command\(hy2; command\(hy3) &
        !          1124: .P2
        !          1125: to start three commands in the background,
        !          1126: or you can start a background pipeline with
        !          1127: .P1
        !          1128: command\(hy1 | command\(hy2 &
        !          1129: .P2
        !          1130: .PP
        !          1131: Just as you can tell the editor
        !          1132: or some similar program to take its input
        !          1133: from a file instead of from the terminal,
        !          1134: you can tell the shell to read a file
        !          1135: to get commands.
        !          1136: (Why not? The shell, after all, is just a program,
        !          1137: albeit a clever one.)
        !          1138: For instance, suppose you want to set tabs on
        !          1139: your terminal, and find out the date
        !          1140: and who's on the system every time you log in.
        !          1141: Then you can put the three necessary commands
        !          1142: .UL tabs , (
        !          1143: .UL date ,
        !          1144: .UL who )
        !          1145: into a file, let's call it
        !          1146: .UL startup ,
        !          1147: and then run it with
        !          1148: .P1
        !          1149: sh startup
        !          1150: .P2
        !          1151: This says to run the shell with the file
        !          1152: .UL startup
        !          1153: as input.
        !          1154: The effect is as if you had typed 
        !          1155: the contents of
        !          1156: .UL startup
        !          1157: on the terminal.
        !          1158: .PP
        !          1159: If this is to be a regular thing,
        !          1160: you can eliminate the 
        !          1161: need to type
        !          1162: .UL sh :
        !          1163: simply type, once only, the command
        !          1164: .P1
        !          1165: chmod +x startup
        !          1166: .P2
        !          1167: and thereafter you need only say
        !          1168: .P1
        !          1169: startup
        !          1170: .P2
        !          1171: to run the sequence of commands.
        !          1172: The
        !          1173: .UL chmod (1)
        !          1174: command marks the file executable;
        !          1175: the shell recognizes this and runs it as a sequence of commands.
        !          1176: .PP
        !          1177: If you want 
        !          1178: .UL startup
        !          1179: to run automatically every time you log in,
        !          1180: create a file in your login directory called
        !          1181: .UL .profile ,
        !          1182: and place in it the line
        !          1183: .UL startup .
        !          1184: When the shell first gains control when you log in,
        !          1185: it looks for the 
        !          1186: .UL .profile
        !          1187: file and does whatever commands it finds in it.\(dg
        !          1188: .FS
        !          1189: \(dg The c shell instead reads a file called 
        !          1190: .UL .login
        !          1191: .
        !          1192: .FE
        !          1193: We'll get back to the shell in the section
        !          1194: on programming.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.