1921 lines
60 KiB
Plaintext
1921 lines
60 KiB
Plaintext
From DOS/Windows to Linux HOWTO
|
||
By Guido Gonzato, ggonza at tin.it
|
||
Version 1.3.5. 31 August 2000.
|
||
|
||
This HOWTO is dedicated to all the (soon to be former?) DOS and Win
|
||
dows users who have decided to switch to Linux, the free UNIX clone.
|
||
The purpose of this document is to help the reader translate his or
|
||
her knowledge of DOS and Windows into the Linux environment, as well
|
||
as providing hints on exchanging files and resources between the two
|
||
OSes.
|
||
______________________________________________________________________
|
||
|
||
Table of Contents
|
||
|
||
|
||
|
||
1. Introduction
|
||
|
||
1.1 Is Linux Right for You?
|
||
1.2 It Is. Tell Me More
|
||
1.2.1 Introductory Concepts
|
||
1.2.2 Getting Help
|
||
1.3 Conventions
|
||
|
||
2. For the Impatient
|
||
|
||
3. Meet bash
|
||
|
||
4. Files and Programs
|
||
|
||
4.1 Files: Preliminary Notions
|
||
4.2 Symbolic Links
|
||
4.3 Permissions and Ownership
|
||
4.4 Files: Translating Commands
|
||
4.4.1 Examples
|
||
4.5 Running Programs: Multitasking and Sessions
|
||
4.6 Running Programs on Remote Computers
|
||
|
||
5. Using Directories
|
||
|
||
5.1 Directories: Preliminary Notions
|
||
5.2 Directories Permissions
|
||
5.3 Directories: Translating Commands
|
||
5.3.1 Examples
|
||
|
||
6. Floppies, Hard Disks, and the Like
|
||
|
||
6.1 Managing Devices the DOS Way
|
||
6.2 Managing Devices the UNIX Way
|
||
6.3 Backing Up
|
||
|
||
7. What About Windows?
|
||
|
||
8. Tailoring the System
|
||
|
||
8.1 System Initialisation Files
|
||
8.2 Program Initialisation Files
|
||
|
||
9. Networking: Concepts
|
||
|
||
10. A Bit of Programming
|
||
|
||
10.1 Shell Scripts: .BAT Files on Steroids
|
||
10.2 C for Yourself
|
||
10.3 X11 Programming
|
||
10.3.1 Multi-Platform Programming
|
||
|
||
11. The Remaining 1%
|
||
|
||
11.1 Running DOS/Windows Apps
|
||
11.2 Using tar and gzip
|
||
11.3 Installing Applications
|
||
11.4 Tips You Can't Do Without
|
||
11.5 Where to Find Applications
|
||
11.6 A Few Things You Couldn't Do
|
||
11.7 Practicing UNIX under DOS/Win
|
||
11.8 Common Extensions and Related Programs
|
||
11.9 Converting Files
|
||
11.10 Free Office Suites
|
||
|
||
12. The End, for Now
|
||
|
||
12.1 Copyright
|
||
12.2 Disclaimer
|
||
|
||
|
||
______________________________________________________________________
|
||
|
||
1. Introduction
|
||
|
||
|
||
|
||
1.1. Is Linux Right for You?
|
||
|
||
|
||
Let's start politically correct. Throughout this document I say
|
||
``Linux'', but I mean ``GNU/Linux''. Please go to
|
||
<http://www.gnu.org/gnu/linux-and-gnu.html> to see why.
|
||
|
||
You want to switch from the DOS/Windows world to Linux? Good idea:
|
||
Linux is technically superior to DOS, Windows 9x and even Windows NT.
|
||
But beware: it might not be useful for you. These are the main
|
||
differences between DOS/Windows and Linux:
|
||
|
||
|
||
· Windows runs Microsoft Office and lots of games; is perceived to be
|
||
easy to install and configure; is notoriously unstable; performs
|
||
poorly; crashes are frequent.
|
||
|
||
· Linux runs StarOffice, scores of technical software and fewer
|
||
games; can be tricky to install and configure; is rock solid;
|
||
performs impeccably; crashes are extremely rare.
|
||
|
||
It's up to you to decide what you need. Furthermore, Linux gives you
|
||
power, but it takes some time to learn how to harness it. Thus, if
|
||
mostly need commercial sw, or if you don't feel like learning new
|
||
commands and concepts, you had better look elsewhere. Be aware that
|
||
many newcomers give up because of initial difficulties.
|
||
|
||
Work is underway to make Linux simpler to use, but don't expect to be
|
||
proficient with it unless you read a lot of documentation and use it
|
||
at least for a few months. Linux won't give you instant results. In
|
||
spite of these warnings, I'm 100% confident that if you are the right
|
||
user type you'll find in Linux your computer Nirvana. By the way,
|
||
Linux + DOS/Win can coexist happily on the same machine.
|
||
|
||
Prerequisites for this howto: I'll assume that
|
||
|
||
|
||
· you know the basic DOS commands and concepts;
|
||
|
||
· Linux, possibly with X Window System (X11 for short), is properly
|
||
installed on your PC;
|
||
|
||
· your shell (the equivalent of COMMAND.COM) is bash.
|
||
|
||
Unless specified, all information in this work is aimed at bad ol'
|
||
DOS. There is information about Windows here and there, but bear in
|
||
mind that Windows and Linux are totally different, unlike DOS that is
|
||
sort of a UNIX poor relation.
|
||
|
||
Please also note that this work is neither a complete primer nor a
|
||
configuration guide!
|
||
|
||
The latest version of this document is available in several formats on
|
||
<http://www.linuxdoc.org>.
|
||
|
||
|
||
1.2. It Is. Tell Me More
|
||
|
||
|
||
You installed Linux and the programs you needed on the PC. You gave
|
||
yourself an account (if not, type adduser yourname now!) and Linux is
|
||
running. You've just entered your name and password, and now you are
|
||
looking at the screen thinking: ``Well, now what?''
|
||
|
||
Now, don't despair. You're almost ready to do the same things you used
|
||
to do with DOS/Win, and many more. If you were running DOS/Win instead
|
||
of Linux, you would be doing some of the following tasks:
|
||
|
||
|
||
· running programs and creating, copying, viewing, deleting,
|
||
printing, renaming files;
|
||
|
||
· CD'ing, MD'ing, RD'ing, and DIR'ring your directories;
|
||
|
||
· formatting floppies and copying files from/to them;
|
||
|
||
· tailoring the system;
|
||
|
||
· surfing the Internet;
|
||
|
||
· writing .BAT files and programs in your favourite language;
|
||
|
||
· the remaining 1%.
|
||
|
||
You'll be glad to know that these tasks can be accomplished under
|
||
Linux in a fashion similar to DOS. Under DOS, the average user uses
|
||
very few of the 100+ commands available: the same, up to a point,
|
||
applies to Linux.
|
||
|
||
|
||
|
||
1.2.1. Introductory Concepts
|
||
|
||
|
||
The best way to learn something new is to get your feet wet. You are
|
||
strongly encouraged to experiment and play with Linux: unless you
|
||
login as ``root'', you can't damage the system that way. A few points:
|
||
|
||
|
||
· first of all, how to quit Linux safely. If you see a text mode
|
||
screen, press <CTRL-ALT-DEL>, wait for the system to reboot, then
|
||
switch off the PC. If you are working under X Window System, press
|
||
<CTRL-ALT-BACKSPACE> first, then <CTRL-ALT-DEL>. Never switch off
|
||
or reset the PC directly: this could damage the file system;
|
||
|
||
· unlike DOS or Windows, Linux has built-in security mechanisms.
|
||
Files and directories have permissions associated to them; as a
|
||
result, some cannot be accessed by the normal user; (see Section
|
||
``Permissions and Ownership''). DOS and Windows, on the contrary,
|
||
will let you wipe out the entire contents of your hard disk;
|
||
|
||
· there's a special user called ``root'': the system administrator,
|
||
with full power of life and death on the machine. If you work on
|
||
your own PC, you'll be root as well. Working as root is dangerous:
|
||
any mistake can seriously damage or destroy the system just like
|
||
with DOS/Windows. Don't work as root unless absolutely necessary;
|
||
|
||
· much of the complexity of Linux comes from its extreme
|
||
configurability: virtually every feature and every application can
|
||
be tailored through one or more configuration files. Complexity is
|
||
the price to pay for power;
|
||
|
||
· redirection and piping are a side DOS feature, a very inportant one
|
||
and much more powerful under Linux. Simple commands can be strung
|
||
together to accomplish complex tasks. I strongly suggest that you
|
||
learn how to use them.
|
||
|
||
|
||
|
||
1.2.2. Getting Help
|
||
|
||
|
||
There are many ways to get help with Linux. The most important are:
|
||
|
||
|
||
· reading the documentation---I mean it. Although the HOWTO you are
|
||
reading may serve as an introduction to Linux, there are several
|
||
books that you really should read: at least, Matt Welsh's ``Linux
|
||
Installation and Getting Started'' (
|
||
<http://www.linuxdoc.org/LDP/gs/gs.html>) and the Linux FAQ (
|
||
<http://www.linuxdoc.org/FAQ/Linux-FAQ/index.html>). Feel a guilty
|
||
conscience until you have read at least one of them;
|
||
|
||
· the documentation of the packages installed on the machine is often
|
||
found in subdirectories under /usr/doc/;
|
||
|
||
· to get some help about the ``internal commands'' of the shell, type
|
||
help or, better, man bash or info bash;
|
||
|
||
· to get help about a command, type man command that invokes the
|
||
manual (``man'') page of command. Alternatively, type info command
|
||
that invokes, if available, the info page pertinent of command;
|
||
info is a hypertext-based documentation system, perhaps not
|
||
intuitive to use at first. Finally, you may try apropos command or
|
||
whatis command. With all of these commands, press `q' to exit.
|
||
|
||
· finally, on the Internet: the right place for getting help is
|
||
Usenet, like <news:comp.os.linux.setup>. Please don't email me for
|
||
help, because I'm quite overloaded.
|
||
|
||
|
||
|
||
1.3. Conventions
|
||
|
||
|
||
Throughout this work, examples will often follow the following format:
|
||
<...> is a required argument, while [...] an optional one. Example:
|
||
|
||
|
||
|
||
$ tar -tf <file.tar> [> redir_file]
|
||
|
||
|
||
|
||
file.tar must be indicated, but redirection to redir_file is optional.
|
||
|
||
``RMP'' means ``please Read the Man Pages for further information''. I
|
||
can't stress enough how important reading the documentation is.
|
||
|
||
When the prompt of a command example is #, the command can only be
|
||
performed by root.
|
||
|
||
|
||
|
||
2. For the Impatient
|
||
|
||
|
||
Want to strike out? Have a look at this table:
|
||
|
||
|
||
|
||
DOS Linux Notes
|
||
------------------------------------------------------------------------------
|
||
|
||
ATTRIB (+-)attr file chmod <mode> file completely different
|
||
BACKUP tar -Mcvf device dir/ ditto
|
||
CD dirname\ cd dirname/ almost the same syntax
|
||
COPY file1 file2 cp file1 file2 ditto
|
||
DEL file rm file beware - no undelete
|
||
DELTREE dirname rm -R dirname/ ditto
|
||
DIR ls not exactly the same syntax
|
||
DIR file /S find . -name file completely different
|
||
EDIT file vi file I think you won't like it
|
||
jstar file feels like dos' edit
|
||
EDLIN file ed file forget it
|
||
FORMAT fdformat,
|
||
mount, umount quite different syntax
|
||
HELP command man command, same philosophy
|
||
info command
|
||
MD dirname mkdir dirname/ almost the same syntax
|
||
MORE < file less file much better
|
||
MOVE file1 file2 mv file1 file2 ditto
|
||
NUL /dev/null ditto
|
||
PRINT file lpr file ditto
|
||
PRN /dev/lp0,
|
||
/dev/lp1 ditto
|
||
RD dirname rmdir dirname/ almost the same syntax
|
||
REN file1 file2 mv file1 file2 not for multiple files
|
||
RESTORE tar -Mxpvf device different syntax
|
||
TYPE file less file much better
|
||
WIN startx poles apart!
|
||
|
||
|
||
|
||
If you need more than a table of commands, please refer to the
|
||
following sections.
|
||
|
||
|
||
|
||
3. Meet bash
|
||
|
||
|
||
Good news: with Linux you type much less at the prompt, because the
|
||
bash shell types for you whenever possible, and features cool line
|
||
editing capabilities. To begin with, the arrow-up key recalls previous
|
||
command lines; but there's more. Pressing <TAB> completes file and
|
||
directory names, so typing
|
||
|
||
|
||
|
||
$ ls /uTABloTABbTAB
|
||
|
||
|
||
|
||
is like typing
|
||
|
||
|
||
$ ls /usr/local/bin
|
||
|
||
|
||
|
||
If there were ambiguities, as typing
|
||
|
||
|
||
|
||
$ ls /uTABloTABiTAB
|
||
|
||
|
||
|
||
bash stops because it doesn't know if you mean /usr/local/info or
|
||
/usr/local/include. Supply more characters then press <TAB> again.
|
||
|
||
Other useful key presses are <ESC-BACKSPACE> that deletes a word to
|
||
the left, while <ESC-D> deletes a word to the right; <ESC-F> moves the
|
||
cursor one word to the right, <ESC-B> to the left; <CTRL-A> moves to
|
||
the beginning of the line, <CTRL-E> to the end. The <ALT> key is
|
||
equivalent to <ESC>.
|
||
|
||
Enough for now. Once you get used to these shortcuts, you'll find the
|
||
DOS prompt very annoying...
|
||
|
||
|
||
|
||
4. Files and Programs
|
||
|
||
|
||
|
||
4.1. Files: Preliminary Notions
|
||
|
||
|
||
Linux has a structure of directories and files very similar to that of
|
||
DOS/Win. Files have filenames that obey special rules, are stored in
|
||
directories, some are executable, and among these most have command
|
||
switches. Moreover, you can use wildcard characters, redirection, and
|
||
piping. There are only a few minor differences:
|
||
|
||
|
||
· under DOS, file names are in the so-called 8.3 form; e.g.
|
||
NOTENOUG.TXT. Under Linux we can do better. If you installed Linux
|
||
using a file system like ext2 or umsdos, you can use longer
|
||
filenames (up to 255 characters), and with more than one dot: for
|
||
example, This_is.a.VERY_long.filename. Please note that I used both
|
||
upper and lower case characters: in fact...
|
||
|
||
· upper and lower case characters in file names or commands are
|
||
different. Therefore, FILENAME.tar.gz and filename.tar.gz are two
|
||
different files. ls is a command, LS is a mistake;
|
||
|
||
· Windows users, beware when using long file names under Linux. If a
|
||
file name contains spaces (not recommended but possible), you must
|
||
enclose the file name in double quotes whenever you refer to it.
|
||
For example:
|
||
|
||
|
||
|
||
$ # the following command makes a directory called "My old files"
|
||
$ mkdir "My old files"
|
||
$ ls
|
||
My old files bin tmp
|
||
|
||
Further, some characters shouldn't be used: some of those are !*$&#.
|
||
|
||
· there are no compulsory extensions like .COM and .EXE for programs,
|
||
or .BAT for batch files. Executable files are marked by an asterisk
|
||
`*' at the end of their name when you issue the ls -F command. For
|
||
example:
|
||
|
||
|
||
|
||
$ ls -F
|
||
I_am_a_dir/ cindy.jpg cjpg* letter_to_Joe my_1st_script* old~
|
||
|
||
|
||
|
||
The files cjpg* and my_1st_script* are executables, that is ``pro
|
||
grams''. Under DOS, backup files end in .BAK, while under Linux they
|
||
end with a tilde `~'. Further, a file whose name starts with a dot is
|
||
considered as hidden. Example: the file .I.am.a.hidden.file won't show
|
||
up after the ls command;
|
||
|
||
· DOS program switches are obtained with /switch, Linux switches with
|
||
-switch or --switch. Example: dir /s<tt> becomes ls -R. Note that
|
||
many DOS programs, like PKZIP or ARJ, use UNIX-style switches.
|
||
|
||
You can now jump to Section ``Translating Commands from DOS to
|
||
Linux'', but if I were you I'd read on.
|
||
|
||
|
||
|
||
4.2. Symbolic Links
|
||
|
||
|
||
UNIX has a type of file that doesn't exist under DOS: the symbolic
|
||
link. This can be thought of as a pointer to a file or to a
|
||
directory, and can be used instead of the file or directory it points
|
||
to; it's similar to Windows shortcuts. Examples of symbolic links are
|
||
/usr/X11, which points to /usr/X11R6; /dev/modem, which points to
|
||
either /dev/ttyS0 or /dev/ttyS1.
|
||
|
||
To make a symbolic link:
|
||
|
||
|
||
|
||
$ ln -s <file_or_dir> <linkname>
|
||
|
||
|
||
|
||
Example:
|
||
|
||
|
||
|
||
$ ln -s /usr/doc/g77/DOC g77manual.txt
|
||
|
||
|
||
|
||
Now you can refer to g77manual.txt instead of /usr/doc/g77/DOC. Links
|
||
appear like this in directory listings:
|
||
|
||
|
||
|
||
$ ls -F
|
||
g77manual.txt@
|
||
$ ls -l
|
||
(several things...) g77manual.txt -> /usr/doc/g77/DOC
|
||
|
||
|
||
|
||
4.3. Permissions and Ownership
|
||
|
||
|
||
DOS files and directories have the following attributes: A (archive),
|
||
H (hidden), R (read-only), and S (system). Only H and R make sense
|
||
under Linux: hidden files start with a dot, and for the R attribute,
|
||
read on.
|
||
|
||
Under UNIX a file has ``permissions'' and an owner, who in turn
|
||
belongs to a ``group''. Look at this example:
|
||
|
||
|
||
|
||
$ ls -l /bin/ls
|
||
-rwxr-xr-x 1 root bin 27281 Aug 15 1995 /bin/ls*
|
||
|
||
|
||
|
||
The first field contains the permissions of the file /bin/ls, which
|
||
belongs to root, group bin. Leaving the remaining information aside,
|
||
remember that -rwxr-xr-x means, from left to right:
|
||
|
||
- is the file type (- = ordinary file, d = directory, l = link, etc);
|
||
rwx are the permissions for the file owner (read, write, execute); r-x
|
||
are the permissions for the group of the file owner (read, execute);
|
||
(I won't cover the concept of group, you can survive without it as
|
||
long as you're a beginner ;-) r-x are the permissions for all other
|
||
users (read, execute).
|
||
|
||
The directory /bin has permissions, too: see Section ``Directories
|
||
Permissions'' for further details. This is why you can't delete the
|
||
file /bin/ls unless you are root: you don't have the permission to do
|
||
so. To change a file's permissions, the command is:
|
||
|
||
|
||
|
||
$ chmod <whoXperm> <file>
|
||
|
||
|
||
|
||
where who is u (user, that is owner), g (group), o (other), X is
|
||
either + or -, perm is r (read), w (write), or x (execute). Common
|
||
examples of chmod use are the following:
|
||
|
||
|
||
|
||
$ chmod +x file
|
||
|
||
|
||
|
||
this sets the execute permission for the file.
|
||
|
||
|
||
$ chmod go-rw file
|
||
|
||
|
||
|
||
this removes read and write permission for everyone but the owner.
|
||
|
||
|
||
|
||
$ chmod ugo+rwx file
|
||
|
||
|
||
|
||
this gives everyone read, write, and execute permission.
|
||
|
||
|
||
|
||
# chmod +s file
|
||
|
||
|
||
|
||
this makes a so-called ``setuid'' or ``suid'' file---a file that
|
||
everyone can execute with its owner's privileges. Typically, you'll
|
||
come across root suid files; these are often important system files,
|
||
like the X server.
|
||
|
||
A shorter way to refer to permissions is with digits: rwxr-xr-x can be
|
||
expressed as 755 (every letter corresponds to a bit: --- is 0, --x is
|
||
1, -w- is 2, -wx is 3...). It looks difficult, but with a bit of
|
||
practice you'll understand the concept. root, being the superuser, can
|
||
change everyone's file permissions. RMP.
|
||
|
||
|
||
|
||
4.4. Files: Translating Commands
|
||
|
||
|
||
On the left, the DOS commands; on the right, their Linux counterpart.
|
||
|
||
|
||
|
||
ATTRIB: chmod
|
||
COPY: cp
|
||
DEL: rm
|
||
MOVE: mv
|
||
REN: mv
|
||
TYPE: more, less, cat
|
||
|
||
|
||
|
||
Redirection and plumbing operators: < > >> |
|
||
|
||
Wildcards: * ?
|
||
|
||
nul: /dev/null
|
||
|
||
prn, lpt1: /dev/lp0 or /dev/lp1; lpr
|
||
|
||
|
||
4.4.1. Examples
|
||
|
||
|
||
|
||
DOS Linux
|
||
---------------------------------------------------------------------
|
||
|
||
C:\GUIDO>ATTRIB +R FILE.TXT $ chmod 400 file.txt
|
||
C:\GUIDO>COPY JOE.TXT JOE.DOC $ cp joe.txt joe.doc
|
||
C:\GUIDO>COPY *.* TOTAL $ cat * > total
|
||
C:\GUIDO>COPY FRACTALS.DOC PRN $ lpr fractals.doc
|
||
C:\GUIDO>DEL TEMP $ rm temp
|
||
C:\GUIDO>DEL *.BAK $ rm *~
|
||
C:\GUIDO>MOVE PAPER.TXT TMP\ $ mv paper.txt tmp/
|
||
C:\GUIDO>REN PAPER.TXT PAPER.ASC $ mv paper.txt paper.asc
|
||
C:\GUIDO>PRINT LETTER.TXT $ lpr letter.txt
|
||
C:\GUIDO>TYPE LETTER.TXT $ more letter.txt
|
||
C:\GUIDO>TYPE LETTER.TXT $ less letter.txt
|
||
C:\GUIDO>TYPE LETTER.TXT > NUL $ cat letter.txt > /dev/null
|
||
n/a $ more *.txt *.asc
|
||
n/a $ cat section*.txt | less
|
||
|
||
|
||
|
||
Notes:
|
||
|
||
|
||
· * is smarter under Linux: * matches all files except the hidden
|
||
ones; .* matches all hidden files (but also the current directory
|
||
`.' and parent directory `..': beware!); *.* matches only those
|
||
that have a `.' in the middle or that end with a dot; p*r matches
|
||
both `peter' and `piper'; *c* matches both `picked' and `peck';
|
||
|
||
· when using more, press <SPACE> to read through the file, `q' to
|
||
exit. less is more intuitive and lets you use the arrow keys;
|
||
|
||
· there is no UNDELETE, so think twice before deleting anything;
|
||
|
||
· in addition to DOS' < > >>, Linux has 2> to redirect error messages
|
||
(stderr); moreover, 2>&1 redirects stderr to stdout, while 1>&2
|
||
redirects stdout to stderr;
|
||
|
||
· Linux has another wildcard: the []. Usage: [abc]* matches files
|
||
starting with a, b, c; *[I-N1-3] matches files ending with I, J, K,
|
||
L, M, N, 1, 2, 3;
|
||
|
||
· lpr <file> prints a file in background. To check the status of the
|
||
print queue, use lpq; to remove a file from the print queue, use
|
||
lprm;
|
||
|
||
· there is no DOS-like RENAME; that is, mv *.xxx *.yyy won't work. A
|
||
REN-like command is available on
|
||
<ftp://metalab.unc.edu/pub/Linux/utils/file>;
|
||
|
||
· use cp -i and mv -i to be warned when a file is going to be
|
||
overwritten.
|
||
|
||
|
||
|
||
4.5. Running Programs: Multitasking and Sessions
|
||
|
||
|
||
To run a program, type its name as you would do under DOS. If the
|
||
directory (Section ``Using Directories'') where the program is stored
|
||
is included in the PATH (Section ``System Initialisation Files''), the
|
||
program will start. Exception: unlike DOS, under Linux a program
|
||
located in the current directory won't run unless the directory is
|
||
included in the PATH. Escamotage: being prog your program, type
|
||
./prog.
|
||
This is what the typical command line looks like:
|
||
|
||
|
||
|
||
$ command [-s1 [-s2] ... [-sn]] [par1 [par2] ... [parn]] [< input] [> output]
|
||
|
||
|
||
|
||
where -s1, ..., -sn are the program switches, par1, ..., parn are the
|
||
program parameters. You can issue several commands on the command
|
||
line:
|
||
|
||
|
||
|
||
$ command1 ; command2 ; ... ; commandn
|
||
|
||
|
||
|
||
That's all about running programs, but it's easy to go a step beyond.
|
||
One of the main reasons for using Linux is that it is a multitasking
|
||
os---it can run several programs (from now on, processes) at the same
|
||
time. You can launch processes in background and continue working
|
||
straight away. Moreover, Linux lets you have several sessions: it's
|
||
like having many computers to work on at once!
|
||
|
||
|
||
· To switch to session 1..6 on the virtual consoles, press <ALT-F1>
|
||
... <ALT-F6>
|
||
|
||
· To start a new session in the same v.c. without leaving the current
|
||
one, type su - <loginname>. Example: su - root. This is useful, for
|
||
instance, when you need to perform a task that only root can do.
|
||
|
||
· To end a session, type exit. If there are stopped jobs (see later),
|
||
you'll be warned.
|
||
|
||
· To launch a process in background, add an ampersand '&' at the end
|
||
of the command line:
|
||
|
||
|
||
|
||
$ progname [-switches] [parameters] [< input] [> output] &
|
||
[1] 123
|
||
|
||
|
||
|
||
the shell identifies the process with a job number (e.g. [1]; see
|
||
below), and with a PID (Process Identification Number; 123 in our
|
||
example).
|
||
|
||
· To see how many processes there are, type ps ax. This will output a
|
||
list of currently running processes.
|
||
|
||
· To kill (terminate) a process, type kill <PID>. You may need to
|
||
kill a process when you don't know how to quit it the right way....
|
||
Unless you're root, you can't kill other people's processes.
|
||
Sometimes, a process will only be killed by kill -SIGKILL <PID>.
|
||
|
||
In addition, the shell allows you to stop or temporarily suspend a
|
||
process, send a process to background, and bring a process from
|
||
background to foreground. In this context, processes are called
|
||
``jobs''.
|
||
· To see how many jobs there are, type jobs. Here the jobs are
|
||
identified by their job number, not by their PID.
|
||
|
||
· To stop a process running in foreground, press <CTRL-C> (it won't
|
||
always work).
|
||
|
||
· To suspend a process running in foreground, press <CTRL-Z> (ditto).
|
||
|
||
· To send a suspended process into background, type bg <%job> (it
|
||
becomes a job).
|
||
|
||
· To bring a job to foreground, type fg <%job>. To bring to
|
||
foreground the last job sent to background, simply type fg.
|
||
|
||
· To kill a job, type kill <%job> where <job> may be 1, 2, 3,...
|
||
|
||
Using these commands you can format a disk, zip a bunch of files,
|
||
compile a program, and unzip an archive all at the same time, and
|
||
still have the prompt at your disposal. Try this with Windows, just to
|
||
see the difference in performance (if it doesn't crash, of course).
|
||
|
||
|
||
|
||
4.6. Running Programs on Remote Computers
|
||
|
||
|
||
To run a program on a remote machine whose name is remote.machine.edu:
|
||
|
||
|
||
|
||
$ telnet remote.machine.edu
|
||
|
||
|
||
|
||
After logging in, start your favourite program. Needless to say, you
|
||
must have a shell account on the remote machine.
|
||
|
||
If you have X11, you can even run an X application on a remote
|
||
computer, displaying it on your X screen. Let remote.machine.edu be
|
||
the remote X computer and let local.linux.box be your Linux machine.
|
||
To run from local.linux.box an X program that resides on
|
||
remote.machine.edu, do the following:
|
||
|
||
|
||
· fire up X11, start an xterm or equivalent terminal emulator, then
|
||
type:
|
||
|
||
|
||
|
||
$ xhost +remote.machine.edu
|
||
$ telnet remote.machine.edu
|
||
|
||
|
||
|
||
· after logging in, type:
|
||
|
||
|
||
|
||
remote:$ DISPLAY=local.linux.box:0.0
|
||
remote:$ progname &
|
||
|
||
|
||
|
||
(instead of DISPLAY..., you may have to write: setenv DISPLAY
|
||
local.linux.box:0.0. It depends on the remote shell.)
|
||
|
||
Et voila! Now progname will start on remote.machine.edu and will be
|
||
displayed on your machine. Don't try this over the modem though, for
|
||
it's too slow to be usable. Moreover, this is a crude and insecure
|
||
method: please read the ``Remote X Apps mini-HOWTO'' at
|
||
<http://www.linuxdoc.org/HOWTO/mini/Remote-X-Apps.html>.
|
||
|
||
|
||
|
||
5. Using Directories
|
||
|
||
|
||
|
||
5.1. Directories: Preliminary Notions
|
||
|
||
|
||
We have seen the differences between files under DOS/Win and Linux. As
|
||
for directories, under DOS/Win the root directory is \, under Linux it
|
||
is /. Similarly, nested directories are separated by \ under DOS/Win,
|
||
by / under Linux. Example of file paths:
|
||
|
||
|
||
|
||
DOS: C:\PAPERS\GEOLOGY\MID_EOC.TEX
|
||
Linux: /home/guido/papers/geology/middle_eocene.tex
|
||
|
||
|
||
|
||
As usual, .. is the parent directory and . is the current directory.
|
||
Remember that the system won't let you cd, rd, or md everywhere you
|
||
want. Each user has his or her stuff in a directory called `home',
|
||
given by the system administrator; for instance, on my PC my home dir
|
||
is /home/guido.
|
||
|
||
|
||
|
||
5.2. Directories Permissions
|
||
|
||
|
||
Directories, too, have permissions. What we have seen in Section
|
||
``Permissions and Ownership'' applies to directories as well (user,
|
||
group, and other). For a directory, rx means you can cd to that
|
||
directory, and w means that you can delete a file in the directory
|
||
(according to the file's permissions, of course), or the directory
|
||
itself.
|
||
|
||
For example, to prevent other users from snooping in /home/guido/text:
|
||
|
||
|
||
|
||
$ chmod o-rwx /home/guido/text
|
||
|
||
|
||
|
||
5.3. Directories: Translating Commands
|
||
|
||
|
||
|
||
DIR: ls, find, du
|
||
CD: cd, pwd
|
||
MD: mkdir
|
||
RD: rmdir
|
||
DELTREE: rm -rf
|
||
MOVE: mv
|
||
|
||
|
||
|
||
5.3.1. Examples
|
||
|
||
|
||
|
||
DOS Linux
|
||
---------------------------------------------------------------------
|
||
|
||
C:\GUIDO>DIR $ ls
|
||
C:\GUIDO>DIR FILE.TXT $ ls file.txt
|
||
C:\GUIDO>DIR *.H *.C $ ls *.h *.c
|
||
C:\GUIDO>DIR/P $ ls | more
|
||
C:\GUIDO>DIR/A $ ls -l
|
||
C:\GUIDO>DIR *.TMP /S $ find / -name "*.tmp"
|
||
C:\GUIDO>CD $ pwd
|
||
n/a - see note $ cd
|
||
ditto $ cd ~
|
||
ditto $ cd ~/temp
|
||
C:\GUIDO>CD \OTHER $ cd /other
|
||
C:\GUIDO>CD ..\TEMP\TRASH $ cd ../temp/trash
|
||
C:\GUIDO>MD NEWPROGS $ mkdir newprogs
|
||
C:\GUIDO>MOVE PROG .. $ mv prog ..
|
||
C:\GUIDO>MD \PROGS\TURBO $ mkdir /progs/turbo
|
||
C:\GUIDO>DELTREE TEMP\TRASH $ rm -rf temp/trash
|
||
C:\GUIDO>RD NEWPROGS $ rmdir newprogs
|
||
C:\GUIDO>RD \PROGS\TURBO $ rmdir /progs/turbo
|
||
|
||
|
||
|
||
Notes:
|
||
|
||
|
||
· when using rmdir, the directory to remove must be empty. To delete
|
||
a directory and all of its contents, use rm -rf (at your own risk).
|
||
|
||
· the character `~' is a shortcut for the name of your home
|
||
directory. The commands cd or cd ~ will take you to your home
|
||
directory from wherever you are; the command cd ~/tmp will take you
|
||
to /home/your_home/tmp.
|
||
|
||
· cd - ``undoes'' the last cd.
|
||
|
||
|
||
|
||
6. Floppies, Hard Disks, and the Like
|
||
|
||
|
||
There are two ways to manage devices under Linux: the DOS way and the
|
||
UNIX way. Take your pick.
|
||
|
||
|
||
|
||
6.1. Managing Devices the DOS Way
|
||
|
||
|
||
Most Linux distributions include the Mtools suite, a set of commands
|
||
that are perfectly equivalent to their DOS counterpart, but start with
|
||
an `m': i.e., mformat, mdir, mdel, mmd, and so on. They can even
|
||
preserve long file names, but not file permissions. If you configure
|
||
Mtools editing a file called /etc/mtools.conf (a sample is provided in
|
||
the distribution), you can also access the DOS/Win partition, the
|
||
CD--ROM, and the Zip drive. To format a fresh disk though, the mformat
|
||
command won't do. As root, you'll have to issue this command
|
||
beforehand: fdformat /dev/fd0H1440.
|
||
|
||
You can't access files on the floppy with a command like, say, less
|
||
a:file.txt! This is the disadvantage of the DOS way of accessing
|
||
disks.
|
||
|
||
|
||
|
||
6.2. Managing Devices the UNIX Way
|
||
|
||
|
||
UNIX has a different way to handle devices. There are no separate
|
||
volumes like A: or C:; a disk, be it a floppy or whatever, becomes
|
||
part of the local file system through an operation called
|
||
``mounting''. When you're done using the disk, before extracting it
|
||
you must ``unmount'' it.
|
||
|
||
Physically formatting a disk is one thing, making a file system on it
|
||
is another. The DOS command FORMAT A: does both things, but under
|
||
Linux there are separate commands. To format a floppy, see above; to
|
||
create a file system:
|
||
|
||
|
||
|
||
# mkfs -t ext2 -c /dev/fd0H1440
|
||
|
||
|
||
|
||
You can use dos, vfat (recommended) or other formats instead of ext2.
|
||
Once the disk is prepared, mount it with the command
|
||
|
||
|
||
|
||
# mount -t ext2 /dev/fd0 /mnt
|
||
|
||
|
||
|
||
specifying the right file system if you don't use ext2. Now you can
|
||
address the files in the floppy using /mnt instead of A: or B:.
|
||
Examples:
|
||
|
||
|
||
|
||
DOS Linux
|
||
---------------------------------------------------------------------
|
||
|
||
C:\GUIDO>DIR A: $ ls /mnt
|
||
C:\GUIDO>COPY A:*.* $ cp /mnt/* .
|
||
C:\GUIDO>COPY *.ZIP A: $ cp *.zip /mnt
|
||
C:\GUIDO>EDIT A:FILE.TXT $ jstar /mnt/file.txt
|
||
C:\GUIDO>A: $ cd /mnt
|
||
A:> _ /mnt/$ _
|
||
|
||
When you've finished, before extracting the disk you must unmount it
|
||
with the command
|
||
|
||
|
||
|
||
# umount /mnt
|
||
|
||
|
||
|
||
Obviously, you have to fdformat and mkfs only unformatted disks, not
|
||
previously used ones. If you want to use the drive B:, refer to
|
||
fd1H1440 and fd1 instead of fd0H1440 and fd0 in the examples above.
|
||
|
||
Needless to say, what applies to floppies also applies to other
|
||
devices; for instance, you may want to mount another hard disk or a
|
||
CD--ROM drive. Here's how to mount the CD--ROM:
|
||
|
||
|
||
|
||
# mount -t iso9660 /dev/cdrom /mnt
|
||
|
||
|
||
|
||
This was the ``official'' way to mount your disks, but there's a trick
|
||
in store. Since it's a bit of a nuisance having to be root to mount a
|
||
floppy or a CD--ROM, every user can be allowed to mount them this way:
|
||
|
||
|
||
· as root, do the following:
|
||
|
||
|
||
|
||
# mkdir /mnt/floppy ; mkdir /mnt/cdrom
|
||
# chmod 777 /mnt/floppy /mnt/cd*
|
||
# # make sure that the CD-ROM device is right
|
||
# chmod 666 /dev/hdb ; chmod 666 /dev/fd*
|
||
|
||
|
||
|
||
· add in /etc/fstab the following lines:
|
||
|
||
|
||
|
||
/dev/cdrom /mnt/cdrom iso9660 ro,user,noauto 0 0
|
||
/dev/fd0 /mnt/floppy vfat user,noauto 0 0
|
||
|
||
|
||
|
||
Now, to mount a DOS floppy and a CD--ROM:
|
||
|
||
|
||
|
||
$ mount /mnt/floppy
|
||
$ mount /mnt/cdrom
|
||
|
||
|
||
|
||
/mnt/floppy and /mnt/cdrom can now be accessed by every user. Remember
|
||
that allowing everyone to mount disks this way is a gaping security
|
||
hole, if you care.
|
||
|
||
Two useful commands are df, which gives information on the mounted
|
||
file systems, and du dirname which reports the disk space consumed by
|
||
the directory.
|
||
|
||
|
||
|
||
6.3. Backing Up
|
||
|
||
|
||
There are several packages to help you, but the very least you can do
|
||
for a multi-volume backup is (as root):
|
||
|
||
|
||
|
||
# tar -M -cvf /dev/fd0H1440 dir_to_backup/
|
||
|
||
|
||
|
||
Make sure to have a formatted floppy in the drive, and several more
|
||
ready. To restore your stuff, insert the first floppy in the drive
|
||
and do:
|
||
|
||
|
||
|
||
# tar -M -xpvf /dev/fd0H1440
|
||
|
||
|
||
|
||
7. What About Windows?
|
||
|
||
|
||
The ``equivalent'' of Windows is the graphic system X Window System.
|
||
Unlike Windows or the Mac, X11 wasn't designed for ease of use or to
|
||
look good, but just to provide graphic facilities to UNIX
|
||
workstations. These are the main differences:
|
||
|
||
|
||
· while Windows looks and feels the same all over the world, X11 does
|
||
not: it's much more configurable. X11's overall look is given by a
|
||
key component called ``window manager'', of which you have a wide
|
||
choice: fvwm, basic but nice and memory efficient, fvwm2-95,
|
||
Afterstep, WindowMaker, Enlightenment, and many more. The w.m. is
|
||
usually invoked from .xinitrc;
|
||
|
||
· your w.m. can be configured so as a window acts as under, er,
|
||
Windows: you click on it and it comes to foreground. Another
|
||
possibility is that it comes to foreground when the mouse moves
|
||
over it (``focus''). Also, the placement of windows on the screen
|
||
can be automatic or interactive: if a strange frame appears instead
|
||
of your program, left click where you want it to appear;
|
||
|
||
· most features can be tailored editing one or more configuration
|
||
files. Read the docs of your w.m.: the configuration file can be
|
||
.fvwmrc, .fvwm2rc95, .steprc, etc. A sample configuration file is
|
||
typically found in /etc/X11/window-manager-name/system.window-
|
||
manager-name;
|
||
|
||
· X11 applications are written using special libraries (``widget
|
||
sets''); as several are available, applications look different. The
|
||
most basic ones are those that use the Athena widgets (2--D look;
|
||
xdvi, xman, xcalc); others use Motif (netscape), others still use
|
||
Tcl/Tk, Qt, Gtk, XForms, and what have you. Nearly all of these
|
||
libraries provide roughly the same look and feel as Windows;
|
||
|
||
· the feel, unfortunately, can be incoherent. For instance, if you
|
||
select a line of text using the mouse and press <BACKSPACE>, you'd
|
||
expect the line to disappear, right? This won't work with
|
||
Athena--based apps, but it does with other widget sets;
|
||
|
||
· how scrollbars and resizing work depends on the w.m. and the widget
|
||
set. Tip: if you find that the scrollbars don't behave as you would
|
||
expect, try using the central button or the two buttons together to
|
||
move them;
|
||
|
||
· applications don't have an icon by default, but they can have many.
|
||
Most w.m. feature a menu you recall by clicking on the desktop
|
||
(``root window''); needless to say, the menu can be tailored. To
|
||
change the root window appearance, use xsetroot or xloadimage;
|
||
|
||
· the clipboard can only contain text, and behaves strange. Once
|
||
you've selected text, it's already copied to the clipboard: move
|
||
elsewhere and press the central button to paste it. There's an
|
||
application, xclipboard, that provides for multiple clipboard
|
||
buffers;
|
||
|
||
· drag and drop is an option, and is only available if you use X11
|
||
applications and/or w.m. that support it.
|
||
|
||
This said, good news for you. There are projects that aim at making
|
||
X11 look and behave as coherently as Windows. Gnome,
|
||
<http://www.gnome.org>, and KDE, <http://www.kde.org>, are simply
|
||
awesome. Most likely your distribution uses either or both. You won't
|
||
regret your Windows desktop anymore!
|
||
|
||
|
||
|
||
8. Tailoring the System
|
||
|
||
|
||
|
||
8.1. System Initialisation Files
|
||
|
||
|
||
Two important files under DOS are AUTOEXEC.BAT and CONFIG.SYS, which
|
||
are used at boot time to initialise the system, set some environment
|
||
variables like PATH and FILES, and possibly launch a program or batch
|
||
file. Additionally, Windows has the infamous registry---one of the
|
||
worst ideas ever conceived in computer science.
|
||
|
||
Under Linux there are lots of initialisation files, some of which you
|
||
had better not tamper with until you know exactly what you are doing;
|
||
they reside in the /etc tree. All configuration can be done editing
|
||
plain text files. If all you need is setting the PATH and other
|
||
environment variables, or you want to change the login messages or
|
||
automatically launch a program on login, have a look at the following
|
||
files:
|
||
|
||
|
||
|
||
FILES NOTES
|
||
|
||
/etc/issue sets pre-login message
|
||
/etc/motd sets post-login message
|
||
/etc/profile sets $PATH and other variables, etc.
|
||
/etc/bashrc sets aliases and functions, etc.
|
||
/home/your_home/.bashrc sets your aliases + functions
|
||
/home/your_home/.bash_profile or
|
||
/home/your_home/.profile sets environment + starts your progs
|
||
|
||
|
||
|
||
If the latter file exists (note that it is a hidden file), it will be
|
||
read after the login, and the commands therein will be executed.
|
||
|
||
Example---look at this .bash_profile:
|
||
|
||
|
||
______________________________________________________________________
|
||
# I am a comment
|
||
echo Environment:
|
||
printenv | less # equivalent of command SET under DOS
|
||
alias d='ls -l' # easy to understand what an alias is
|
||
alias up='cd ..'
|
||
echo "I remind you that the path is "$PATH
|
||
echo "Today is `date`" # use the output of the command 'date'
|
||
echo "Have a good day, "$LOGNAME
|
||
# The following is a "shell function"
|
||
ctgz() # List the contents of a .tar.gz archive.
|
||
{
|
||
for file in $*
|
||
do
|
||
gzip -dc ${file} | tar tf -
|
||
done
|
||
}
|
||
# end of .profile
|
||
______________________________________________________________________
|
||
|
||
|
||
|
||
$PATH and $LOGNAME, you guessed right, are environment variables.
|
||
There are many others to play with; for instance, RMP for apps like
|
||
less or bash.
|
||
|
||
Putting this line in your /etc/profile will provide the rough
|
||
equivalent of PROMPT $P$G:
|
||
|
||
|
||
|
||
export PS1="\w\\$ "
|
||
|
||
|
||
|
||
8.2. Program Initialisation Files
|
||
|
||
|
||
Under Linux, virtually everything can be tailored to your needs. Most
|
||
programs have one or more initialisation files you can fiddle with,
|
||
often as a .prognamerc in your home dir. The first ones you'll want to
|
||
modify are:
|
||
|
||
|
||
· .inputrc: used by bash to define key bindings;
|
||
|
||
· .xinitrc: used by startx to initialise X Window System;
|
||
|
||
· .fvwmrc: used by the window manager fvwm.
|
||
|
||
· .joerc, .jstarrc: used by the editor joe;
|
||
|
||
· .jedrc: used by the editor jed;
|
||
|
||
· .pinerc: used by the mail reader pine;
|
||
|
||
· .Xdefault: used by many X programs.
|
||
|
||
For all of these and the others you'll come across sooner or later,
|
||
RMP. Perhaps I could interest you in the Configuration HOWTO,
|
||
<http://www.linuxdoc.org/HOWTO/Config-HOWTO.html>?
|
||
|
||
|
||
|
||
9. Networking: Concepts
|
||
|
||
|
||
Not only is ``Dialup Networking'' available under Linux, it's also
|
||
more stable and quicker. The name of the game is ``PPP'', the protocol
|
||
employed for connecting to the Internet using modems. All you need is
|
||
a tool that dials out and makes the connection.
|
||
|
||
To retrieve your mail from the ISP's server you need a tool called
|
||
``email fetcher'' that uses the POP protocol; when the mail is fetched
|
||
it will appear as though it had been directly delivered to your Linux
|
||
box. You'll then use a MUA (Mail User Agent) like pine, mutt, elm or
|
||
many others to manage it.
|
||
|
||
While under Windows the dialer is automatically invoked when you
|
||
launch an Internet application, under Linux the path is the other way
|
||
round: you dial first, then launch the application. A thing called
|
||
diald provides the usual behaviour. Installing and configuring dialup
|
||
networking used to be one of the most difficult things to do under
|
||
Linux, but not anymore: please consult the Configuration HOWTO.
|
||
|
||
Finally, a word about ``Network neighborhood'': you can make your
|
||
Linux workstation appear as Windows NT/9x in a local network of
|
||
Windows machines! The magic word is Samba: not the lively Brazilian
|
||
dance, but an implementation of the SMB protocol for Linux. Go to
|
||
<http://samba.anu.edu.au/samba>.
|
||
|
||
|
||
|
||
10. A Bit of Programming
|
||
|
||
|
||
|
||
10.1. Shell Scripts: .BAT Files on Steroids
|
||
|
||
|
||
If you used .BAT files to create shortcuts of long command lines (I
|
||
did a lot), this goal can be attained by inserting appropriate alias
|
||
lines (see example above) in profile or .bash_profile. But if your
|
||
.BATs were more complicated, then you'll love the scripting language
|
||
made available by the shell: it's as powerful as good ol' QBasic, if
|
||
not more. It has variables, structures like while, for, case, if...
|
||
then... else, and lots of other features: it can be a good alternative
|
||
to a ``real'' programming language.
|
||
|
||
To write a script---the equivalent of a .BAT file under DOS---all you
|
||
have to do is write a standard ASCII file containing the instructions,
|
||
save it, then make it executable with the command chmod +x
|
||
<scriptfile>. To execute it, type its name.
|
||
|
||
A word of warning. The system editor is called vi, and in my
|
||
experience most new users find it very difficult to use. I'm not going
|
||
to explain how to use it; please consult Matt Welsh's book or search
|
||
for a tutorial on the net. Suffice it here to say that:
|
||
|
||
|
||
· to insert some text, type i then your text;
|
||
|
||
· to delete characters, type <ESC> then x;
|
||
|
||
· to quit vi whithout saving, type <ESC> then :q!
|
||
|
||
· to save and quit, type <ESC> then :wq.
|
||
|
||
A good beginner editor is joe: invoking it by typing jstar you'll get
|
||
the same key bindings as the DOS/Win editor. jed in WordStar or IDE
|
||
mode is even better. Please consult Section ``Where to Find
|
||
Applications'' to see where to get these editors.
|
||
|
||
Writing scripts under bash is such a vast subject it would require a
|
||
book by itself, and I will not delve into the topic any further. I'll
|
||
just give you an example of shell script, from which you can extract
|
||
some basic rules:
|
||
|
||
|
||
______________________________________________________________________
|
||
#!/bin/sh
|
||
# sample.sh
|
||
# I am a comment
|
||
# don't change the first line, it must be there
|
||
echo "This system is: `uname -a`" # use the output of the command
|
||
echo "My name is $0" # built-in variables
|
||
echo "You gave me the following $# parameters: "$*
|
||
echo "The first parameter is: "$1
|
||
echo -n "What's your name? " ; read your_name
|
||
echo notice the difference: "hi $your_name" # quoting with "
|
||
echo notice the difference: 'hi $your_name' # quoting with '
|
||
DIRS=0 ; FILES=0
|
||
for file in `ls .` ; do
|
||
if [ -d ${file} ] ; then # if file is a directory
|
||
DIRS=`expr $DIRS + 1` # DIRS = DIRS + 1
|
||
elif [ -f ${file} ] ; then
|
||
FILES=`expr $FILES + 1`
|
||
fi
|
||
case ${file} in
|
||
*.gif|*jpg) echo "${file}: graphic file" ;;
|
||
*.txt|*.tex) echo "${file}: text file" ;;
|
||
*.c|*.f|*.for) echo "${file}: source file" ;;
|
||
*) echo "${file}: generic file" ;;
|
||
esac
|
||
done
|
||
echo "there are ${DIRS} directories and ${FILES} files"
|
||
ls | grep "ZxY--%%WKW"
|
||
if [ $? != 0 ] ; then # exit code of last command
|
||
echo "ZxY--%%WKW not found"
|
||
fi
|
||
echo "enough... type 'man bash' if you want more info."
|
||
______________________________________________________________________
|
||
|
||
|
||
|
||
10.2. C for Yourself
|
||
|
||
|
||
Under UNIX, the system language is C, love it or hate it. Scores of
|
||
other languages (Java, FORTRAN, Pascal, Lisp, Basic, Perl, awk...) are
|
||
also available.
|
||
|
||
Taken for granted that you know C, here are a couple of guidelines for
|
||
those of you who have been spoilt by Turbo C++ or one of its DOS kin.
|
||
Linux's C compiler is called gcc and lacks all the bells and whistles
|
||
that usually accompany its DOS counterparts: no IDE, on-line help,
|
||
integrated debugger, etc. It's just a rough command-line compiler,
|
||
very powerful and efficient. To compile your standard hello.c you'll
|
||
do:
|
||
|
||
|
||
|
||
$ gcc hello.c
|
||
|
||
|
||
|
||
which will create an executable file called a.out. To give the
|
||
executable a different name, do
|
||
|
||
|
||
|
||
$ gcc -o hola hello.c
|
||
|
||
|
||
|
||
To link a library against a program, add the switch -l<libname>. For
|
||
example, to link in the math library:
|
||
|
||
|
||
|
||
$ gcc -o mathprog mathprog.c -lm
|
||
|
||
|
||
|
||
(The -l<libname> switch forces gcc to link the library
|
||
/usr/lib/lib<libname>.so; so -lm links /usr/lib/libm.so).
|
||
|
||
So far, so good. But when your prog is made of several source files,
|
||
you'll need to use the utility make. Let's suppose you have written an
|
||
expression parser: its source file is called parser.c and #includes
|
||
two header files, parser.h and xy.h. Then you want to use the routines
|
||
in parser.c in a program, say, calc.c, which in turn #includes
|
||
parser.h. What a mess! What do you have to do to compile calc.c?
|
||
|
||
You'll have to write a so-called Makefile, which teaches the compiler
|
||
the dependencies between sources and objects files. In our example:
|
||
|
||
|
||
|
||
______________________________________________________________________
|
||
# This is Makefile, used to compile calc.c
|
||
# Press the <TAB> key where indicated!
|
||
|
||
calc: calc.o parser.o
|
||
<TAB>gcc -o calc calc.o parser.o -lm
|
||
# calc depends on two object files: calc.o and parser.o
|
||
|
||
calc.o: calc.c parser.h
|
||
<TAB>gcc -c calc.c
|
||
# calc.o depends on two source files
|
||
|
||
parser.o: parser.c parser.h xy.h
|
||
<TAB>gcc -c parser.c
|
||
# parser.o depends on three source files
|
||
|
||
# end of Makefile.
|
||
______________________________________________________________________
|
||
|
||
|
||
|
||
Save this file as Makefile and type make to compile your program;
|
||
alternatively, save it as calc.mak and type make -f calc.mak, and of
|
||
course RMP. You can invoke some help about the C functions, that are
|
||
covered by man pages, section 3; for example,
|
||
|
||
|
||
|
||
$ man 3 printf
|
||
|
||
|
||
|
||
To debug your programs, use gdb. info gdb to learn how to use it.
|
||
|
||
There are lots of libraries available; among the first you may want to
|
||
use are ncurses (textmode effects), and svgalib (console graphics).
|
||
Many editors can act as an IDE; emacs and jed, for instance, also
|
||
feature syntax highlighting, automatic indent, and so on.
|
||
Alternatively, get the package rhide from
|
||
<ftp://metalab.unc.edu:/pub/Linux/devel/debuggers/>. It's a Borland
|
||
IDE clone, and chances are that you'll like it.
|
||
|
||
|
||
|
||
10.3. X11 Programming
|
||
|
||
|
||
If you feel brave enough to tackle X11 programming (it's not that
|
||
difficult), there are several libraries that make writing X11 programs
|
||
a breeze. The main sites to visit are those of GTK+,
|
||
<http://www.gtk.org>, and Qt, <http://www.troll.no>. Gtk+ is a C-
|
||
based widget set originally written for the graphic package The GIMP (
|
||
<http://www.gimp.org>), and is used by the Gnome environment.
|
||
Kdeveloper is based on C++-based Qt, used by KDE. Most likely, you'll
|
||
use one of these.
|
||
|
||
Some of the best tools for visual programming are Kdevelop for Qt,
|
||
<http://www.kdevelop.org>, and Glade for GTK+, <http://glade.pn.org>.
|
||
This page has more information: <http://www.free-soft.org/guitool/>.
|
||
|
||
|
||
|
||
10.3.1. Multi-Platform Programming
|
||
|
||
|
||
Wouldn't it be nice if you could write code that compiled seamlessly
|
||
under Linux and Windows using gcc? As of this writing, there are some
|
||
widget sets that allow for more-or-less stable multi-platform
|
||
programming. As far as stability and completeness are concerned
|
||
though, I would say that the choice is narrowed down to only one:
|
||
FLTK, the Fast Light Tool Kit <http://www.fltk.org>. It's amazingly
|
||
small, quick, and stable. It also has a semi-visual builder called
|
||
Fluid.
|
||
|
||
|
||
|
||
11. The Remaining 1%
|
||
|
||
|
||
Much more than 1%, actually...
|
||
|
||
|
||
|
||
11.1. Running DOS/Windows Apps
|
||
|
||
|
||
Yes, you can to some extent run DOS and Windows applications under
|
||
Linux! There are two emulators that are quite good: Dosemu (
|
||
<http://www.dosemu.org>) and Wine ( <http://www.winehq.com>). The
|
||
latter is getting better release after release, and the list of
|
||
runnable applications is getting larger. It even runs Word and Excel!
|
||
|
||
|
||
|
||
11.2. Using tar and gzip
|
||
|
||
|
||
Under UNIX there are some widely used applications to archive and
|
||
compress files. tar is used to make archives---it's like PKZIP or
|
||
Winzipbut it doesn't compress, it only archives. To make a new
|
||
archive:
|
||
|
||
|
||
|
||
$ tar cvf <archive_name.tar> <file> [file...]
|
||
|
||
|
||
|
||
To extract files from an archive:
|
||
|
||
|
||
|
||
$ tar xvf <archive_name.tar> [file...]
|
||
|
||
|
||
|
||
To list the contents of an archive:
|
||
|
||
|
||
|
||
$ tar tf <archive_name.tar> | less
|
||
|
||
|
||
|
||
You can compress files using compress, which is obsolete and shouldn't
|
||
be used any more, or gzip:
|
||
|
||
|
||
|
||
$ compress <file>
|
||
$ gzip <file>
|
||
|
||
|
||
|
||
that creates a compressed file with extension .Z (compress) or .gz
|
||
(gzip). These programs can compress only one file at a time. To
|
||
decompress:
|
||
|
||
|
||
|
||
$ compress -d <file.Z>
|
||
$ gzip -d <file.gz>
|
||
|
||
|
||
|
||
RMP.
|
||
|
||
There are also the unarj, zip and unzip (PK??ZIP compatible)
|
||
utilities. Files with extension .tar.gz or .tgz (archived with tar,
|
||
then compressed with gzip) are as common in the UNIX world as .ZIP
|
||
files are under DOS. Here's how to list the contents of a .tar.gz
|
||
archive:
|
||
|
||
|
||
|
||
$ tar ztf <file.tar.gz> | less
|
||
|
||
|
||
|
||
11.3. Installing Applications
|
||
|
||
|
||
First of all: installing packages is root's work. Most Linux
|
||
applications are distributed as a .tar.gz archive, which typically
|
||
will contain a directory aptly named containing files and/or
|
||
subdirectories. A good rule is to install these packages from
|
||
/usr/local with the command
|
||
|
||
|
||
|
||
# tar zxf <archive.tar.gz>
|
||
|
||
|
||
|
||
reading then the README or INSTALL file. In most cases, the
|
||
application is distributed in source, which you'll have to compile;
|
||
often, typing make then make install will suffice. If the archive
|
||
contains a configure script, run it first. Obviously, you'll need the
|
||
gcc or g++ compiler.
|
||
|
||
Other archives have to be unpacked from /; this is the case with
|
||
Slackware's .tgz archives. Other archives contain the files but not a
|
||
subdirectory - careful not to mess things up! Always list the contents
|
||
of the archive before installing it.
|
||
Debian and Red Hat have their own archive format; respectively, .deb
|
||
and .rpm. The latter is widely used by many distributions; to install
|
||
an rpm package, type
|
||
|
||
|
||
|
||
# rpm -i package.rpm
|
||
|
||
|
||
|
||
11.4. Tips You Can't Do Without
|
||
|
||
|
||
Backscrolling: pressing <SHIFT + PAG UP> (the grey key) allows you to
|
||
backscroll a few pages, depending on how much video memory you have.
|
||
|
||
Resetting the screen: if you happen to more or cat a binary file, your
|
||
screen may end up full of garbage. To fix it, blind type reset or this
|
||
sequence of characters: echo CTRL-V ESC c RETURN.
|
||
|
||
Pasting text: in console, see below; in X, click and drag to select
|
||
the text in an xterm window, then click the middle button (or the two
|
||
buttons together if you have a two-button mouse) to paste. There is
|
||
also xclipboard (alas, only for text); don't get confused by its very
|
||
slow response.
|
||
|
||
Using the mouse: if you installed gpm, a mouse driver for the console,
|
||
you can click and drag to select text, then right click to paste the
|
||
selected text. It works across different VCs.
|
||
|
||
Messages from the kernel: have a look at /var/adm/messages or
|
||
/var/log/messages as root to see what the kernel has to tell you,
|
||
including bootup messages. The command dmesg is also handy.
|
||
|
||
|
||
|
||
11.5. Where to Find Applications
|
||
|
||
|
||
If you're wondering whether you can replace your old and trusted
|
||
DOS/Win application with a Linux one, I suggest that you browse the
|
||
main Linux software repository: <ftp://metalab.unc.edu/pub/Linux>.
|
||
Other good starting places are the ``Linux Applications and Utilities
|
||
Page'' <http://www.xnet.com/~blatura/linapps.shtml>, the ``official''
|
||
Linux page <http://www.linux.org>, and <http://freshmeat.net>.
|
||
|
||
|
||
|
||
11.6. A Few Things You Couldn't Do
|
||
|
||
|
||
Linux can do an awful lot of things that were cumbersome, difficult or
|
||
impossible do to with DOS/Windows. Here's a short list that may whet
|
||
your appetite:
|
||
|
||
|
||
· at allows you to run programs at a specified time;
|
||
|
||
· awk is a simple yet powerful language to manipulate data files (and
|
||
not only). For example, being data.dat your multi field data file,
|
||
|
||
|
||
|
||
$ awk '$2 ~ "abc" {print $1, "\t", $4}' data.dat
|
||
|
||
|
||
|
||
prints out fields 1 and 4 of every line in data.dat whose second field
|
||
contains ``abc''.
|
||
|
||
· cron is useful to perform tasks periodically, at specified date and
|
||
time. Type man 5 crontab.
|
||
|
||
· file <filename> tells you what filename is (ASCII text, executable,
|
||
archive, etc.);
|
||
|
||
· find (see also Section ``Directories: Translating Commands'') is
|
||
one of the most powerful and useful commands. It's used to find
|
||
files that match several characteristics and perform actions on
|
||
them. General use of find is:
|
||
|
||
|
||
|
||
$ find <directory> <expression>
|
||
|
||
|
||
|
||
where <expression> includes search criteria and actions. Examples:
|
||
|
||
|
||
|
||
$ find . -type l -exec ls -l {} \;
|
||
|
||
|
||
|
||
finds all the files that are symbolic links and shows what they point
|
||
to.
|
||
|
||
|
||
|
||
$ find / -name "*.old" -ok rm {} \;
|
||
|
||
|
||
|
||
finds all the files matching the pattern and deletes them, asking for
|
||
your permission first.
|
||
|
||
|
||
|
||
$ find . -perm +111
|
||
|
||
|
||
|
||
finds all the files whose permissions match 111 (executable).
|
||
|
||
|
||
|
||
$ find . -user root
|
||
|
||
finds all the files that belong to root. Lots of possibilities
|
||
here---RMP.
|
||
|
||
· grep finds text patterns in files. For example,
|
||
|
||
|
||
|
||
$ grep -l "geology" *.tex
|
||
|
||
|
||
|
||
lists the files *.tex that contain the word ``geology''. The variant
|
||
zgrep works on gzipped files. RMP;
|
||
|
||
· regular expressions are a complex but darn powerful way of
|
||
performing search operations on text. For example, ^a[^a-
|
||
m]X{4,}txt$ matches a line that starts with `a', followed by any
|
||
character except those in the interval a-m, followed by 4 or more
|
||
`X', and ends in `txt'. You use regular expressions with advanced
|
||
editors, less, and many other applications. man grep for an
|
||
introduction.
|
||
|
||
· script <script_file> dumps the screen contents on script_file until
|
||
you issue the command exit. Useful for debugging;
|
||
|
||
· sudo allows users to perform some of root's tasks (e.g. formatting
|
||
and mounting disks; RMP);
|
||
|
||
· uname -a gives you info about your system;
|
||
|
||
· zcat and zless are useful for browsing and piping gzipped files
|
||
without decompressing them. For example:
|
||
|
||
|
||
|
||
$ zless textfile.gz
|
||
$ zcat textfile.gz | lpr
|
||
|
||
|
||
|
||
· The following commands often come in handy: bc, cal, chsh, cmp,
|
||
cut, fmt, head, hexdump, nl, passwd, printf, sort, split, strings,
|
||
tac, tail, tee, touch, uniq, w, wall, wc, whereis, write, xargs,
|
||
znew. RMP.
|
||
|
||
|
||
|
||
11.7. Practicing UNIX under DOS/Win
|
||
|
||
|
||
Believe it or not, there are fine tools that provide a UNIX-like
|
||
environment under DOS/Windows! One is the Djgpp suite (
|
||
<http://www.delorie.com/djgpp/>) for DOS, while Cygwin (
|
||
<http://www.cygnus.com/cygwin>) is a more complex port for Win32. Both
|
||
include the same GNU development tools and utilities as Linux; you
|
||
won't get the same stability and performance, though.
|
||
|
||
If you'd like to have a taste of Linux, try out Djgpp. Download and
|
||
install the following files (as of this writing, the latest version is
|
||
2.02): djdev202.zip, bnu281b.zip, bsh1147b.zip, fil316b.zip,
|
||
find41b.zip, grep22b.zip, gwk303b.zip, lss332b.zip, shl112b.zip..
|
||
Installation instructions are provided, and you can find assistance on
|
||
<news:comp.os.msdos.djgpp>.
|
||
|
||
In particular, using bash under DOS/Win is a whiff of fresh air. To
|
||
configure it properly, edit the supplied file BOOT.BAT to reflect your
|
||
installation, then put these files in your home directory (in the
|
||
Windows partition) instead of those provided:
|
||
|
||
|
||
|
||
# this is _bashrc
|
||
|
||
LS_OPTIONS="-F -s --color=yes"
|
||
alias cp='cp -i'
|
||
alias d='ls -l'
|
||
alias l=less
|
||
alias ls="ls $LS_OPTIONS"
|
||
alias mv='mv -i'
|
||
alias rm='rm -i'
|
||
alias u='cd ..'
|
||
|
||
|
||
|
||
# this is _bprof
|
||
if [ -f ~/_bashrc ]; then
|
||
. ~/_bashrc
|
||
fi
|
||
PS1='\w\$ '
|
||
PS2='> '
|
||
CDPATH="$CDPATH:~"
|
||
# stuff for less(1)
|
||
LESS="-M-Q" # long prompt, silent
|
||
LESSEDIT="%E ?lt+%lt. %f" # edit top line
|
||
VISUAL="jed" # editor
|
||
LESSCHARSET=latin1 # visualise accented letters
|
||
export PS1 PS2 CDPATH LS_OPTIONS LESS LESSEDIT LESSOPEN VISUAL LESSCHARSET
|
||
|
||
|
||
|
||
11.8. Common Extensions and Related Programs
|
||
|
||
|
||
You may come across scores of file extensions. Excluding the more
|
||
exotic ones (i.e. fonts, etc.), here's a list of who's what:
|
||
|
||
|
||
· 1 ... 8: man pages. Read them with groff -Tascii -man <file.1>.
|
||
|
||
· arj: archive made with arj.
|
||
|
||
· dvi: output file produced by TeX (see below). xdvi to visualise it;
|
||
dvips to turn it into a PostScript .ps file.
|
||
|
||
· gz: archive made with gzip.
|
||
|
||
· info: info file (sort of alternative to man pages). Get info.
|
||
|
||
· lsm: Linux Software Map file. It's a plain ASCII file containing
|
||
the description of a package.
|
||
|
||
|
||
· ps: PostScript file. To visualise or print it get gs and,
|
||
optionally, ghostview or gv.
|
||
|
||
· rpm: Red Hat package. You can install it on any system using the
|
||
package manager rpm.
|
||
|
||
· taz, tar.Z: archive made with tar and compressed with compress.
|
||
|
||
· tgz, tar.gz: archive made with tar and compressed with gzip.
|
||
|
||
· tex: text file to submit to TeX, a powerful typesetting system. Get
|
||
the package tex, available in many distributions.
|
||
|
||
· texi: texinfo file, can produce both TeX and info files (cp.
|
||
info). Get texinfo.
|
||
|
||
· xbm, xpm, xwd: graphic file.
|
||
|
||
· Z: archive made with compress.
|
||
|
||
|
||
|
||
11.9. Converting Files
|
||
|
||
|
||
If you need to exchange text files between DOS/Win and Linux, be aware
|
||
of the ``end of line'' problem. Under DOS, each line of text ends with
|
||
CR/LF (that is, ASCII 13 + ASCII 10), with LF under Linux. If you edit
|
||
a DOS text file under Linux, each line will likely end with a
|
||
strange--looking `M' character; a Linux text file under DOS will
|
||
appear as a kilometric single line with no paragraphs. There are a
|
||
couple of tools, dos2unix and unix2dos, to convert the files.
|
||
|
||
If your text--only files contain accented characters, make sure they
|
||
are made under Windows (with Notepad) and not under plain DOS;
|
||
otherwise, all accented characters will be screwed up.
|
||
|
||
|
||
|
||
11.10. Free Office Suites
|
||
|
||
|
||
Yes, you can have for free what would otherwise cost a lot of money!
|
||
|
||
StarOffice ( <http://www.sun.com/staroffice>.) is currently the only
|
||
choice, though Koffice is down the pipeline (
|
||
<http://www.koffice.org>). StarOffice is big and slow, but very good
|
||
anyway: it offers a lot of functionality not found in Microsoft
|
||
Office. It can also read and write Word and Excel files, although the
|
||
conversion isn't always perfect.
|
||
|
||
Another good package is Corel WordPerfect, a free edition of which is
|
||
available for download. Need I say more? Go fetch it:
|
||
<http://www.corel.com>.
|
||
|
||
|
||
|
||
12. The End, for Now
|
||
|
||
|
||
Congratulations! You have now grasped a little bit of UNIX and are
|
||
ready to start working. Remember that your knowledge of the system is
|
||
still limited, and that you are expected to do more practice with
|
||
Linux to use it comfortably. But if all you had to do was get a bunch
|
||
of applications and start working with them, what I included here is
|
||
enough.
|
||
I'm sure you'll enjoy using Linux and will keep learning more about
|
||
it---everybody does. I bet, too, that you'll never go back to DOS/Win!
|
||
I hope I made myself understood and did a good service to my 3 or 4
|
||
readers.
|
||
|
||
|
||
|
||
12.1. Copyright
|
||
|
||
|
||
Copyright (c) by Guido Gonzato, ggonza at tin.it. This document may be
|
||
distributed only subject to the terms and conditions set forth in the
|
||
LDP License at <http://www.linuxdoc.org/COPYRIGHT.html>, except that
|
||
this document must not be distributed in modified form without the
|
||
author's consent.
|
||
|
||
If you have questions, please refer to the Linux Documentation Project
|
||
home page, <http://www.linuxdoc.org>
|
||
|
||
|
||
|
||
12.2. Disclaimer
|
||
|
||
|
||
This document is provided ``as is''. I put great effort into writing
|
||
it as accurately as I could, but you use the information contained in
|
||
it at your own risk. In no event shall I be liable for any damages
|
||
resulting from the use of this work.
|
||
|
||
Many thanks to Matt Welsh, the author of ``Linux Installation and
|
||
Getting Started'', to Ian Jackson, the author of ``Linux frequently
|
||
asked questions with answers'', to Giuseppe Zanetti, the author of the
|
||
book ``Linux'', to all the folks who emailed me suggestions, and
|
||
especially to Linus Torvalds and GNU who gave us Linux.
|
||
|
||
Feedback is welcome. For any requests, suggestions, flames, etc., feel
|
||
free to contact me.
|
||
|
||
Enjoy Linux and life,
|
||
|
||
Guido =8-)
|
||
|
||
|
||
|