home *** CD-ROM | disk | FTP | other *** search
/ io Programmo 11 / IOPROG_11.ISO / docs / vms-to~1 < prev    next >
Encoding:
Text File  |  1997-03-29  |  43.7 KB  |  1,196 lines

  1.   From VMS to Linux HOWTO
  2.   By Guido Gonzato, <guido@ibogfs.df.unibo.it>
  3.   v0.1beta, 18 March 1997
  4.  
  5.   This HOWTO is aimed at all those who have been using VMS and now need
  6.   or want to switch to Linux, the free Unix clone. The transition is
  7.   made (hopefully) painless with a step-to-step comparison between com¡
  8.   mands and available tools.
  9.  
  10.   1.  Introduction
  11.  
  12.   1.1.  Why Linux?
  13.  
  14.   You've heard that Unix is difficult and balk at the prospect of
  15.   leaving VMS, right? Don't worry. Linux, one of the finest Unix clones,
  16.   is not more difficult to use than VMS (actually, I find it much
  17.   easier), and it's much more powerful and versatile.
  18.  
  19.   Linux and VMS accomplish essentially the same tasks, but Linux' tools
  20.   are superior, its syntax is much more concise, and has some features
  21.   missing in VMS that help save a lot of time. (You'll often hear that
  22.   VMS and Unix have a different `philosophy'.) Moreover, Linux is
  23.   available for PCs while VMS is not, and a Pentium-based Linux box can
  24.   outperform a VAX. I guess this is the reason why you want to swap VMS
  25.   to Linux.
  26.  
  27.   I imagine you're a university researcher or a student, and that you
  28.   use VMS for the following everyday tasks:
  29.  
  30.   ╖  writing papers with TeX/LaTeX;
  31.  
  32.   ╖  programming in FORTRAN;
  33.  
  34.   ╖  doing some graphics;
  35.  
  36.   ╖  using Internet services;
  37.  
  38.   ╖  et cetera.
  39.  
  40.   In the following sections I'm going to explain to you how to do these
  41.   tasks under Linux, exploiting your experience with VMS. Prerequisites:
  42.  
  43.   ╖  Linux and X Window System are properly installed;
  44.  
  45.   ╖  there's a system administrator to take care of the technical
  46.      details (please get help from them, not from me ;-) ;
  47.  
  48.   ╖  your shell---the equivalent of DCL---is bash (ask your sysadm).
  49.  
  50.   Please note that this HOWTO is not enough to acquaint you fully with
  51.   Linux: it only contains the bare essential to get you started. You
  52.   should learn more about Linux to make the most of it (advanced bash
  53.   features, programming, regular expressions...). From now on, RMP means
  54.   `please read the man pages for further details'. The man pages are the
  55.   equivalent of the command HELP.
  56.  
  57.   The Linux Documentation Project documents, available on
  58.   sunsite.unc.edu:/pub/Linux/docs/LDP, are an important source of
  59.   information. Get Matt Welsh's ``Linux Installation and Getting
  60.   Started'' and/or Larry Greenfield's ``Linux User Guide''---they're
  61.   invaluable for the novice user.
  62.  
  63.   And now, go ahead.
  64.  
  65.   1.2.  Comparing Commands and Files
  66.  
  67.   This table attempts to compare VMS' and Linux' most used commands
  68.   (please keep in mind that the syntax is often very different). For
  69.   more details, refer to the following sections.
  70.  
  71.   VMS                             Linux                   Notes
  72.   ------------------------------------------------------------------------------
  73.  
  74.   @COMMAND                        command                 must be executable
  75.   COPY file1 file2                cp file1 file2
  76.   CREATE/DIR [.dirname]           mkdir dirname           only one at a time
  77.   CREATE/DIR [.dir1.dir2]         mkdirhier dir/name
  78.   DELETE filename                 rm filename
  79.   DIFF file1 file2                diff file1 file2
  80.   DIRECTORY                       ls
  81.   DIRECTORY/FULL                  ls -al
  82.   EDIT filename                   vi filename,            you won't like it
  83.                                   emacs filename,         EDT compatible
  84.                                   jed filename            ditto---my favourite
  85.   FORTRAN prog.for                g77 prog.f,             no need to do LINK
  86.                                   f77 prog.f,
  87.                                   fort77 prog.f
  88.   HELP command                    man command             must specify `command'
  89.                                   info command            ditto
  90.   LATEX file.tex                  latex file.tex
  91.   LOGIN.COM                       .profile,               `hidden' file
  92.                                   .bashrc                 ditto
  93.   LOGOUT.COM                      .bash_logout            ditto
  94.   MAIL                            mail,                   crude
  95.                                   elm,                    much better
  96.                                   pine                    better still
  97.   PRINT file.ps                   lpr file.ps
  98.   PRINT/QUEUE=laser file.ps       lpr -Plaser file.ps
  99.   PHONE user                      talk user
  100.   RENAME file1 file2              mv file1 file2          not for multiple files
  101.   RUN progname                    progname
  102.   SEARCH file "pattern"           grep pattern file
  103.   SET DEFAULT [-]                 cd ..
  104.   SET DEFAULT [.dir.name]         cd dir/name
  105.   SET HOST hostname               telnet hostname,
  106.                                   rlogin hostname
  107.   SET FILE/OWNER_UIC=joe          chown joe file          completely different
  108.   SET NOBROADCAST                 mesg
  109.   SET PASSWORD                    passwd
  110.   SET PROT=(perm) file            chmod perm file         ditto
  111.   SET TERMINAL                    export TERM=            different syntax
  112.   SHOW DEFAULT                    pwd
  113.   SHOW DEVICE                     du, df
  114.   SHOW ENTRY                      lpq
  115.   SHOW PROCESS                    ps -ax
  116.   SHOW QUEUE                      lpq
  117.   SHOW SYSTEM                     top
  118.   SHOW TIME                       date
  119.   SHOW USERS                      w
  120.   STOP                            kill
  121.   STOP/QUEUE                      kill,                   for processes
  122.                                   lprm                    for printing queues
  123.   SUBMIT command                  command &
  124.   SUBMIT/AFTER=time command       at time command
  125.   TEX file.tex                    tex file.tex
  126.   TYPE/PAGE file                  more file
  127.                                   less file               much better
  128.  
  129.   But of course it's not only a matter of different command names. Read
  130.   on.
  131.  
  132.   2.  Short Intro
  133.  
  134.   This is what you absolutely need to know before logging in the first
  135.   time. Relax, it's not much.
  136.  
  137.   2.1.  Files
  138.  
  139.   ╖  Under VMS filenames are in the form filename.extension.version;.
  140.      Under Linux, the version number doesn't exist (big limitation, I
  141.      know); the filename has normally a limit of 255 characters and can
  142.      have as many dots as you like. Example of filename:
  143.      This.is_a_FILEname.txt.
  144.  
  145.   ╖  Linux distinguishes between upper case and lower case characters:
  146.      FILENAME.txt and filename.txt are two different files; ls is a
  147.      command, LS is not.
  148.  
  149.   ╖  A filename starting with a dot is a `hidden' file (that is, it
  150.      won't normally show up in dir listings), while filenames ending
  151.      with a tilde '~' represent backup files.
  152.  
  153.   Now, a table to sum up how to translate commands from VMS to Linux:
  154.  
  155.        VMS                                     Linux
  156.        ---------------------------------------------------------------------
  157.  
  158.        $ COPY file1.txt; file2.txt;            $ cp file1.txt file2.txt
  159.        $ COPY [.dir]file.txt;1 []              $ cp dir/file.txt .
  160.        $ COPY [.dir]file.txt;1 [-]             $ cp dir/file.txt ..
  161.        $ DELETE *.dat.*                        $ rm *dat
  162.        $ DIFF file1 file2                      $ diff file1 file2
  163.        $ PRINT file                            $ lpr file
  164.        $ PRINT/queue=queuename file            $ lpr -Pprintername file
  165.        $ SEARCH *.tex.* "geology"              $ grep geology *tex
  166.  
  167.   For other examples involving directories, see below; for details about
  168.   protections, ownership, and advanced topics, see Section ``Advanced
  169.   Topics''.
  170.  
  171.   2.2.  Directories
  172.  
  173.   ╖  Within the same node and device, directories names under VMS are in
  174.      the form [top.dir.subdir]; under Linux, /top/dir/subdir/.  On the
  175.      top of the directory tree there's a so-called `root directory'
  176.      called /; underneath there are other directories like /bin, /usr,
  177.      /tmp, /etc, and others.
  178.  
  179.   ╖  The directory /home contains the so-called users' `home
  180.      directories': e.g. /home/guido, /home/warner, and so on.  When a
  181.      user logs in, they start working in their home dir; it's the
  182.      equivalent of SYS$LOGIN. There's a shortcut for the home directory:
  183.      the tilde '~'. So, cd ~/tmp is the same as, say, cd
  184.      /home/guido/tmp.
  185.  
  186.   ╖  Directory names follow the same rules as file names. Furthermore,
  187.      each directory has two special entries: one is . and refers to the
  188.      directory itself (like []), and .. that refers to the parent
  189.      directory (like [-]).
  190.  
  191.   And now for some other examples:
  192.  
  193.        DOS                                     Linux
  194.        ---------------------------------------------------------------------
  195.  
  196.        $ CREATE/DIR [.dirname]                 $ mkdir dirname
  197.        $ CREATE/DIR [.dir1.dir2.dir3]          $ mkdirhier dir1/dir2/dir3
  198.           n/a                                  $ rmdir dirname
  199.                                                (if dirname is empty)
  200.                                                $ rm -R dirname
  201.        $ DIRECTORY                             $ ls
  202.        $ SET DEF [-]                           $ cd ..
  203.        $ SET DEF [top.dir.subdir]              $ cd /top/dir/subdir
  204.        $ SET DEF [.dir.subdir]                 $ cd dir/subdir
  205.        $ SHOW DEF                              $ pwd
  206.  
  207.   For protections, ownership, and advanced topics, see Section
  208.   ``Advanced Topics''.
  209.  
  210.   2.3.  Programs
  211.  
  212.   ╖  Commands, compiled programs, and shell scripts (VMS' `command
  213.      files') don't have compulsory extensions like .EXE or .COM and can
  214.      be called whatever you like. Executable files are marked by an
  215.      asterisk '*' when you issue ls -F.
  216.  
  217.   ╖  To run an executable file, just type its name (no RUN PROGRAM.EXE
  218.      or @COMMAND). Caveat: it's essential that the file be located in a
  219.      directory included in the path, which is a list of directories.
  220.      Typically, the path includes dirs like /bin, /usr/bin,
  221.      /usr/X11R6/bin, and others. If you write your own programs, put
  222.      them in a directory you have included in the path (see how in
  223.      Section ``Configuring''). As an alternative, you may run a program
  224.      specifying its complete path: e.g., /home/guido/data/myprog; or
  225.      ./myprog, if the current directory isn't in the path.
  226.  
  227.   ╖  Command switches are obtained with /OPTION= under VMS, and with
  228.      -switch or --switch under Linux, where switch is a letter, more
  229.      letters combined, or a word. In particular, the switch -R
  230.      (recursive) of many Linux commands performs the same action as
  231.      [...]  under VMS;
  232.  
  233.   ╖  You can issue several commands on the command line:
  234.  
  235.        $ command1 ; command2 ; ... ; commandn
  236.  
  237.   ╖  Most of the flexibility of Linux comes from two features awkwardly
  238.      implemented or missing in VMS: I/O redirection and piping.
  239.      Redirection is a side feature under VMS (remember the switch
  240.      /OUTPUT= of many commands), but has a key role under Unix. A
  241.      typical example:
  242.  
  243.        $ myprog < datafile | filter_1 | filter_2 >> result.dat 2> errors.log &
  244.  
  245.   which means: the program myprog gets its input from the file datafile
  246.   (via <), its output is piped (via |) to the program filter_1 that
  247.   takes it as input and processes it, the resulting output is piped
  248.   again to filter_2 for further working, the final output is appended
  249.   (via >>) to the file result.dat, error messages are redirected (via
  250.   2>) onto the file errors.log. All this in background (& at the end of
  251.   the command line). More about this in Section ``Examples''.
  252.  
  253.   For multitasking, `queues', and the like, see Section ``Advanced
  254.   Topics''.
  255.  
  256.   2.4.  Quick Tour
  257.  
  258.   Now we are ready do try Linux out. Enter your login name and password
  259.   exactly as they are. For example, if your login name and password are
  260.   john and My_PassWd, don't type John or my_passwd. Remember that Unix
  261.   distinguishes between capital and small letters.
  262.  
  263.   Once you've logged in, you'll see a prompt; chances are it'll be
  264.   something like machinename:$. If you want to change the prompt or make
  265.   some programs start automatically, you'll have to edit a `hidden' file
  266.   called .profile or .bash_profile (see example in Section
  267.   ``Configuring''). This is the equivalent of LOGIN.COM.
  268.  
  269.   Pressing ALT-F1, ALT-F2, ... ALT-F6 switches between `virtual
  270.   consoles'.  When one VC is busy with a full-screen application, you
  271.   can flip over to another and continue to work. Try and log in to
  272.   another VC.
  273.  
  274.   Now you may want to start X Window System (from now on, X). Type the
  275.   command startx and wait a few seconds to find yourself in a graphic
  276.   environment; most likely you'll see an open xterm or equivalent
  277.   terminal emulator, and possibly a button bar. (It depends on how your
  278.   sysadm configured your Linux box.) Left click on the desktop to see a
  279.   menu.
  280.  
  281.   While in X, to access the text mode (`console') sessions press CTRL-
  282.   ALT-F1 ... CTRL-ALT-F6. Try it. When in console, go back to X pressing
  283.   ALT-F7. To quit X, follow the menu instructions or press CTRL-ALT-BS.
  284.  
  285.   Type the following command to list your home dir contents, including
  286.   the hidden files:
  287.  
  288.        $ ls -al
  289.  
  290.   Press SHIFT-PAG UP to back-scroll. Now get help about the ls command
  291.   typing:
  292.  
  293.        $ man ls
  294.  
  295.   pressing 'q' to exit. To end the tour, type exit to quit your session.
  296.   If now you want to turn off your PC, press CTRL-ALT-DEL and wait a few
  297.   seconds (never switch off the PC while in Linux! You could damage the
  298.   filesystem.)
  299.  
  300.   If you think you're ready to work, go ahead, but if I were you I'd
  301.   jump to Section ``Advanced Topics''.
  302.  
  303.   3.  Editing Files
  304.  
  305.   Linux doesn't have EDT, but there are scores of editors available. The
  306.   only one that's guaranteed to be included in every Unix version is
  307.   vi---forget it, your sysadm must have installed something better.
  308.   Probably the most popular editor is emacs, which can emulate EDT to a
  309.   certain degree; jed is another editor that provides EDT emulation.
  310.  
  311.   These two editors are particularly useful for editing program sources,
  312.   since they have two features unknown to EDT: syntax hilighting and
  313.   automatic indentation. Moreover, you can compile your programs from
  314.   within the editor (command ESC-X compile); in case of a syntax error,
  315.   the cursor will be positioned on the line where the error is. I bet
  316.   that you'll never want to use the true-blue EDT again.
  317.  
  318.   If you have emacs: start it, then type ESC-X edt-emulation-on.
  319.   (Pressing ALT-X or ESC-X is emacs' way of issuing commands, like EDT's
  320.   CTRL-Z.) From now on, emacs acts like EDT apart from a few commands.
  321.   Differences:
  322.  
  323.   ╖  don't press CTRL-Z to issue commands (if you did, you stopped
  324.      emacs. Press fg to resume it);
  325.  
  326.   ╖  there's an extensive on-line help. Press CTRL-H ?, or CTRL-H T to
  327.      start a tutorial;
  328.  
  329.   ╖  to save a file, press CTRL-X CTRL-S;
  330.  
  331.   ╖  to exit, press CTRL-X CTRL-C;
  332.  
  333.   ╖  to insert a new file in a buffer, press CTRL-X CTRL-F, then CTRL-X
  334.      B to switch among buffers.
  335.  
  336.   If you have jed: ask your sysadm to configure jed properly.  Emulation
  337.   is already on when you start it; use the normal keypad keys, and press
  338.   CTRL-H CTRL-H or CTRL-? to get help. Commands are issued in the same
  339.   way as emacs'. In addition, there are some handy key bindings missing
  340.   in the original EDT; key bindings can also be tailored to your own
  341.   taste (ask your sysadm).
  342.  
  343.   In alternative, you may use another editor with a completely different
  344.   interface. emacs in native mode is an obvious choice; another popular
  345.   editor is joe, which can emulate other editors like emacs itself
  346.   (being even easier) or the DOS editor. Invoke the editor as jmacs or
  347.   jstar and press, respectively, CTRL-X H or CTRL-J to get online help.
  348.   emacs and jed are much more powerful than good ol' EDT.
  349.  
  350.   4.  TeXing
  351.  
  352.   TeX and LaTeX are identical to their VMS counterparts (they're only
  353.   quicker :-), but the tools to handle the .dvi and .ps files are much
  354.   better:
  355.  
  356.   ╖  to run a TeX file through TeX, do as usual: tex file.tex;
  357.  
  358.   ╖  to turn a .dvi file into a .ps file, type dvips -o filename.ps
  359.      filename.dvi;
  360.  
  361.   ╖  to visualize a .dvi file, type within an X session: xdvi
  362.      filename.dvi &. Click on the page to magnify. This program is
  363.      smart: if you edit and run TeX producing newer versions of the .dvi
  364.      file, xdvi will update it automatically;
  365.  
  366.   ╖  to visualize a .ps file, type within an X session: ghostview
  367.      filename.ps &. Click on the page to magnify. The whole document or
  368.      selected pages can be printed.
  369.  
  370.   ╖  to print the .ps: usually the command lpr mypaper.ps will do, but
  371.      if the postscript printer is called, say, `ps' (ask your sysadm)
  372.      you'll do: lpr -Pps mypaper.ps. For more information about printing
  373.      queues, go to Section ``Printing Queues''.
  374.  
  375.   5.  Programming
  376.  
  377.   Programming under Linux is much better: there are lots of tools that
  378.   make programming easier and quicker. For instance, the drudgery of
  379.   editing-saving-compiling-re-editing can be cut short by using editors
  380.   like emacs or jed: the compiler can be launched from within the
  381.   editor, and if errors are detected the cursor will be moved on the
  382.   line that caused the error. Not to mention automatic indentation and
  383.   syntax highlighting...
  384.  
  385.   5.1.  FORTRAN
  386.  
  387.   Not substantial differences here, but note that at the time of writing
  388.   the available (free) compilers are not 100% compatible with VMS';
  389.   expect some minor quirks. (It's actually the VMS compiler which is not
  390.   fully ANSI.)  See /usr/doc/g77/DOC or /usr/doc/f2c/f2c.ps for details.
  391.  
  392.   Your sysadm has installed a native compiler called g77 (as of version
  393.   0.5.20, still not perfect) or possibly the FORTRAN to C translator,
  394.   f2c, and one of the frontends that make it mimick a native compiler.
  395.   In my experience, the package yaf77 is the one that provides best
  396.   results.
  397.  
  398.   To compile a fortran program with g77, edit the source, save it with
  399.   extension .f, then do:
  400.  
  401.   $ g77 myprog.f
  402.  
  403.   which creates by default an executable called a.out (you don't have to
  404.   link anything). To give the executable a different name and do some
  405.   optimisation:
  406.  
  407.        $ g77 -O2 -o myprog myprog.f
  408.  
  409.   Beware of optimisations! Ask your sysadm to read the documentation
  410.   that comes with the compiler and tell you if there are any problems.
  411.  
  412.   To compile a subroutine:
  413.  
  414.        $ g77 -c mysub.f
  415.  
  416.   This creates a file mysub.o. To link this subroutine in a program,
  417.   you'll do
  418.  
  419.        $ g77 -o myprog myprog.f mysub.o
  420.  
  421.   Finally, to link an external library called, say, libdummy.so:
  422.  
  423.        $ g77 -o myprog myprog.f -ldummy
  424.  
  425.   If you have f2c, you only have to use f77 or fort77 instead of g77.
  426.  
  427.   Another useful programming tool is make, described below.
  428.  
  429.   5.2.  Using make
  430.  
  431.   The utility make is a tool to handle the compilation of programs that
  432.   are split into several source files.
  433.  
  434.   Let's suppose you have source files containing your routines,
  435.   file_1.f, file_2.f, file_3.f, and a source file of the main program
  436.   that uses the routines, myprog.f. If you compile your program
  437.   manually, whenever you modify one of the source files you have to
  438.   figure out which file depends on which, which file to recompile first,
  439.   and so on.
  440.  
  441.   Instead of getting mad, you can write a so-called `makefile'. This is
  442.   a text file containing the dependencies between your sources: when one
  443.   is modified, only the ones that depend on the modified file will be
  444.   recompiled.
  445.  
  446.   In our example, you'd write a makefile like this:
  447.  
  448.   ______________________________________________________________________
  449.  
  450.   # This is makefile
  451.   # Press the <TAB> key where you see <TAB>!
  452.  
  453.   myprog: myprog.o file_1.o file_2.o file_3.o
  454.   <TAB>g77 -o myprog myprog.o file_1.o file_2.o file_3.o
  455.   # myprog depends on four object files
  456.  
  457.   myprog.o: myprog.f
  458.   <TAB>g77 -c myprog.f
  459.   # myprog.o depends on its source file
  460.  
  461.   file_1.o: file_1.f
  462.   <TAB>g77 -c file_1.f
  463.   # file_1.o depends on its source file
  464.  
  465.   file_2.o: file_2.f file_1.o
  466.   <TAB>g77 -c file_2.f file_1.o
  467.   # file_2.o depends on its source file and an object file
  468.  
  469.   file_3.o: file_3.f file_2.o
  470.   <TAB>g77 -c file_3.f file_2.o
  471.   # file_3.o depends on its source file and an object file
  472.  
  473.   # end of makefile.
  474.   ______________________________________________________________________
  475.  
  476.   Save this file as makefile and type
  477.  
  478.        $ make
  479.  
  480.   to compile your program; alternatively, save it as myprog.mak and type
  481.  
  482.        $ make -f myprog.mak
  483.  
  484.   And of course, RMP.
  485.  
  486.   5.3.  Shell Scripts
  487.  
  488.   Shell scripts are the equivalent of VMS' command files, and are much
  489.   more powerful.
  490.  
  491.   To write a script, all you have to do is write a standard ASCII file
  492.   containing the commands, save it, then make it executable with the
  493.   command chmod +x <scriptfile>. To execute it, type its name.
  494.  
  495.   Writing scripts under bash is such a vast subject it would require a
  496.   book by itself, and I will not delve into the topic any further. I'll
  497.   just give you a more-or-less comprehensive and (hopefully) useful
  498.   examples from which you can extract some basic rules.
  499.  
  500.   EXAMPLE: sample.sh
  501.  
  502.   ______________________________________________________________________
  503.  
  504.   #!/bin/sh
  505.   # sample.sh
  506.   # I am a comment
  507.   # don't change the first line, it must be there
  508.   echo "This system is: `uname -a`" # use the output of the command
  509.   echo "My name is $0" # built-in variables
  510.   echo "You gave me the following $# parameters: "$*
  511.   echo "First parameter is: "$1
  512.   echo -n "What's your name? " ; read your_name
  513.   echo notice the difference: "hi $your_name" # quoting with "
  514.   echo notice the difference: 'hi $your_name' # quoting with '
  515.   DIRS=0 ; FILES=0
  516.   for file in `ls .` ; do
  517.     if [ -d ${file} ] ; then # if file is a directory
  518.       DIRS=`expr $DIRS + 1`  # DIRS = DIRS + 1
  519.     elif [ -f ${file} ] ; then
  520.       FILES=`expr $FILES + 1`
  521.     fi
  522.     case ${file} in
  523.       *.gif|*jpg) echo "${file}: graphic file" ;;
  524.       *.txt|*.tex) echo "${file}: text file" ;;
  525.       *.c|*.f|*.for) echo "${file}: source file" ;;
  526.       *) echo "${file}: generic file" ;;
  527.     esac
  528.   done
  529.   echo "there are ${DIRS} directories and ${FILES} files"
  530.   ls | grep "ZxY--!!!WKW"
  531.   if [ $? != 0 ] ; then # exit code of last command
  532.     echo "ZxY--!!!WKW not found"
  533.   fi
  534.   echo "enough... type 'man bash' if you want more info."
  535.   ______________________________________________________________________
  536.  
  537.   5.4.  C
  538.  
  539.   Unlike VMS, Linux is the best environment to program in C. Taken for
  540.   granted that you know C, here are a couple of guidelines. To compile
  541.   your standard hello.c you'll use the gcc compiler, which comes as part
  542.   of Linux and has the same syntax as g77:
  543.  
  544.        $ gcc -O2 -o hello hello.c
  545.  
  546.   To link a library to a program, add the switch -l<libname>. For
  547.   example, to link the math library and optimize do
  548.  
  549.        $ gcc -O2 -o mathprog mathprog.c -lm
  550.  
  551.   (The -l<libname> switch forces gcc to link the library
  552.   /usr/lib/lib<libname>.a; so -lm links /usr/lib/libm.a).
  553.  
  554.   When your program is made of several source files, you'll need to use
  555.   the utility make described above. Just use gcc and C source files in
  556.   the makefile.
  557.  
  558.   You can invoke some help about the C functions, that are covered by
  559.   man pages, section 3; for example,
  560.  
  561.        $ man 3 printf
  562.  
  563.   There are lots of libraries available out there; among the first
  564.   you'll want to use are ncurses, to handle text mode effects, and
  565.   svgalib, to do graphics.
  566.  
  567.   6.  Graphics
  568.  
  569.   Among the scores of graphic packages available, gnuplot stands out for
  570.   its power and ease of use. Go to X and type gnuplot, and have two
  571.   sample data files ready: 2D-data.dat (two data per line), and 3D-
  572.   data.dat (three data per line).
  573.  
  574.   Examples of 2-D graphs:
  575.  
  576.        gnuplot> set title "my first graph"
  577.        gnuplot> plot '2D-data.dat'
  578.        gnuplot> plot '2D-data.dat' with linespoints
  579.        gnuplot> plot '2D-data.dat', sin(x)
  580.        gnuplot> plot [-5:10] '2D-data.dat'
  581.  
  582.   Example of 3-D graphs (each `row' of X values is followed by a blank
  583.   line):
  584.  
  585.        gnuplot> set parametric ; set hidden3d ; set contour
  586.        gnuplot> splot '3D-data.dat' using 1:2:3 with linespoints
  587.  
  588.   A single-column datafile (e.g., a time series) can also be plotted as
  589.   a 2-D graph:
  590.  
  591.        gnuplot> plot [-5:15] '2D-data-1col.dat' with linespoints
  592.  
  593.   or as a 3-D graph (blank lines in the datafile, as above):
  594.  
  595.        gnuplot> set noparametric ; set hidden3d
  596.        gnuplot> splot '3D-data-1col.dat' using 1 with linespoints
  597.  
  598.   To print a graph: if the command to print on your Postscript printer
  599.   is lpr -Pps file.ps, issue:
  600.  
  601.        gnuplot> set term post
  602.        gnuplot> set out '| lpr -Pps'
  603.        gnuplot> replot
  604.  
  605.   then type set term x11 to restore. Don't get confused---the last print
  606.   will be done only when you quit gnuplot.
  607.  
  608.   For more info, type help or see the examples in directory
  609.   /usr/lib/gnuplot/demos/, if you have it.
  610.  
  611.   7.  Mail and Internet Tools
  612.  
  613.   Since Internet was born on Unix machines, you find plenty of nice and
  614.   easy-to-use applications under Linux. Here are just some:
  615.  
  616.   ╖  Mail: use elm or pine to handle your email; both programs have on-
  617.      line help. For short messages, you could use mail, as in mail -s
  618.      "hello" user@somewhere < msg.txt. You may like programs like xmail
  619.      or some such.
  620.  
  621.   ╖  Newsgroups: use tin, very intuitive and self-explanatory.
  622.  
  623.   ╖  ftp: apart from the usual character-based ftp, ask your sysadm to
  624.      install a graphical ftp client like xftp.
  625.  
  626.   ╖  WWW: the ubiquitous netscape, or xmosaic, chimera and arena are
  627.      graphical web browsers; a character-based one is lynx, quick and
  628.      effective.
  629.  
  630.   8.  Advanced Topics
  631.  
  632.   Here the game gets tough. Learn these features, then you'll be ready
  633.   to say that you `know something about Linux' ;-)
  634.  
  635.   8.1.  Permissions and Ownership
  636.  
  637.   Files and directories have permissions (`protections') and ownership,
  638.   just like under VMS. If you can't run a program, or can't modify a
  639.   file, or can't access a directory, it's because you don't have the
  640.   permission to do so, and/or because the file doesn't belong to you.
  641.   Let's have a look at the following example:
  642.  
  643.        $ ls -l /bin/ls
  644.        -rwxr-xr-x   1 root     bin         27281 Aug 15  1995 /bin/ls*
  645.  
  646.   The first field shows the permissions of the file ls (owner root,
  647.   group bin). There are three types of ownership: owner, group, and
  648.   others (similar to VMS owner, group, world), and three types of
  649.   permissions: read, write (and delete), and execute.
  650.  
  651.   From left to right, - is the file type (- = ordinary file, d =
  652.   directory, l = link, etc); rwx are the permissions for the file owner
  653.   (read, write, execute); r-x are the permissions for the group of the
  654.   file owner (read, execute); r-x are the permissions for all other
  655.   users (read, execute).
  656.  
  657.   To change a file's permissions:
  658.  
  659.        $ chmod <whoXperm> <file>
  660.  
  661.   where who is u (user, that is owner), g (group), o (other), X is
  662.   either + or -, perm is r (read), w (write), or x (execute). Examples:
  663.  
  664.        $ chmod u+x file
  665.  
  666.   this sets the execute permission for the file owner. Shortcut: chmod
  667.   +x file.
  668.  
  669.        $ chmod go-wx file
  670.  
  671.   this removes write and execute permission for everyone except the
  672.   owner.
  673.  
  674.        $ chmod ugo+rwx file
  675.  
  676.   this gives everyone read, write, and execute permission.
  677.  
  678.   A shorter way to refer to permissions is with numbers: rwxr-xr-x can
  679.   be expressed as 755 (every letter corresponds to a bit: --- is 0, --x
  680.   is 1, -w- is 2...).
  681.  
  682.   For a directory, rx means that you can cd to that directory, and w
  683.   means that you can delete a file in the directory (according to the
  684.   file's permissions, of course), or the directory itself. All this is
  685.   only part of the matter---RMP.
  686.  
  687.   To change a file's owner:
  688.  
  689.        $ chown username file
  690.  
  691.   To sum up, a table:
  692.  
  693.        VMS                             Linux                   Notes
  694.        ------------------------------------------------------------------------------
  695.  
  696.        SET PROT=(O:RW) file.txt        $ chmod u+rw file.txt
  697.                                        $ chmod 600 file.txt
  698.        SET PROT=(O:RWED,W) file        $ chmod u+rwx file
  699.                                        $ chmod 700 file
  700.        SET PROT=(O:RWED,W:RE) file     $ chmod 755 file
  701.        SET PROT=(O:RW,G:RW,W) file     $ chmod 660 file
  702.        SET FILE/OWNER_UIC=JOE file     $ chown joe file
  703.        SET DIR/OWNER_UIC=JOE [.dir]    $ chown joe dir/
  704.  
  705.   8.2.  Multitasking: Processes and Jobs
  706.  
  707.   More about running programs. There are no `batch queues' under Linux
  708.   as you're used to; multitasking is handled very differently. Again,
  709.   this is what the typical command line looks like:
  710.  
  711.        $ command -s1 -s2 ... -sn par1 par2 ... parn < input > output &
  712.  
  713.   where -s1, ..., -sn are the program switches, par1, ..., parn are the
  714.   program parameters.
  715.  
  716.   Now let's see how multitasking works. Programs, running in foreground
  717.   or background, are called `processes'.
  718.  
  719.   ╖  To launch a process in background:
  720.  
  721.        $ progname [-switches] [parameters] [< input] [> output] &
  722.        [1] 234
  723.  
  724.   the shell tells you what the `job number' (the first digit; see below)
  725.   and PID (Process IDentifier) of the process are. Each process is iden¡
  726.   tified by its PID.
  727.  
  728.   ╖  To see how many processes there are:
  729.  
  730.        $ ps -ax
  731.  
  732.   This will output a list of currently running processes.
  733.  
  734.   ╖  To kill a process:
  735.  
  736.        $ kill <PID>
  737.  
  738.   You may need to kill a process when you don't know how to quit it the
  739.   right way... ;-). Sometimes, a process will only be killed by one of
  740.   the following:
  741.  
  742.        $ kill -15 <PID>
  743.        $ kill -9 <PID>
  744.  
  745.   In addition to this, the shell allows you to stop or temporarily
  746.   suspend a process, send a process to background, and bring a process
  747.   from background to foreground. In this context, processes are called
  748.   `jobs'.
  749.  
  750.   ╖  To see how many jobs there are:
  751.  
  752.        $ jobs
  753.  
  754.   jobs are identified by the numbers the shell gives them, not by their
  755.   PID.
  756.  
  757.   ╖  To stop a process running in foreground:
  758.  
  759.        $ CTRL-C
  760.  
  761.   (it doesn't always work)
  762.  
  763.   ╖  To suspend a process running in foreground:
  764.  
  765.        $ CTRL-Z
  766.  
  767.   (ditto)
  768.  
  769.   ╖  To send a suspended process into background (it becomes a job):
  770.  
  771.        $ bg <job>
  772.  
  773.   ╖  To bring a job to foreground:
  774.  
  775.        $ fg <job>
  776.  
  777.   ╖  To kill a job:
  778.  
  779.        $ kill <%job>
  780.  
  781.   8.3.  Files, Revisited
  782.  
  783.   More information about files.
  784.  
  785.   ╖  stdin, stdout, stderr: under Unix, every system component is
  786.      treated as if it were a file. Commands and programs take their
  787.      input from a `file' called stdin (standard input; usually, the
  788.      keyboard), put their output on a `file' called stdout (usually, the
  789.      screen), and error messages go to a `file' called stderr (usually,
  790.      the screen).
  791.  
  792.      Using < and > you redirect input and output to a different file.
  793.      Moreover, >> appends the output to a file instead of overwriting
  794.      it; 2> redirects error messages (stderr); 2>&1 redirects stderr to
  795.      stdout, while 1>&2 redirects stdout to stderr.  There's a `black
  796.      hole' called /dev/null: everything redirected to it disappears;
  797.  
  798.   ╖  wildcards: '*' is almost the same. Usage: * matches all files
  799.      except the hidden ones; .* matches all hidden files; *.* matches
  800.      only those that have a '.' in the middle, followed by other
  801.      characters; p*r matches both `peter' and `piper'; *c* matches both
  802.      `picked' and `peck'.  []. Usage: [abc]* matches files starting with
  803.      a, b, c; *[I-N,1,2,3] matches files ending with I, J, K, L, M, N,
  804.      1, 2, 3;
  805.   ╖  mv (RENAME) doesn't work for multiple files; that is, mv *.xxx
  806.      *.yyy won't work;
  807.  
  808.   ╖  use cp -i and mv -i to be warned when a file is going to be
  809.      overwritten.
  810.  
  811.   8.4.  Printing Queues
  812.  
  813.   Your prints are queued, like under VMS. When you issue a printing
  814.   command, you may specify a printer name. Example:
  815.  
  816.        $ lpr file.txt        # this goes to the standard printer
  817.        $ lpr -Plaser file.ps # this goes to the printer named 'laser'
  818.  
  819.   To handle the printer(s) queues, you use the following commands:
  820.  
  821.        VMS                                     Linux
  822.        ------------------------------------------------------------------------------
  823.  
  824.        $ PRINT file.ps                         $ lpr file.ps
  825.        $ PRINT/QUEUE=laser file.ps             $ lpr -Plaser file.ps
  826.        $ SHOW QUEUE                            $ lpq
  827.        $ SHOW QUEUE/QUEUE=laser                $ lpq -Plaser
  828.        $ STOP/QUEUE                            $ lprm <item>
  829.  
  830.   9.  Configuring
  831.  
  832.   Your sysadm has already provided you with a number of configuration
  833.   files like .xinitrc, .profile, .inputrc, and many others. The ones you
  834.   may want to edit are:
  835.  
  836.   ╖  Like LOGIN.COM;
  837.  
  838.   ╖  Like LOGOUT.COM;
  839.  
  840.   ╖
  841.  
  842.   ╖  the shell.
  843.  
  844.   To give you an example, I'll include my .bash_profile (abridged):
  845.  
  846.   ______________________________________________________________________
  847.  
  848.   # $HOME/.bash_profile
  849.  
  850.   # don't redefine the path if not necessary
  851.   echo $PATH | grep $LOGNAME > /dev/null
  852.   if [ $? != 0 ]
  853.   then
  854.     export PATH="$PATH:/home/$LOGNAME/bin"  # add my dir to the PATH
  855.   fi
  856.  
  857.   export PS1='LOGNAME:\w\$ '
  858.   export PS2='Continued...>'
  859.  
  860.   # aliases
  861.  
  862.   alias bin="cd ~/bin" ; alias cp="cp -i" ; alias d="dir"
  863.   alias del="delete" ; alias dir="/bin/ls $LS_OPTIONS --format=vertical"
  864.   alias ed="jed" ; alias mv='mv -i'
  865.   alias u="cd .." ; alias undel="undelete"
  866.  
  867.   # A few useful functions
  868.  
  869.   inst() # Install a .tar.gz archive in current directory.
  870.   {
  871.     gzip -dc $1 | tar xvf -
  872.   }
  873.   cz() # List the contents of a .zip archive.
  874.   {
  875.     unzip -l $*
  876.   }
  877.   ctgz() # List the contents of a .tar.gz archive.
  878.   {
  879.     for file in $*
  880.     do
  881.       gzip -dc ${file} | tar tf -
  882.     done
  883.   }
  884.   tgz() # Create a .tgz archive a la zip.
  885.   {
  886.     name=$1 ; tar -cvf $1 ; shift
  887.     tar -rf ${name} $* ; gzip -S .tgz ${name}
  888.   }
  889.   ______________________________________________________________________
  890.  
  891.   And this is my .inputrc:
  892.  
  893.   ______________________________________________________________________
  894.  
  895.   # $HOME/.inputrc
  896.   # Last modified: 16 January 1997.
  897.   #
  898.   # This file is read by bash and defines key bindings to be used by the shell;
  899.   # what follows fixes the keys END, HOME, and DELETE, plus accented letters.
  900.   # For more information, man readline.
  901.  
  902.   "\e[1~": beginning-of-line
  903.   "\e[3~": delete-char
  904.   "\e[4~": end-of-line
  905.  
  906.   set bell-style visible
  907.   set meta-flag On
  908.   set convert-meta Off
  909.   set output-meta On
  910.   set horizontal-scroll-mode On
  911.   set show-all-if-ambiguous On
  912.  
  913.   # (F1 .. F5) are "\e[[A" ... "\e[[E"
  914.  
  915.   "\e[[A": "info "
  916.   ______________________________________________________________________
  917.  
  918.   10.  Useful Programs
  919.  
  920.   10.1.  Archiving: tar & gzip
  921.  
  922.   Under Unix there are some widely used applications to archive and
  923.   compress files. tar is used to make archives, that is collections of
  924.   files. To make a new archive:
  925.  
  926.        $ tar -cvf <archive_name.tar> <file> [file...]
  927.  
  928.   To extract files from an archive:
  929.  
  930.        $ tar -xpvf <archive_name.tar> [file...]
  931.  
  932.   To list the contents of an archive:
  933.  
  934.        $ tar -tf <archive_name.tar> | less
  935.  
  936.   Files can be compressed to save disk space using compress, which is
  937.   obsolete and shouldn't be used any more, or gzip:
  938.        $ compress <file>
  939.        $ gzip <file>
  940.  
  941.   that creates a compressed file with extension .Z (compress) or .gz
  942.   (gzip). These programs don't make archives, but compress files
  943.   individually. To decompress, use:
  944.  
  945.        $ compress -d <file.Z>
  946.        $ gzip -d <file.gz>
  947.  
  948.   RMP.
  949.  
  950.   The unarj, zip and unzip utilities are also available. Files with
  951.   extension .tar.gz or .tgz (archived with tar, then compressed with
  952.   gzip) are very common in the Unix world. Here's how to list the
  953.   contents of a .tar.gz archive:
  954.  
  955.        $ gzip -dc <file.tar.gz> | tar tf - | less
  956.  
  957.   To extract the files from a .tar.gz archive:
  958.  
  959.        $ gzip -dc <file.tar.gz> | tar xvf -
  960.  
  961.   11.  Examples
  962.  
  963.   Unix' core idea is that there are many simple commands that can linked
  964.   together via piping and redirection to accomplish even really complex
  965.   tasks.  Look at the following examples; I'll only explain the most
  966.   complex ones, for the others, please study the above sections and the
  967.   man pages.
  968.  
  969.   Problem: ls is too quick and the file names fly away.
  970.  
  971.   Solution:
  972.  
  973.        $ ls | less
  974.  
  975.   Problem: I have a file containing a list of words. I want to sort it
  976.   in reverse order and print it.
  977.  
  978.   Solution:
  979.  
  980.        $ cat myfile.txt | sort -r | lpr
  981.  
  982.   Problem: my datafile has some repeated lines! How do I get rid of
  983.   them?
  984.  
  985.   Solution:
  986.  
  987.        $ uniq datafile.dat > newfile.dat
  988.  
  989.   Problem: I have a file called 'mypaper.txt' or 'mypaper.tex' or some
  990.   such somewhere, but I don't remember where I put it. How do I find it?
  991.  
  992.   Solution:
  993.  
  994.        $ find ~ -name "mypaper*"
  995.  
  996.   Explanation: find is a very useful command that lists all the files in
  997.   a directory tree (starting from ~ in this case). Its output can be
  998.   filtered to meet some criteria, such as -name.
  999.  
  1000.   Problem: I have a text file containing the word 'entropy' in this
  1001.   directory, is there anything like SEARCH?
  1002.  
  1003.   Solution: yes, try
  1004.  
  1005.        $ grep -l 'entropy' *
  1006.  
  1007.   Problem: somewhere I have text files containing the word 'entropy',
  1008.   I'd like to know which and where they are. Under VMS I'd use search
  1009.   entropy [...]*.*.*, but grep can't recurse subdirectories. Now what?
  1010.  
  1011.   Solution:
  1012.  
  1013.        $ find . -exec grep -l "entropy" {} \; 2> /dev/null
  1014.  
  1015.   Explanation: find . outputs all the file names starting from the
  1016.   current directory, -exec grep -l "entropy" is an action to be
  1017.   performed on each file (represented by {}), \; terminates the command.
  1018.   If you think this grammar is awful, you're right.
  1019.   In alternative, write the following script:
  1020.  
  1021.   ______________________________________________________________________
  1022.   #!/bin/sh
  1023.   # rgrep: recursive grep
  1024.   if [ $# != 3 ]
  1025.   then
  1026.     echo "Usage: rgrep --switches 'pattern' 'directory'"
  1027.     exit 1
  1028.   fi
  1029.   find $3 -name "*" -exec grep $1 $2 {} \; 2> /dev/null
  1030.   ______________________________________________________________________
  1031.  
  1032.   Explanation: grep works like search, and combining it with find we get
  1033.   the best of both worlds.
  1034.  
  1035.   Problem: I have a data file that has two header lines, then every line
  1036.   has 'n' data, not necessarily equally spaced. I want the 2nd and 5th
  1037.   data point of each line. Shall I write a FORTRAN program...?
  1038.  
  1039.   Solution: nope. This is quicker:
  1040.  
  1041.        $ awk 'NL > 2 {print $2, "\t", $5}' datafile.dat > newfile.dat
  1042.  
  1043.   Explanation: the command awk is actually a programming language: for
  1044.   each line starting from the third in datafile.dat, print out the
  1045.   second and fifth field, separated by a tab. Learn some awk---it saves
  1046.   a lot of time.
  1047.  
  1048.   Problem: I've downloaded an FTP site's ls-lR.gz to check its contents.
  1049.   For each subdirectory, it contains a line that reads "total xxxx",
  1050.   where xxxx is size in kbytes of the dir contents. I'd like to get the
  1051.   grand total of all these xxxx values.
  1052.  
  1053.   Solution:
  1054.  
  1055.        zcat ls-lR.gz | awk ' $1 == "total" { i += $2 } END {print i}'
  1056.  
  1057.   Explanation: zcat outputs the contents of the .gz file and pipes to
  1058.   awk, whose man page you're kindly requested to read ;-)
  1059.  
  1060.   Problem: I've written a FORTRAN program, myprog, to calculate a
  1061.   parameter from a data file. I'd like to run it on hundreds of data
  1062.   files and have a list of the results, but it's a nuisance to ask each
  1063.   time for the file name. Under VMS I'd write a lengthy command file,
  1064.   and under Linux?
  1065.  
  1066.   Solution: a very short script. Make your program look for the data
  1067.   file 'mydata.dat' and print the result on the screen (stdout), then
  1068.   write the following script:
  1069.  
  1070.   ______________________________________________________________________
  1071.  
  1072.   #!/bin/sh
  1073.   # myprog.sh: run the same command on many different files
  1074.   # usage: myprog.sh *.dat
  1075.   for file in $*  # for all parameters (e.g. *.dat)
  1076.   do
  1077.     # append the file name to result.dat
  1078.     echo -n "${file}:    " >> results.dat
  1079.     # copy current argument to mydata.dat, run myprog
  1080.     # and append the output to results.dat
  1081.     cp ${file} mydata.dat ; myprog >> results.dat
  1082.   done
  1083.   ______________________________________________________________________
  1084.  
  1085.   Problem: I want to replace `geology' with `geophysics' in all my text
  1086.   files. Shall I edit them all manually?
  1087.  
  1088.   Solution: nope. Write this shell script:
  1089.  
  1090.   ______________________________________________________________________
  1091.  
  1092.   #!/bin/sh
  1093.   # replace $1 with $2 in $*
  1094.   # usage: replace "old-pattern" "new-pattern" file [file...]
  1095.   OLD=$1          # first parameter of the script
  1096.   NEW=$2          # second parameter
  1097.   shift ; shift   # discard first two parameters: the next are the file names
  1098.   for file in $*  # for all files given as parameters
  1099.   do
  1100.   # replace every occurrence of OLD with NEW, save on a temporary file
  1101.     sed "s/$OLD/$NEW/g" ${file} > ${file}.new
  1102.   # rename the temporary file as the original file
  1103.     /bin/mv ${file}.new ${file}
  1104.   done
  1105.   ______________________________________________________________________
  1106.  
  1107.   Problem: I have some data files, I don't know their length and have to
  1108.   remove their last but one and last but two lines. Er... manually?
  1109.  
  1110.   Solution: no, of course. Write this script:
  1111.  
  1112.   ______________________________________________________________________
  1113.  
  1114.   #!/bin/sh
  1115.   # prune.sh: removes n-1th and n-2th lines from files
  1116.   # usage: prune.sh file [file...]
  1117.   for file in $*   # for every parameter
  1118.   do
  1119.     LINES=`wc -l $file | awk '{print $1}'`  # number of lines in file
  1120.     LINES=`expr $LINES - 3`                 # LINES = LINES - 3
  1121.     head -n $LINES $file > $file.new        # output first LINES lines
  1122.     tail -n 1 $file >> $file.new            # append last line
  1123.   done
  1124.   ______________________________________________________________________
  1125.  
  1126.   I hope these examples whetted your appetite...
  1127.  
  1128.   12.  Tips You Can't Do Without
  1129.  
  1130.   ╖  Command completion: pressing <TAB> when issuing a command will
  1131.      complete the command line for you. Example: you have to type less
  1132.      this_is_a_long_name; typing in less thi<TAB> will suffice. (If you
  1133.      have other files that start with the same characters, supply enough
  1134.      characters to resolve any ambiguity.)
  1135.  
  1136.   ╖  Back-scrolling: pressing SHIFT + PAG UP (the grey key) allows you
  1137.      to backscroll a few pages, depending on your PC's video memory.
  1138.  
  1139.   ╖  Resetting the screen: if you happen to more or cat a binary file,
  1140.      your screen may end up full of garbage. To fix things, blind type
  1141.      reset or this sequence of characters: echo CTRL-V ESC c RETURN.
  1142.  
  1143.   ╖  Pasting text: in console, see below; in X, click and drag to select
  1144.      the text in an xterm window, then click the middle button (or the
  1145.      two buttons together if you have a two-button mouse) to paste.
  1146.  
  1147.   ╖  Using the mouse: ask your sysadm to install gpm, a mouse driver for
  1148.      the console. Click and drag to select text, then right click to
  1149.      paste the selected text. It works across different VCs.
  1150.  
  1151.   13.  The End
  1152.  
  1153.   13.1.  Copyright
  1154.  
  1155.   Unless otherwise stated, Linux HOWTO documents are copyrighted by
  1156.   their respective authors. Linux HOWTO documents may be reproduced and
  1157.   distributed in whole or in part, in any medium physical or electronic,
  1158.   as long as this copyright notice is retained on all copies. Commercial
  1159.   redistribution is allowed and encouraged; however, the author would
  1160.   like to be notified of any such distributions.
  1161.  
  1162.   All translations, derivative works, or aggregate works incorporating
  1163.   any Linux HOWTO documents must be covered under this copyright notice.
  1164.   That is, you may not produce a derivative work from a HOWTO and impose
  1165.   additional restrictions on its distribution. Exceptions to these rules
  1166.   may be granted under certain conditions; please contact the Linux
  1167.   HOWTO coordinator at the address given below.
  1168.  
  1169.   In short, we wish to promote dissemination of this information through
  1170.   as many channels as possible. However, we do wish to retain copyright
  1171.   on the HOWTO documents, and would like to be notified of any plans to
  1172.   redistribute the HOWTOs.
  1173.  
  1174.   If you have questions, please contact Greg Hankins, the Linux HOWTO
  1175.   coordinator, at gregh@sunsite.unc.edu via email.
  1176.  
  1177.   14.  Disclaimer
  1178.  
  1179.   This work was written following the experience we had at the Settore
  1180.   di Geofisica of Bologna University (Italy), where a VAX 4000 is being
  1181.   superseded and replaced by Linux-based Pentium PCs. Most of my
  1182.   colleagues are VMS users, and some of them have switched to Linux.
  1183.  
  1184.   ``From VMS to Linux HOWTO'' was written by Guido Gonzato,
  1185.   guido@ibogfs.df.unibo.it, 1997. Many thanks to my colleagues and
  1186.   friends who helped me define the needs of the average VMS user,
  1187.   especially to Dr. Warner Marzocchi.
  1188.  
  1189.   Please help me improve this HOWTO. I'm not a VMS expert and never
  1190.   will, so your suggestions and bug reports are more than welcome.
  1191.  
  1192.   Enjoy,
  1193.  
  1194.   Guido =8-)
  1195.  
  1196.