Unix is an “ideal” operating system that has been developed by many different vendors over the past years. There are many different Unix systems that differ in functionality, external look and feel, licensing model and other non standard features, developed by these different vendors. Few examples are Linux distributions, BSD systems, Sun/Oracle Solaris or Apple OS X. However, there are number of features that are common to all Unix and Unix-like systems. Unix systems have a hierarchical file system that allows relative and absolute file path naming. These file systems can be mounted locally or remotely from file server. All operations on file systems are carried by processes, which may spawn child processes to perform discrete tasks. All processes can by identified by their unique process ID (PID).
Unix systems have core kernel which is responsible for managing core system operations, such as logical devices for input/output (/dev/pty for example) and allocating resources to user and system services.
Originally designed as a text-processing system, Unix systems share many tools that manipulate and filter text in various ways. In addition, small utilities can be easily combined to form complete applications in rather sophisticated ways. Output from one application can be redirected to a file or another application. Combining applications with redirects allows creation of simple or more complex scripts that are capable of performing complicated and automated operations on text and files. These applications and scripts are executed from a user shell, which defines the user interface to the kernel.
Unix is multiprocess, multiuser, and multi-threaded system. This means that more than one user can execute a shell and applications concurrently, and that each user can execute applications concurrently from within a single shell. Each of these applications can then create and remove lightweight processes as required. Because Unix was created by active developers, rather than operating system administrators, it is best suited to fit programmers needs.
Below are some common features to typical Unix applications following Unix principles.
- Programs are small, self-contained, typically build to perform single task. If a new task needs to be resolved a few program is usually developed or existing programs are combined into a script.
- Programs accept data from standard input and write to standard input, and in return they can be chained to process each others output sequentially. Programs are non interactive, instead they present a wide range of command line options, that specify performed action. These ideas are consistent with the concept of piping, which is still fundamental to the operation of user shells. For example, the output of the ls command to list all files in a directory can be “piped” using the | symbol to a program such as grep to perform pattern matching. The number of pipes on a single command-line instruction is not limited.
- If some software doesn’t work properly anew one is usually developed within weeks or sometimes days.
This list is not exhaustive explanation of what is the Unix system. It is rather a guide to understand what makes Unix an exceptional operating system.