- The Unix Operating System
- The Linux Operating System
- The GNU Project
- Summary
The Linux Operating System
One popular free Unix implementation is Linux. Linux has gained increasing acceptance in the Unix marketplace as a solid production Unix operating system. The Linux system consists of a core Unix-like kernel and a host of libraries. This section describes the pieces of the Linux operating system.
The Linux Kernel
The development of the Linux kernel has taken on a very rapid pace. Linus Torvalds, creator of Linux, maintains strict control over the Linux kernel, although he accepts change requests from anyone, anywhere. There have been many advances in the Linux kernel design over the years, such as the addition of modules.
The kernel developers use a strict version control system. The format of a kernel release is
linux-a.b.c
where a is the major release number, b is the minor release number, and c is the patch number. Currently, a convention has been established where odd-numbered minor releases are considered developmental releases, and even-numbered minor releases are considered stable production releases.
At the time of this writing, the current stable production release of the Linux kernel is 2.4.1, whereas the current development release is 2.3.99-pre1. Although version 2.4.2 is the current kernel release, most Linux distributions have not released versions using this kernel.
To determine the kernel version that your Linux system is using, you can use the uname command with the -a option. Listing 3.6 shows an example of this command using a Mandrake 6.0 Linux system.
Listing 3.6 Sample uname -a Output
[rich@shadrach]$ uname -a Linux shadrach.smallorg.org 2.2.9-19mdk #1 Wed May 19 19:53:00 GMT 1999 _ i586 unknown
The output from the uname command is shown in line 2. The third field shows the specific Linux kernel version used. This example uses the 2.2.9 kernel that was compiled specifically for the Mandrake Linux distribution, thus the extra added -19mdk information.
It is possible to download newer versions of the kernel to install in a running Linux system. You must have the kernel source code files, which are usually available for download from the Linux Kernel Archives at http://www.kernel.org. Compiling and installing a new kernel is not for the beginner. Numerous steps are involved in the process. If you decide to upgrade your Linux kernel, please read all the documentation that comes with the kernel source code and any tips provided by your specific Linux distribution support group.
CAUTION
Installing a new Linux kernel falls under the category of "if it ain't broke, don't fix it." If your Linux server is not experiencing any problems, don't attempt to install a new kernel just because it is newer. Many Linux distributions are fine-tuned to work with a specific kernel; changing only the kernel can bring unpredictable results.
The Linux Libraries
The Linux operating system also depends heavily on the C programming language. The kernel, many device drivers, and almost all the utilities were written using the C language. It is not surprising that most of the application programs written for the Linux platform were also written in C.
In Unix, the lib prefix denotes library files. A library table keeps track of all the shared libraries registered on the system. The file /etc/ld.so.conf contains the list of libraries that are inserted into the library table. You can display the current library table on your Linux system by using the ldconfig command. Listing 3.7 shows a sample partial output from the ldconfig command on a Mandrake 6.0 Linux system. This is only a partial listing because, as shown in line 2, 534 different libraries are registered on this Linux system.
Listing 3.7 Sample ldconfig Partial Output
[rich@shadrach]$ /sbin/ldconfig -p 534 libs found in cache ´/etc/ld.so.cache' (version 1.7.0) libzvt.so.2 (libc6) => /usr/lib/libzvt.so.2 libzvt.so.2 (libc6) => /usr/lib/libzvt.so.2 libz.so.1 (libc6) => /usr/lib/libz.so.1 libz.so.1 (libc6) => /usr/lib/libz.so.1 libx11amp.so.0 (libc6) => /usr/X11R6/lib/libx11amp.so.0 libxml.so.0 (libc6) => /usr/lib/libxml.so.0 libxml.so.0 (libc6) => /usr/lib/libxml.so.0 libvgagl.so.1 (libc6) => /usr/lib/libvgagl.so.1 libvgagl.so.1 (libc5) => /usr/i486-linux-libc5/lib/libvgagl.so.1 libvgagl.so.1 (libc6) => /usr/lib/libvgagl.so.1 libvgagl.so (libc6) => /usr/lib/libvgagl.so libvgagl.so (libc6) => /usr/lib/libvgagl.so libvga.so.1 (libc6) => /usr/lib/libvga.so.1 libvga.so.1 (libc5) => /usr/i486-linux-libc5/lib/libvga.so.1 libvga.so.1 (libc6) => /usr/lib/libvga.so.1 libvga.so (libc6) => /usr/lib/libvga.so libvga.so (libc6) => /usr/lib/libvga.so libuulib.so.5 (libc6) => /usr/lib/libuulib.so.5 libuulib.so.5 (libc6) => /usr/lib/libuulib.so.5 libuulib.so (libc6) => /usr/lib/libuulib.so libuulib.so (libc6) => /usr/lib/libuulib.so
Each Linux implementation requires that a version of the standard C library be installed. The standard C library contains many of the commonly used functions for the system.
If you do not know which library your Linux distribution is using, you can find out by looking for the libraries in the /lib directory. Table 3.5 shows the different C libraries that might be present on a Linux system.
Table 3.5 List of Linux C Libraries
Library |
Description |
libc.so |
libc1 a.out library |
libc.so.2 |
libc2 a.out library |
libc.so.3 |
libc3 a.out library |
libc.so.4 |
libc4 a.out library |
libc.so.5 |
libc5 ELF library |
libc.so.6 |
Symbolic link to a glibc library |
libc-2.0.x.so |
glibc 2.0 ELF library |
libc-2.1.x.so |
glibc 2.1 ELF library |