|
|
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.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.