While on sabbatical in 1978, Ken Thompson helped student Bill Joy write the Berkeley Software Distribution (BSD). AT&T's UNIX became a stable commercial product while BSD became a research project and teaching tool. This split between AT&T and BSD remains today. However, most commercial and free UNIXes are a blend of both.
In 1987 Andrew S. Tanenbaum, a professor in Amsterdam, the Netherlands, creates MINIX as a teaching aid for his Operating Systems class. This was one of the first, complete implementations, of a "free" UNIX-like OS (you had to buy Dr. Tanenbaum's book to get it).
From: torvalds@klaava.Helsinki.FI (Linus Benedict Torvalds) Newsgroups: comp.os.minix Subject: What would you like to see most in minix? Summary: small poll for my new operating system Message-ID: <1991Aug25.205708.9541@klaava.Helsinki.FI> Date: 25 Aug 91 20:57:08 GMT Organization: University of Helsinki Hello everybody out there using minix - I'm doing a (free) operating system (just a hobby, won't be big and professional like gnu) for 386(486) AT clones. This has been brewing since april, and is starting to get ready. I'd like any feedback on things people like/dislike in minix, as my OS resembles it somewhat (same physical layout of the file-system (due to practical reasons) among other things). I've currently ported bash(1.08) and gcc(1.40), and things seem to work. This implies that I'll get something practical within a few months, and I'd like to know what features most people would want. Any suggestions are welcome, but I won't promise I'll implement them :-) Linus (torvalds@kruuna.helsinki.fi) PS. Yes - it's free of any minix code, and it has a multi-threaded fs. It is NOT protable (uses 386 task switching etc), and it probably never will support anything other than AT-harddisks, as that's all I have :-(.In 1994 he realeased the kernel v1.0 and the associated GNU tools as his first widespread, public, GNU/Linux distribution.
Whereas Tanenbaum's MINIX was based on a microkernel architecture that does only a very few things, Linus' kernel is based on a modular, macrokernel architecture where a lot of functionality is built into the kernel. Because the running kernel always has priority over user applications, a macrokernel can improve speed and efficiency of critical operating system functions.
Because of its modularity and open source nature, anybody can add functionality to the kernel. However, Linus has final authority over what is officially added to a kernel release. Kernels are released in "stable" and "development" versions. Stable versions are always even numbered: 2.0.7-3, 2.2.12, and 2.4.9-13 are all stable kernels. Development versions are always odd numbered: 2.1.4, 2.3.5-2, and 2.5.1 are all development kernels. After freezing enhancements and bug fixes to a stable kernel, a new development kernel tree starts. When a development tree becomes stable enough, it gets renumbered as a new stable release.
A final benefit of Linus' open source, modular, macrokernel is the user's ability to remove or include only the parts of the kernel they want or need. This has resulted in full blown router engines, based on GNU/Linux, that fit on a floppy disk. Also, as a system administrator for a server, you can fully optimize the kernel code for what your server does.
It is important to note that the kernel is completely seperate from any distribution. Kernel development and releases continues on its own schedule. When a new kernel is released, distributions take time to get their configuration and tools working with the new kernel (by adding and removing code to and from the kernel).
Even though most (usually all) of the software in a distribution of software is free (money-wise), distributors still sell GNU/Linux. Purchasing GNU/Linux usually provides you with printed manuals (books), free installtion support, and sometimes commercial software. However, almost every distribution allows you to download a CD ISO image.
| Mount Point | Filesystem Type | Size | Primary Partition |
|---|---|---|---|
| /boot | ext3 | 128 | Yes |
| N/A | swap | 256 | No |
| / | ext3 | 3072 | Yes |
| /home | ext3 | Fill to maximum allowable size | Yes |
| Label | Value |
|---|---|
| IP Address | 130.39.198.139 |
| Netmask | 255.255.252.0 |
| Network | 130.39.196.0 |
| Broadcast | 130.39.199.255 |
| Hostname | emac1.ocs.lsu.edu |
| Gateway | 130.39.196.1 |
| Primary DNS | 130.39.254.5 |
| Secondary DNS | 130.39.244.30 |
| Tertiary DNS | 130.39.3.5 |
| Label | Value |
|---|---|
| User Name | Ron |
| Full Name | Ron D. Hay |
| Password | work2hard |
| Confirm | work2hard |
Then click "OK"
You're done! Congratulations!
We will shut the machine off during the reboot and continue tomorrow.
GRUB then loads the kernel which immediately starts detecting hardware and loading drivers. As soon as the kernel is fully loaded and initialized (remember, the Linux kernel is a macrokernel architecture that has a lot built into it), it starts init which displays the Welcome to Red Hat Linux message. Newer versions of Red Hat's init allow you to press "I" to enter an interactive mode, letting you selectively choose which services to start (or not start), similar to the Mac when jumping into Extension Manager, or DOS/Windows by pressing F5.
As each service is started, its name is echoed on the left of the screen. If the service starts successfully, a message [ OK ] appears on the right. If the service failed to start successfully, a message [FAILED] appears on the right.
One of the services that starts is "Kudzu" which provides minimal "Plug-and-Play" functionality. If new hardware is added to a system, Kudzu will (hopefully) detect, configure, and load the appropriate driver for it. Our system has an on board audio chip that Kudzu detects. Chose "Configure" to allow Kudzu to configure and load the appropriate driver. After Kudzu completes, more services will continue to load.
Once all services have loaded (init has finished) the login prompt appears. Since we purposfully selected a Text based login (vs. a Graphical login) we get the default message and prompt.
| Command | Description | DOS/Windows Command |
|---|---|---|
| cat | Show contents of a file | type |
| cd | Change directory | cd |
| cp | Copy a file | copy |
| echo | Display output | echo |
| exit | Terminate a session | exit |
| grep | Find lines in a file | N/A |
| file | Determine file type | File Extension |
| find | Find a file | Windows Explorer Find |
| kill | Terminate a running process | Task Manager |
| ln | Link a file to another file | Create Shortcut |
| ls | Display files in a directory | dir |
| man | Get help about commands | Help |
| mkdir | Create a directory | mkdir |
| more | Display a file one page at a time | more |
| mv | Move or rename a file | rename |
| passwd | Change user's password | Change Password |
| ps | List running processes | Task Manager |
| rm | Remove a file | delete |
| rmdir | Remove a (empty) directory | rmdir |
| vi | Edit a file | edit or notepad |
| wc | Count words, lines and characters in a file | N/A |
Most commercial UNIXes provide proprietary X-Windows servers for their version of UNIX. The free UNIX world has concentrated on XFree86 as the primary X-Windows server (in spite of the "86" referring to the Intel x86 architecture, XFree86 has been ported to numerous architectures).
Besides the X-Windows server, the X-Windows protocol requires a window manager to display the windows, however it chooses. The two currently dominant window managers in the free UNIX world are KDE and GNOME. KDE was developed by an independent group of programmers that is a loose approximation of the commercial CDE environment. GNOME development was started, under a free license, by Red Hat but has since moved to another company called Ximian who continues devlopment and provides the free availability.
Running an X-Windows server and window manager on a machine provides a familiar graphical interface. However, both GNOME and KDE require higher amounts of system resources than older, more simpler window managers like fvwm. Luckily, in the free UNIX world the user has a choice (kind of).
The next most difficult thing to grasp about the UNIX filesystem is that everything in UNIX is treated as a file. Several of the "default" directories in GNU/Linux equate to locations in Windows. EVERYTHING! This includes directories, partitions, disk drives, mice, serial ports, printers, displays, network interfaces, etc. Everything.
As mentioned above, everything starts at the "root" (/). This means that all of the devices in a system have a unique path in a UNIX system (i.e. /dev/rmt0 would be a tape drive connected to the system).
Here is a brief table comparing UNIX filesystem locations with their closest Windows equivalents:
| Path | Windows Equivalent | Description |
|---|---|---|
| / | C: | The start of the filesystem (or main drive in Windows) |
| /home | My Documents or Profiles or D: | User's private files |
| /usr or /usr/local | Program Files | Installed software |
| /dev | Windows or Windows\System | Device drivers |
| /etc | The Registry or .ini files | Application configuration information |
| /tmp | Windows\Temp | Temporary system files |
| /bin | Windows | System executable files |
Packages come in either source or binary form. Binary packages are architecture specific (i.e. Intel uses i386, i486, i586, and i686; PowerPC uses ppc, SPARC uses sparc, etc.) and can only be installed on the appropriate hardware. The package manger command is rpm which is fully featured. Here is a table of commonly used rpm commands and what they do:
| Command | Description |
|---|---|
| rpm -qa | List all installed packages |
| rpm -qi package | Show information about an installed package |
| rpm -qil package | Show information about an installed package including all files in the package |
| rpm -qip package | Show information about an uninstalled package |
| rpm -qilp package | Show information about an uninstalled package including all files in the package |
| rpm -qf file | Determine which installed package a file belongs to |
| rpm -Uvh package | Install or upgrade a package |
| rpm -Fvh package | Update an installed package (freshen) |
| rpm -e package | Uninstall a package |
| rpm --verify package | Verify the integrity of an installed package |
| rpm --help | Get help on rpm (there are many more optoins available) |
After a Windows installation, the first thing you need to do is update the system. Similarly, after a GNU/Linux OS installation you need to apply new updates. Windows provides a website http://windowsupdate.com/ to obtain updated software. Red Hat provides a website https://www.redhat.com/apps/support/errata/ to do the same. LSU mirrors updates for specific versions of Red Hat at http://redhat.lsu.edu/. Our automated service will also e-mail a user when new updates appear on the mirror. The updates are available over the web at http://redhat.lsu.edu/7.2/updates/ or via NFS at redhat.lsu.edu:/redhat/7.2/updates.
We have already created a document describing the procedure used to update software on a GNU/Linux machine: http://status.lsu.edu/security/linuxmanagement.html#updates and we will use this document to update our newly installed machine.
For instance, to change the DNS servers on a Windows machine, you have to get to the Network Control Panel applet and navigate through several panels, make the change, and depending on your Windows version, reboot the machine. In Red Hat, all you have to do is edit the /etc/resolv.conf file (you can optionally use the text based tool netconfig or a GUI tool).
For instance, to stop the web server, you simply type:
To start the web server again, type:
The command ntsysv provides a text menu method of controlling which services start automatically when the machine is rebooted. There is also a nice GUI utility to do the same thing.
The next step in finishing our install of a new Red Hat GNU/Linux system would be securing it. This involves disabling unnecessary services, providing encryption to services that must run, limiting connections to certain IP addresses, presenting banners for running services, securing a service's access to the local filesystem, and implementing a firewall. We have a brief introduction to this process at http://status.lsu.edu/security/intro.html.