home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 4 / DATAFILE_PDCD4.iso / unix / riscbsd / 1_1_contri / usd / 01_begin / u2 < prev    next >
Encoding:
Text File  |  1986-05-22  |  24.0 KB  |  1,195 lines

  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.
  1195.