The TipMe page, for understanding basic *nix things.

All examples are in the Training column pages.


Q: Ok. Describe any Unix-Compatible OS with one word.
A: Portable.

Since the beginning, nearly any *nix os (corporate or academic) was distributed by source code.
If corporate, a licence had to be paid.

All users of Unix had to sign a license that prohibited redistribution to the general public. - comment by Mr. Richard Stallman.

Then it could be compiled to any hardware, or better, processor family.
This is a tradition that is followed even now, but not as a ritual.
There are too many platforms for a code developer to compile for all.
So, this task is left to 3rd party (individuals, companies, communities).
Learning to compile and install software for your *nix is a must!

Q: Ok, Second word then?
A: Unified.

These operating systems handle everything (meaning everything) as a file.
They organize everything in a single filesystem tree , starting from root "/".
Directories, files, devices, local and remote filesystems, swap files and the pseudo-filesystem "/proc" belong to that ever-expandable tree.
So, the primary master hard disk is  the /dev/hda file.
The wave device of our first soundcard is /dev/dsp.
And a user can (if permitted to) access them from the command line.
And a file can be formatted and mounted as a filesystem.

Please be aware that not all things are unified, but most of them are.
For example, to access a web server, going to:
  /mnt/http/users.hol.gr/~micro/index.html
would be the most unified method.
In reality, we use the Uniform Resource Locator method:
  http://users.hol.gr/~micro/index.html
But there is a project common to Linux and *BSD called PortalFS which might solve the situation.

Q: Ok, ok. Third word?
A: Transparent.

You can browse local directories and network ones without knowing the difference!

if foo is a host
if bar is a shared directory in foo and documents is a subdir in bar
if I (the client) mount the share in /mnt/foo then

/mnt/foo/bar/documents is part of the filesystem tree like /usr or /home.
/usr could be your first logical partition in Primary Master hd (/dev/hda5).
/home could be globally shared in your network.

Telnet (or better ssh) can be used to operate a remote host.
rsh (or better ssh) can be used to give a single command to a remote host!

Output (therefore data) can be redirected to an application in a remote host!!
The X Server (graphics mechanism) can run an application from a remote host!!!
An entire desktop can be initialized this way!!!!

A host can export many independent different-user desktops, not only one!!!!!
Sound can be transparent, too.

So, even if there is only one *nix host in a network, you can have network resources shared (authentication, file and printer etc.) you can also operate it from everywhere provided that you have:
a Telnet or ssh client, and/or
an X Server for your operating system (remember portability?)!

Conclusion:
Using my local Desktop screen and peripherals, I can:
run at home an application from a mainframe in India using the remote cpu,
access at the same time a filesystem in England,
control the cd burner in my friend Linux workstation,
eject the written cd afterwards,
use his/her soundcard to play an album etc.etc.
... assuming I have privileges to do all these.

Q: Fourth?
A: Multiuser.

Every user has permissions and privileges, so do the programs he/she runs.
Every file or dir he/she owns (like /home/foo for user foo) can be:
Fully accessible by him
Only readable by the group
Unaccessible to world (all others)
A directory of his can be writable to all (as a public dir) but not erasable whatsoever!
And many users in parallel can be served, not just one.

Q: Fifth?
A: Stable!

There are some (mostly *BSD) servers that run for 2 years without restarting!
Furthermore, theoretically, a need to restart is only for kernel change.
As root (Unix Administrator) you can:

 load/unload modules (think drivers)
 bring up/down servers-daemons (ftp,web,filesharing,ssh),
 add/remove protocols (like ipx)
 change/turn off firewalls
 bring up/down network interfaces (i.e. ethernet, ppp)
 install/remove packages or compiled source
 bring up/down the swap file
 make/delete partitions and filesystems in hard disks.


And all this without restarting!

Q: Siiixth?
A: Modular.

Programs for unices are specialized and economic.
Specialized: They perform greatly in a single task.
Economic: Output is not verbose unless stated otherwise.
There is a common philosophy: Not to extend a programs purpose, but to create another one specialized instead.
A way of interaction between them is therefore developed.
So, the output of a programs can either:
be redirected to the input of another or:
passed as parameters to another.
The next program can also check the exit status of the previous one, so conditions can be checked.

Speaking of modularity, in Unix-Compatible OSes, X (the graphics mechanism) does only its specialized task: graphics. Modules, interfaces, services and daemons are brought independently.
Consequently, we can:

1) Operate a fully functional server in console mode, thus saving resources and increasing stability.

2) Exit the graphics mechanism, unload the graphics card module, install (maybe compile) another one, load it and load X again without interrupting any of the services our computer is providing.

3) Exit our desktop without exiting X and run a totally different one (this depends on the way we initially called our desktop).

Note: In MacOSX, which is based on BSD, some "compromises" may exist considering the modularity of its graphics mechanism against the whole system.

In general, Guis attached to an OS kernel lose modularity in favor of simplicity.
(This is not a case in Unices, GNU/Linux or *BSD of course)

Q: Seeeeeventh???
A: Powerful.

Programs in unices are generally non-interactive unless stated otherwise.
This (as well as the sixth description helps to create scripts to operate these programs.

Q: What is a script then?

A: A script is a high (human level) batch of commands that can use specialized utilities (like the ones described in the Helpme page) to do a complicated work.

Q: Wouldn't a big program do the same thing without pain?

A: Yes and no. Big multipurpose programs tend to be buggy.
A script (or a frontend) adds interactivity as well as a way of completing a complicated task with simple programs.
We can then do things that in other operating systems would need more and more special applications created.

Q: But scripts are text mode.

A: tcl/tk scripts are graphical, and give the impression of Gui applications.

A script can be automated with the same ease as it could be interactive.

Q: And what else uses scripts??

A: The OS boots through scripts!
Login procedure runs with scripts!
Servers initialize with scripts! Sql server is a big example.
X-Window System is brought up with scripts.

Q: Like my registry?

A: No. Managing a big binary database file and editing it with special tools is not the case in *nix.
A more universal, textual approach with a configuration file for every application, edited with a simple text editor IS the case!
              
Goto the HintMe, ImpressMe, AmazeMe pages for examples.

---------------- To Be Continued -------------------------