In this article, we’ll take a look at hidden files and directories in Linux, including their purpose and some common misconceptions.
We’ll also see how we can use simple flags to show hidden files and directories on the command line and explore some special-purpose hidden files.
2. Purpose of Hidden Files
In some instances, we may want to hide specific files or directories inside another directory. For example:
- User preferences
- Operating system files
- Project-specific files (e.g., Eclipse configuration in an Eclipse project)
- Repository-specific files (e.g., Git configuration in a Git repository)
To hide a file, we prepend a dot to its name.
Thus, we can create a hidden file named .hidden.sh using touch:
$ touch .hidden.sh
We can also create a hidden directory by prepending a dot to the directory name.
For example, we can create a hidden directory named .preferences using mkdir:
$ mkdir .preferences
To differentiate between hidden and visible files, we also create a visible file using touch:
$ touch visible.sh
If we display the files in the current directory using the ls -l command, we only see visible.sh — we don’t see our hidden file or directory:
$ ls -l -rw-rw-rw- 1 jalbano jalbano 0 Jan 4 09:53 visible.sh
Since we have hidden our .hidden.sh file and .preferences directory, ls only displays our visible.sh file by default.
A common misconception, though, is that hidden files can be used as a means of security. Obscurity is not security, so hidden files should not be used as a means of security. As we will see below, we can easily display hidden files and directories using ls and, therefore, hidden files provide no protection from unwanted eyes.
3. Display Hidden Files
To display hidden files or directories, we include the a flag in our ls command.
The a flag instructs the ls command to include all files — and not ignore files starting with a dot.
Therefore, we can display the hidden files and directories we created by executing ls -al:
$ ls -al drwxrwxrwx 1 jalbano jalbano 512 Jan 4 09:53 . drwxr-xr-x 1 jalbano jalbano 512 Jan 3 22:37 .. -rw-rw-rw- 1 jalbano jalbano 0 Jan 3 22:37 .hidden.sh drwxrwxrwx 1 jalbano jalbano 512 Jan 3 22:37 .preferences -rw-rw-rw- 1 jalbano jalbano 0 Jan 4 09:53 visible.sh
Using this command, we can now see both the hidden and visible files in the current directory.
4. Special-Purpose Hidden Files
Besides .hidden.sh and .preferences, our ls -al command also lists the current directory (.) and the parent directory (..).
These two directories are included in all directories by default and act as references that allow us to navigate relative to our current directory.
For example, if we wish to navigate to the parent of the directory we are currently in, we can execute:
$ cd ..
To hide these two directories while displaying all other hidden files and directories, we use the A flag in our ls command.
This command displays almost all files and directories, including hidden ones, except for the current and parent directories.
If we execute ls -Al, we’ll see:
$ ls -Al -rw-rw-rw- 1 jalbano jalbano 0 Jan 3 22:37 .hidden.sh drwxrwxrwx 1 jalbano jalbano 512 Jan 3 22:37 .preferences -rw-rw-rw- 1 jalbano jalbano 0 Jan 4 09:53 visible.sh
This allows us to view all of the files and directories we have created — ignoring the default hidden directories — thus removing clutter.
In this tutorial, we looked at the purpose of hidden files, how to create them, and how to view them.
We also explored some of the special-purpose hidden directories included in Linux by default.
As noted above, we should use hidden files as a mechanism for reducing clutter and not as a means of securing a file or directory.