<chapter><title>Embedded Konsole</title>
<para>
EmbeddedKonsole is Opie's terminal emulator.  From here you can do pretty much
anything (since Linux is actually a command line based OS by itself).  I will
not go into much detail on using the linux command line, as that is covered in
many other places (http://www.tldp.org is a good place to start, or read
O'Reilly's <citation>Running Linux</citation> for a comprehensive look at Linux
for the beginner).  I will, however, give a quick overview of using a Linux
shell.
</para>

<section><title>Using Embedded Konsole</title>
<para>
Along the top of the window is a row of menus and icons.  The "Font" menu lets
you select the font size that you want the console to use, while the Options
menu lets you select various options.  Below this row of menus and icons is a
pulldown list with various common commands in it.
</para>

<section><title>Options Menu</title>
<para>
The first submenu in the options menu is the "Command List" menu, which lets
you edit or hide the command list pulldown.  The "Tabs on top" or "Tabs on
bottom" (depending on which is currently enabled) allows you to select where
the tabs representing multiple terminal sessions are drawn.  The "Colors" 
submenu lets you select from a color scheme, or make your own, and the "Scroll
Bar" submenu lets you select where or if the scroll bar is drawn.
</para>
</section>
<section><title>Icons</title>
<para>
The row of icons to the right of the menus allows you to type common keystrokes
without having an input method visible, as well as some other things.
</para>
<para>
The icon all the way on the left will open a new terminal session in a new tab,
while the icon all the way on the right will paste text from the clipboard into
the terminal.
</para>
<para>
The other icons are the same as typing (from left to right) enter, space, tab
(for tab completion), up, and down (for the command history).
</para>
</section>
<section><title>Command List</title>
<para>
The command list is a pulldown menu with a list of commonly used commands.
Selecting one will type the command into the terminal wherever the cursor is.
You can edit or hide this menu from <GUIMenu>Options</GUIMenu>&arrow;
<GUIMenuItem>Command List.</GUIMenuItem>
</para>
</section>
</section>

<section><title>What is a Shell</title>
<para>
A shell is a program that accepts input from a user, and runs commands.  Each
"command" in the shell is actually a separate program (unless you are using a
shell like BusyBox, which makes some of the more common commands part of its own
program in order to save space).  Shells can actually be very powerful, and many 



of them allow you to write something called "shell scripts" which are just a
sequence of commands, sometimes with some flow control statements, saved to a 
file and run each time the script is run.  For the most part, the average user
does not need to know about any of this, though.  If you are running Opie on the
Familiar distribution, it is advisable to install the bash shell (ipkg install
bash) because it offers things like tab completion, use of the backspace key,
and a command history, as well as offering a more advanced scripting languauge
than most other shells.
</para>
</section>

<section><title>Running Programs</title>
<para>
To run a program or a command (remember, a command is just another program), you
simply type the name of the program and hit "Return" (in Linux, program names 
do not have a special suffix like they do in windows, in fact the "."
character has no special meaning unless it is at the begining of a filename, in
which case it makes the file "hidden").  When you type a program name and hit
"Return" the shell looks in a special list of directories called your 
"path", and if it cannot find it in any of those directories, it stops looking
and tells you it could not find them.  If you want to run a program that is not 
in your path, you must specify an absolute or relative path to that program.
For instance, to run a program that is in the directory you are currently in,
you would type <literal>./program</literal> ("./" is a special directory that
is explained below), or to run a program in /home/username/ you would call
<literal>/home/username/program</literal>.
</para>
<para>
Most programs take "arguments" when run from the command line.  An argument is
a string that contains no spaces that changes how the program behaves (a text
editor, for instance, might take a single argument, which would be the name of
the file you wish to edit).  Usually, you can use the arguments "-h" or 
"--help" to get a list of the common arguments that that program takes, along
with a short usage description, and a short description of what each argument 
does.
</para>
</section>

<section><title>Basic Navigation</title>
<para>
The command that you will use most often in the shell is probably the "cd"
command, which stands for "change directory."  With this command, you can move
around in the file system, by issuing the command like this: <userinput>cd
<replaceable>[new directory]</replaceable></userinput>, where <replaceable>[new
directory]</replaceable> is the directory you want to move to.
This directory name does not have to include the entire directory structure, but
can be "relative" which means it assumes you are talking about directories
relative to the directory you are in.  For example, if you are in a directory
called /home/username and you want to move to the directory 
/home/username/other/dir you could simply type <userinput>cd
other/dir</userinput> and you would end up in /home/username/other/dir.  You can
also specify a full, or "absolute" path, by specifying the entire path name
starting with / ( / is a special directory called the "root" directory, and does
not have a "parent" directory, which means that it is not in any other
directory).  There are also two special directories called "./" and "../".
The "./" directory is the current directory you are in, and you will probably
never use this in conjunction with the cd command (why would you want to move to
the directory you are already in?).  The "../" directory represents the parent
directory of the directory you are currently in, so if you are in
/home/username, ../ is the same as /home.  You can string several ../'s
together, so if you are in /home/username/dir/ ../../ represents /home.  There
is one other special directory, called "~/" that points to your home
directory (usually /home/username or /root for the root user).
</para>
</section>

<section><title>Moving Files</title>
<para>
To move files around, you need to use the "cp" (copy) and "mv" (move)
commands.  Both of these are run the same way: <userinput>command originalfile
newfile</userinput>.  The only difference is that cp creates a new file without
touching the old one, while mv deletes the original file.  The two path names
can be either absolute or relative.  If you only specify a directory for the
destination, and no filename, it will use the filename for the original file.
</para>
</section>

<section><title>Deleting Files</title>
<para>
To delete a file, run the "rm" command, and to delete a directory, run the
"rmdir" command, each of them take the file to be removed as their only
argument.  The rmdir command requires the directory to be empty, so if you want
to delete a directory that is not empty, along with all its contents, run
<userinput>rm -r dir</userinput>.
</para>
</section>

<section id=symlink><title>Linking Files</title>
<para>
In Linux, you can have a special file called a "symbolic link" that acts just
like a copy of another file, except it takes up less space.  This is convinient
if two applications are looking for the same file in two separate places, 
because the file can be in both places at once, without taking up any extra
space, and any change to one is automatically applied to the other (really, 
there is only one file, the link is just a file pointing to the original file).
This is also useful for naming applications independant of their version number.
 For instance, you could have a link called "application" that points to
"application1.0".  To create a link, use the following command:
<userinput>ln -s originalfile link</userinput>.
</para>
</section>
</chapter>
