Let's consider how Linux distinguishes between different types of files. In the long listing we have just shown, the first character on each line indicates the type of file. So, normal files [are] indicated by a dash ("-"), directory by a "d". If it's a symbolic link, there's an "l". If it's a so-called FIFO or a named pipe, it's indicated by a "p". The Unix domain socket is indicated by an "s". These work similarly to pipes, but they work through a networking infrastructure. If the first character is a "b", then it indicates it's a so-called device node for a block device, such as a hard disk or a CD-ROM, etc. And if it's "c", it indicates it's a character device, such as an audio card, a line printer, etc., where you send streams of data byte by byte. So, there's big difference between block devices and character devices, in that block devices always work, not surprisingly, in blocks of data and character devices one byte at a time. In any case, you usually only find these device nodes in the /dev directory, they don't belong anywhere else by convention. In the Unix philosophy, one often says: <i>Everything is a file</i>. So that you can use the same basic tools to operate on any kind of object, whether it's a normal file, whether it's some kind of device, whether it's a named pipe, or a Unix domain socket, etc. Use the same input/output functions, open and close functions, etc. Network devices are somewhat different, but almost everything else works just as a file. Even network devices use a file paradigm when you work with what are known as sockets. One important point is that in most cases, Linux does not care about file extensions, whatever follows the dot sign. It doesn't assume that if it's .jpg, it's an image, for instance. It actually looks at the file and determines that. There are a few exceptions to this. Sometimes, compilers look at the extension and decide whether it's a C++ file, whether it's a Fortran file, or whatever, so it knows how to compile it. But that can always be overwritten, even though it's a default. So, that's just a little bit about how Linux deals with different file types.