How to Identify File Types in Linux

As we all know that everything is a file in Linux, which includes Hard Disk, Graphics Card, etc.

When you are navigating to the Linux file system most of the files are fall under regular files and directories.

But it has other file types as well for different purpose. It has five types as per my knowledge.

So, it’s very important to understand the file types in Linux, that helps you in many ways.

In Linux, a file can use an extension, but the actual purpose may be different. Linux does not use file extensions, instead the file type is part of the file name.

If you can’t believe this, check out the full article to know how important it is.

To understand the color coding of Linux files go to the article below.

Make a note: Take a backup whenever you make any changes to the configuration file, as if you made the changes incorrectly, it could seriously damage your system, so be careful when you do this.

What Type of Files are Available in Linux

As per my knowledge, totally 7 types of files are available in Linux with 3 Major categories. The details are below.

  • Regular File
  • Directory File
  • Special Files (There are five types of files in the special category)
  • Link File
  • Character Device File
  • Socket File
  • Named Pipe File
  • Block File

Refer the below table for a better understanding of file types and their symbols in Linux.

+--------------+------------------------+
|    Symbol    |      File Types        |
+--------------+------------------------+
|      -       | Regular File           |
|      d       | Directory              |
|      l       | Link File              |
|      c       | Character Device File  |
|      s       | Local Socket File      |
|      p       | Named Pipe File        |
|      b       | Block Device File      |
+--------------+------------------------+

Method-1: How to Identify File types in Linux Using the ls Command

The ls command helps you to identify and classify all kind of the file types found on a Linux system.

Regular file

The regular file is a common file type found everywhere on Linux system. These include text files, script files, images, binary files, and shared libraries,etc.

“-” This refers to the identification symbol for the regular file. You can use the rm command to remove a regular file.

# ls -la | grep ^-
-rw-------.  1 mageshm mageshm      1394 Jan 18 15:59 .bash_history
-rw-r--r--.  1 mageshm mageshm        18 May 11  2012 .bash_logout
-rw-r--r--.  1 mageshm mageshm       176 May 11  2012 .bash_profile
-rw-r--r--.  1 mageshm mageshm       124 May 11  2012 .bashrc
-rw-r--r--.  1 root    root           26 Dec 27 17:55 liks
-rw-r--r--.  1 root    root    104857600 Jan 31  2006 test100.dat
-rw-r--r--.  1 root    root    104874307 Dec 30  2012 test100.zip
-rw-r--r--.  1 root    root     11536384 Dec 30  2012 test10.zip
-rw-r--r--.  1 root    root           61 Dec 27 19:05 test2-bzip2.txt
-rw-r--r--.  1 root    root           61 Dec 31 14:24 test3-bzip2.txt
-rw-r--r--.  1 root    root           60 Dec 27 19:01 test-bzip2.txt

Directory

The directory is the second most common file type found on a Linux system. This can be created with the mkdir command.

# ls -la | grep ^d
drwxr-xr-x.  3 mageshm mageshm      4096 Dec 31 14:24 links/
drwxrwxr-x.  2 mageshm mageshm      4096 Nov 16 15:44 perl5/
drwxr-xr-x.  2 mageshm mageshm      4096 Nov 16 15:37 public_ftp/
drwxr-xr-x.  3 mageshm mageshm      4096 Nov 16 15:37 public_html/

Link File

A link is a mechanism for creating a shortcut to the original file or directory. It contains information about another file or directory.

Links allow more than one filename to reference the same file.

There are two types of link files available, it’s soft link and hard link.

# ls -la | grep ^l
lrwxrwxrwx.  1 root    root           31 Dec  7 15:11 s-link-file -> /links/soft-link/test-soft-link
lrwxrwxrwx.  1 root    root           38 Dec  7 15:12 s-link-folder -> /links/soft-link/test-soft-link-folder

Character Device file

Character device files allow the user and application program to communicate directly with the hardware device. It’s not allow programs to read or write single characters at a time.

It is available under the /dev directory.

# ls -la | grep ^c
crw-------.  1 root root      5,   1 Jan 28 14:05 console
crw-rw----.  1 root root     10,  61 Jan 28 14:05 cpu_dma_latency
crw-rw----.  1 root root     10,  62 Jan 28 14:05 crash
crw-rw----.  1 root root     29,   0 Jan 28 14:05 fb0
crw-rw-rw-.  1 root root      1,   7 Jan 28 14:05 full
crw-rw-rw-.  1 root root     10, 229 Jan 28 14:05 fuse

Block Device file

Block devices provide buffered access to hardware devices, it’s similar to character devices. Unlike character devices, block devices will always allow the programmer to read or write a block of any size at a time.

# ls -la | grep ^b
brw-rw----.  1 root disk      7,   0 Jan 28 14:05 loop0
brw-rw----.  1 root disk      7,   1 Jan 28 14:05 loop1
brw-rw----.  1 root disk      7,   2 Jan 28 14:05 loop2
brw-rw----.  1 root disk      7,   3 Jan 28 14:05 loop3
brw-rw----.  1 root disk      7,   4 Jan 28 14:05 loop4

Socket file

A socket is a special file used for inter-process communication, which enables communication between two processes.

# ls -la | grep ^s
srw-rw-rw- 1 root root 0 Jan  5 16:36 system_bus_socket

Named Pipe file (FIFO)

a named pipe (also known as a FIFO) is one of the methods for inter-process communication.

Named pipes are special files that can exist anywhere in the file system. They can be created with the command mkfifo.

A named pipe is marked with a p as the first letter of the mode string.

# ls -la | grep ^p
prw-------.  1 root    root        0 Jan 28 14:06 replication-notify-fifo|
prw-------.  1 root    root        0 Jan 28 14:06 stats-mail|

Method-2: How to Identify File types in Linux Using the file Command

The file command allows you to determine various file types in Linux. There are three sets of tests will be performed against a file in the below order to identify the file types.

  • Filesystem tests: Filesystem tests checks to see if the file is empty, or if it’s a special file. If the file type is found in the system header file, it is displayed as the correct file type.
  • Magic Tests: Magic tests check the magic number stored in a specific location near the beginning of the file to determine the file type. Magic tests use the following files to match a file to its file type. The magic files are /usr/share/misc/magic.mgc, /usr/share/misc/magic and /etc/magic. If a file does not match any of the entries in the magic file, it is examined to see if it is a text file. If the file character set is reported like ASCII, ISO-8859-x, UTF-8, and extended-ASCII are identified as a ‘text’ file. UTF-16 and EBCDIC are text files, but translation will be required before reading them.
  • Language Tests: Once the file type is determined as a text file. Language tests look for specific strings to determine in what language the file is written. It will appear anywhere in the first few blocks of a file. These tests are less reliable than the previous two tests, so they are performed last.

Regular file

Enter the file command on your terminal, followed by the regular file. The file command reads the contents of the given file and shows what kind of file it is.

That’s why you see below the different results for each regular file.

# file 2daygeek_access.log 
2daygeek_access.log: ASCII text, with very long lines

# file powertop.html 
powertop.html: HTML document, ASCII text, with very long lines

# file 2g-test
2g-test: JSON data

# file powertop.txt
powertop.txt: HTML document, UTF-8 Unicode text, with very long lines

# file 2g-test-05-01-2019.tar.gz
2g-test-05-01-2019.tar.gz: gzip compressed data, last modified: Sat Jan  5 18:22:20 2019, from Unix, original size 450560

Directory

# file Pictures/
Pictures/: directory

Link File

# file log
log: symbolic link to /run/systemd/journal/dev-log

Character Device file

# file vcsu
vcsu: character special (7/64)

Block Device file

# file sda1
sda1: block special (8/1)

Socket file

# file system_bus_socket 
system_bus_socket: socket

Named Pipe file

# file pipe-test 
pipe-test: fifo (named pipe)

Method-3: How to Identify File types in Linux Using the stat Command

The stat command allow us to check file types or file system status. This utility giving more information than file command.

It shows lot of information about the given file such as Size, Block Size, IO Block Size, Inode Value, Links, File permission, UID, GID, File Access, Modify and Change time details.

Regular files

# stat 2daygeek_access.log
  File: 2daygeek_access.log
  Size: 14406929  	Blocks: 28144      IO Block: 4096   regular file
Device: 10301h/66305d	Inode: 1727555     Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/ daygeek)   Gid: ( 1000/ daygeek)
Access: 2019-01-03 14:05:26.430328867 +0530
Modify: 2019-01-03 14:05:26.460328868 +0530
Change: 2019-01-03 14:05:26.460328868 +0530
 Birth: -

Directory

# stat Pictures/
  File: Pictures/
  Size: 4096      	Blocks: 8          IO Block: 4096   directory
Device: 10301h/66305d	Inode: 1703982     Links: 3
Access: (0755/drwxr-xr-x)  Uid: ( 1000/ daygeek)   Gid: ( 1000/ daygeek)
Access: 2018-11-24 03:22:11.090000828 +0530
Modify: 2019-01-05 18:27:01.546958817 +0530
Change: 2019-01-05 18:27:01.546958817 +0530
 Birth: -

Link file

# stat /dev/log
  File: /dev/log -> /run/systemd/journal/dev-log
  Size: 28        	Blocks: 0          IO Block: 4096   symbolic link
Device: 6h/6d	Inode: 278         Links: 1
Access: (0777/lrwxrwxrwx)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2019-01-05 16:36:31.033333447 +0530
Modify: 2019-01-05 16:36:30.766666768 +0530
Change: 2019-01-05 16:36:30.766666768 +0530
 Birth: -

Character Device file

# stat /dev/vcsu
  File: /dev/vcsu
  Size: 0         	Blocks: 0          IO Block: 4096   character special file
Device: 6h/6d	Inode: 16          Links: 1     Device type: 7,40
Access: (0660/crw-rw----)  Uid: (    0/    root)   Gid: (    5/     tty)
Access: 2019-01-05 16:36:31.056666781 +0530
Modify: 2019-01-05 16:36:31.056666781 +0530
Change: 2019-01-05 16:36:31.056666781 +0530
 Birth: -

Block Device file

# stat /dev/sda1
  File: /dev/sda1
  Size: 0         	Blocks: 0          IO Block: 4096   block special file
Device: 6h/6d	Inode: 250         Links: 1     Device type: 8,1
Access: (0660/brw-rw----)  Uid: (    0/    root)   Gid: (  994/    disk)
Access: 2019-01-05 16:36:31.596666806 +0530
Modify: 2019-01-05 16:36:31.596666806 +0530
Change: 2019-01-05 16:36:31.596666806 +0530
 Birth: -

Socket file

# stat /var/run/dbus/system_bus_socket 
  File: /var/run/dbus/system_bus_socket
  Size: 0         	Blocks: 0          IO Block: 4096   socket
Device: 15h/21d	Inode: 576         Links: 1
Access: (0666/srw-rw-rw-)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2019-01-05 16:36:31.823333482 +0530
Modify: 2019-01-05 16:36:31.810000149 +0530
Change: 2019-01-05 16:36:31.810000149 +0530
 Birth: -

Named Pipe file

# stat pipe-test 
  File: pipe-test
  Size: 0         	Blocks: 0          IO Block: 4096   fifo
Device: 10301h/66305d	Inode: 1705583     Links: 1
Access: (0644/prw-r--r--)  Uid: ( 1000/ daygeek)   Gid: ( 1000/ daygeek)
Access: 2019-01-06 02:00:03.040394731 +0530
Modify: 2019-01-06 02:00:03.040394731 +0530
Change: 2019-01-06 02:00:03.040394731 +0530
 Birth: -

About Magesh Maruthamuthu

Love to play with all Linux distribution

View all posts by Magesh Maruthamuthu

Leave a Reply

Your email address will not be published. Required fields are marked *