File system
Structure
The files on a Linux system are arranged in a hierarchical directory structure, where the first directory is the root directory (/
). Linux does not employ the concept of drive letters. Linux always has a single tree (where different storage devices may contain different branches of the tree).
- File names that begin with a period character are hidden. This only means that
ls
will not list them unless you sayls -a
. - File names in Linux, like Unix, are case sensitive.
- Linux has no concept of file extensions like legacy operating systems.
/ |
The root directory where the file system begins. In most cases the root directory only contains subdirectories. |
/boot |
This is where the Linux kernel and boot loader files are kept. The kernel is a file called vmlinuz. |
/etc |
Contains the configuration files for the system. All of the files in /etc should be text files, like:- /etc/passwd : Contains the essential information for each user. It is here that users are defined.- /etc/fstab : Contains a table of devices that get mounted when your system boots. This file defines your disk drives.- /etc/hosts : Lists the network host names and IP addresses that are intrinsically known to the system.
|
/etc/init.d |
This directory contains the scripts that start various system services typically at boot time. |
/bin |
These two directories contain most of the programs for the system. The /bin directory has the essential programs that the system requires to operate, while /usr/bin contains applications for the system's users. |
/sbin |
The sbin directories contain programs for system administration, mostly for use by the superuser.
|
/usr |
The /usr directory contains a variety of things that support user applications. |
/usr/local |
/usr/local and its subdirectories are used for the installation of software and other files for use on the local machine. What this really means is that software that is not part of the official distribution (which usually goes in /usr/bin ) goes here. |
/usr/src |
Source code files. If you installed the kernel source code package, you will find the entire Linux kernel source code here.. |
/usr/share/doc |
Various documentation files in a variety of formats. |
/usr/share/man |
The man pages are kept here. |
/usr/share/X11 |
Support files for the X Window system. |
/var |
The /var |
/var/log |
Directory that contains log files. These are updated as the system runs. You should view the files in this directory from time to time, to monitor the health of your system. |
/var/spool |
This directory is used to hold files that are queued for some process, such as mail messages and print jobs. When a user's mail first arrives on the local system (assuming you have local mail), the messages are first stored in /var/spool/mail |
/lib |
The shared libraries (similar to DLLs in that other operating system) are kept here. |
/home |
Where users keep their personal work. In general, this is the only place users are allowed to write files. |
/root |
This is the superuser's home directory. |
/tmp |
A directory in which programs can write their temporary files. |
/dev |
A special directory, which contains devices that are available to the system. In Linux (like Unix), devices are treated like files. You can read and write devices as though they were files. For example /dev/fd0 is the first floppy disk drive, /dev/sda (/dev/hda on older systems) is the first hard drive. All the devices that the kernel understands are represented here. |
/proc |
The /proc directory is also special. This directory does not contain files. In fact, this directory does not really exist at all. It is entirely virtual. The /proc directory contains little peep holes into the kernel itself. There are a group of numbered entries in this directory that correspond to all the processes running on the system. In addition, there are a number of named entries that permit access to the current configuration of the system. Many of these entries can be viewed. Try viewing /proc/cpuinfo . This entry will tell you what the kernel thinks of your CPU. |
/media |
/media , a normal directory, is used in a special way. The /media directory is used for mount points. The different physical storage devices are attached to the file system tree in various places. This process of attaching a device to the tree is called mounting. For a device to be available, it must first be mounted.When your system boots, it reads a list of mounting instructions in the file /etc/fstab , which describes which device is mounted at which mount point in the directory tree. This takes care of the hard drives, but you may also have devices that are considered temporary, such as CD-ROMs, thumb drives, and floppy disks. Since these are removable, they do not stay mounted all the time. The /media directory is used by the automatic device mounting mechanisms found in modern desktop oriented Linux distributions. On systems that require manual mounting of removable devices, the /mnt directory provides a convenient place for mounting these temporary devices. You will often see the directories /mnt/floppy and /mnt/cdrom . To see what devices and mount points are used, type mount. |
File manipulation
Files are most frequently manipulated using cp
, mv
, rm
and mkdir
.
Wildcards
Since the shell uses filenames so much, it provides special characters called wildcards to help rapidly specify groups of filenames using patterns.
*
- Matches any characters?
- Matches any single character-
[characters]
- Matches any character that is a member of the set characters. The set of characters may also be expressed as a POSIX character class:[:alnum:]
- Alphanumeric characters[:alpha:]
- Alphabetic characters[:digit:]
- Numerals[:upper:]
- Uppercase alphabetic characters[:lower:]
- Lowercase alphabetic characters
-
[!characters]
- Matches any character that is not a member of the set characters
Examples
Wildcard | Match |
---|---|
* |
All filenames. |
g* |
All filenames that begin with the character "g". |
b*.txt |
All filenames that begin with the character "b" and end with the characters ".txt". |
Data??? |
Any filename that begins with the characters "Data" followed by exactly 3 more characters. |
[abc]* |
Any filename that begins with "a" or "b" or "c" followed by any other characters |
[[:upper:]]* |
Any filename that begins with an uppercase letter. This is an example of a character class. |
BACKUP.[[:digit:]][[:digit:]] |
Another example of character classes. This pattern matches any filename that begins with the characters "BACKUP." followed by exactly two numerals. |
*[![:lower:]] |
Any filename that does not end with a lowercase letter. |
Device file
In Unix-like operating systems, a device file or special file is an interface to a device driver that appears in a file system as if it were an ordinary file. There are also special files in MS-DOS, OS/2, and Microsoft Windows. These special files allow an application program to interact with a device by using its device driver via standard input/output system calls. Using standard system calls simplifies many programming tasks, and leads to consistent user-space I/O mechanisms regardless of device features and functions.
In Unix and Unix-like systems, device nodes correspond to resources that an operating system's kernel has already allocated. As with other special file types, the computer system accesses device nodes using standard system calls and treats them like regular computer files. Two standard types of device files exist; unfortunately their names are, for historical reasons, rather counter-intuitive, and explanations of the difference between the two are often incorrect as a result.
Pseudo-devices
Device nodes on Unix-like systems do not necessarily have to correspond to physical devices. Nodes that lack this correspondence form the group of pseudo-devices. They provide various functions handled by the operating system. Some of the most commonly used (character-based) pseudo-devices include:
/dev/null
– accepts and discards all input; produces no output (always returns an end-of-file indication on a read)/dev/zero
– accepts and discards all input; produces a continuous stream of NUL (zero value) bytes/dev/full
– produces a stream of NUL (zero value) bytes when read; returns a "disk full" message when written to/dev/random
and/dev/urandom
– they produce a variable-length stream of pseudo-random numbers.
The null device is typically used for disposing of unwanted output streams of a process, or as a convenient empty file for input streams. This is usually done by redirection, e.g.:
command > /dev/null # send standard out to /dev/null
command 2> /dev/null # send standard error to /dev/null
command > /dev/null 2>&1 # send both standard out and standard error to /dev/null