Since this post is a snapshot in time. I recommend that you download a copy of the book which is updated frequently to improve and expand the content.
---------------------------------------
A phrase that will often come up in Linux conversation is that;
Everything is a file
For someone new to Linux this sounds like some sort of ‘in joke’ that is designed to scare off the unwary and it can sometimes act as a barrier to a deeper understanding of the philosophy behind the approach taken in developing Linux.
The explanation behind the statement is that Linux is designed to be a system built of a group of interacting parts and the way that those parts can work together is to communicate using a common method. That method is to use a file as a common building block and the data in a file as the communications mechanism.
The trick to understanding what ‘Everything is a file’ means, is to broaden our understanding of what a file can be.
Everything is a file
Traditional Files
The traditional concept of a file is an object with a specific name in a specific location with a particular content. For example, we might have a file named foo.txt
which is in the directory /home/pi/
and it could contain a couple of lines of text similar to the following;
foo.txt
which is in the directory /home/pi/
and it could contain a couple of lines of text similar to the following;Directories
As unusual as it sounds a directory is also a file. The special aspect of a directory is that is is a file which contains a list of information about which files (and / or sub-directories) it contains. So when we want to list the contents of a directory using the ls
command what is actually happening is that the operating system is getting the appropriate information from the file that represents the directory.
ls
command what is actually happening is that the operating system is getting the appropriate information from the file that represents the directory.System Information
However, files can also be conduits of information. The /proc/
directory contains files that represent system and process information. If we want to determine information about the type of CPU that the computer is using, the file cpuinfo
in the /proc/
directory can list it. By running the command `cat /proc/cpuinfo’ we can list a wealth of information about our CPU (the following is a subset of that information by the way);
Now that might not mean a lot to us at this stage, but if we were writing a program that needed a particular type of CPU in order to run successfully it could check this file to ensure that it could operate successfully. There are a wide range of files in the /proc/
directory that represent a great deal of information about how our system is operating.
/proc/
directory contains files that represent system and process information. If we want to determine information about the type of CPU that the computer is using, the file cpuinfo
in the /proc/
directory can list it. By running the command `cat /proc/cpuinfo’ we can list a wealth of information about our CPU (the following is a subset of that information by the way);/proc/
directory that represent a great deal of information about how our system is operating.Devices
When we use different devices in a Linux operating system these are also represented as a file. In the /dev/
directory we have files that represent a range of physical devices that are part of our computer. In larger computer systems with multiple disks they could be represented as /dev/sda1
and /dev/sda2
, so that when we wanted to perform an action such as formatting a drive we would use the command mkfs
on the /dev/sda1
file.
The /dev/
directory also holds some curious files that are used as tools for generating or managing data. For example /dev/random
is an interface to the kernels random number device. /dev/zero
represents a file that will constantly stream zeros (while this might sound weird, imagine a situation where you want to write over an area of disk with data to erase it). The most well known of these unusual files is probably /dev/null
. This will act as a ‘null device’ that will essentially discard any information sent to it.
The post above (and heaps of other stuff) is in the book 'Just Enough Linux' that can be downloaded for free (or donate if you really want to :-))./dev/
directory we have files that represent a range of physical devices that are part of our computer. In larger computer systems with multiple disks they could be represented as /dev/sda1
and /dev/sda2
, so that when we wanted to perform an action such as formatting a drive we would use the command mkfs
on the /dev/sda1
file./dev/
directory also holds some curious files that are used as tools for generating or managing data. For example /dev/random
is an interface to the kernels random number device. /dev/zero
represents a file that will constantly stream zeros (while this might sound weird, imagine a situation where you want to write over an area of disk with data to erase it). The most well known of these unusual files is probably /dev/null
. This will act as a ‘null device’ that will essentially discard any information sent to it.
It's /dev/null, not /dev/nul. By the way, a couple of examples using devices might be a nice touch. :)
ReplyDeleteDamn! Thanks for catching that. Totally agree on the examples point. There are a couple in the book, but their spread out, so the message is a bit lost. I'll put some thought into a fuller explanation. Thanks again.
Delete